03-Linux网络故障排查:从DNS配置到防火墙设置的全面指南
1. 当Linux告诉你Name or service not known时第一次在Linux终端看到Name or service not known这个错误提示时我正急着要下载一个重要的软件包。那种感觉就像你明明知道朋友家的地址导航却死活找不到路。这个看似简单的网络问题背后可能藏着DNS配置、防火墙设置、网络服务状态等多重原因。最常见的情况是你的Linux系统无法将域名比如www.baidu.com解析成IP地址。这就好比你知道朋友叫张三但通讯录里却没有他的电话号码。在技术层面这意味着DNS解析失败了。我遇到过好几次这种情况有时候是因为虚拟机网络服务没启动有时候是DNS配置写错了还有时候是防火墙在作怪。要快速判断问题出在哪里我通常会先执行几个简单的测试命令。首先ping 8.8.8.8这是Google的公共DNS服务器IP如果能通说明网络连接本身是好的问题很可能出在DNS解析上。如果连IP都ping不通那就要检查网络连接和防火墙设置了。2. 检查你的网络基础配置2.1 确认网络接口状态在开始修改任何配置之前我们需要先确认当前的网络状态。执行这个命令ip addr这个命令会列出你所有的网络接口。找找看哪个接口有分配IP地址通常是以eth或ens开头的名字比如ens33。如果看到类似inet 192.168.1.100/24这样的信息说明这个接口已经获得了IP地址。有一次我帮同事排查问题发现他的网卡根本没启动。这种情况需要先激活网卡sudo ifconfig ens33 up如果连IP地址都没有可能需要检查DHCP服务是否正常工作或者考虑手动配置静态IP。2.2 测试基本网络连接在确定网卡状态正常后我会用这些命令做进一步测试# 测试本地网络 ping 127.0.0.1 # 测试网关连通性先用ip route命令查看网关地址 ping 192.168.1.1 # 测试外部IP连通性 ping 8.8.8.8这个步骤就像医生检查病人的生命体征一样基础但重要。如果连127.0.0.1都ping不通那可能是网络协议栈出了问题如果能ping通网关但ping不通外网可能是网关配置或防火墙的问题。3. 解决DNS解析问题3.1 检查并配置DNS服务器当你能ping通IP但无法解析域名时问题肯定出在DNS配置上。Linux系统主要使用两个文件来配置DNS/etc/resolv.conf- 定义DNS服务器地址/etc/sysconfig/network-scripts/ifcfg-ens33- 网卡配置文件名字中的ens33要换成你的实际网卡名我建议先修改网卡配置文件因为某些Linux发行版会在每次重启时覆盖resolv.conf的内容。用你熟悉的编辑器打开网卡配置文件sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33在文件末尾添加或修改这些行DNS18.8.8.8 DNS28.8.4.4保存后再编辑/etc/resolv.confsudo vi /etc/resolv.conf确保内容类似这样nameserver 8.8.8.8 nameserver 8.8.4.43.2 测试DNS解析功能配置完成后不要急着重启网络服务先用这些命令测试一下nslookup www.baidu.com dig www.baidu.com这两个命令都能测试DNS解析是否正常工作。如果看到返回了IP地址说明解析成功了。如果还是不行可能需要检查网络管理器是否覆盖了你的设置或者尝试更换其他DNS服务器比如国内的114.114.114.114。4. 防火墙和SELinux的干扰4.1 临时关闭防火墙测试有时候DNS配置完全正确但就是解析不了域名这很可能是防火墙在捣乱。我遇到过好几次这种情况特别是在CentOS/RHEL系统上。可以先用这些命令临时关闭防火墙测试# 对于firewalld sudo systemctl stop firewalld # 对于iptables sudo systemctl stop iptables如果关闭防火墙后问题解决了说明需要调整防火墙规则而不是完全禁用它。对于DNS查询通常需要放行UDP 53端口sudo firewall-cmd --add-port53/udp --permanent sudo firewall-cmd --reload4.2 处理SELinux的影响SELinux是另一个可能导致网络连接问题的隐藏角色。虽然不推荐完全禁用SELinux它会降低系统安全性但可以暂时设置为宽容模式来测试sudo setenforce 0如果这样能解决问题说明需要调整SELinux策略而不是禁用它。可以使用audit2allow工具来生成新的策略模块。5. 网络服务管理5.1 重启网络服务在修改完所有配置后记得重启网络服务使更改生效。不同版本的CentOS命令有所不同# CentOS 6及以下 sudo service network restart # CentOS 7及以上 sudo systemctl restart NetworkManager有时候简单的服务重启就能解决问题。我有次花了两个小时排查最后发现只是需要重启网络服务而已。5.2 检查网络管理器状态如果你的系统使用NetworkManager管理网络可以用这些命令检查其状态sudo systemctl status NetworkManager nmcli connection show nmcli device statusNetworkManager有时会覆盖手动配置的网络设置特别是在图形界面环境下。如果遇到配置被重置的情况可能需要修改NetworkManager的配置文件或在图形界面中设置。6. 高级排查技巧6.1 使用tcpdump抓包分析当常规方法都失效时我通常会祭出抓包工具tcpdump。这个命令可以捕获DNS查询数据包sudo tcpdump -i ens33 port 53 -vv执行这个命令后在另一个终端尝试ping某个域名。如果能看到DNS查询请求发出但没有收到回复或者请求根本没发出就能更准确地定位问题所在。6.2 检查路由表有时候问题不在DNS而在路由。使用这个命令查看路由表ip route show确保默认路由default via ...指向正确的网关地址。如果路由表有问题可以手动添加路由sudo ip route add default via 192.168.1.1 dev ens337. 虚拟机环境特殊注意事项在VMware或VirtualBox等虚拟机环境中网络问题更加常见。除了检查Linux系统内部的配置还需要注意确保虚拟机网络适配器设置正确NAT或桥接模式主机上的虚拟网络服务是否运行特别是VMware NAT Service虚拟机网络连接是否被主机防火墙阻止我遇到过最棘手的一个案例是主机上的杀毒软件静默阻止了所有虚拟机的网络连接。这种情况只能通过逐一排查主机软件来解决。8. 持久化你的解决方案解决了问题后别忘了确保这些设置在重启后依然有效。特别是防火墙规则要用--permanent参数保存网络接口配置要设置ONBOOTyes重要的路由可以添加到/etc/rc.local中对于生产环境我建议编写自动化脚本来检查和修复常见网络配置问题。这样可以大大减少故障排查时间。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2494160.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!