March 29, 2024

Linux系统常出现的网络问题及解决方法

隔三差五就有研发部门的兄弟来找我们部门的网工,需要协助处理服务器的网络问题。分享这类问题的排查思路及解决方法。

1、检查网络连通性:使用ping命令测试目标地址是否可达,例如ping www.baidu.com。

如果无法ping通,可能是由于DNS解析失败或网络配置问题导致的

2、检查DNS解析:使用nslookup或dig命令测试DNS解析是否正常,例如nslookup www.baidu.com 如果DNS解析失败,可以尝试更换DNS服务器或检查本地DNS配置。

DNS配置步骤:

输入以下命令以打开resolv.conf文件:


sudo nano /etc/resolv.conf

检查文件中的nameserver行,这些行列出了用于DNS解析的DNS服务器的IP地址。例如,以下示例文件中列出了两个DNS服务器:


nameserver 8.8.8.8 nameserver 8.8.4.4

如果您需要修改DNS服务器,则可以编辑resolv.conf文件,并更改nameserver行中的IP地址为您需要使用的DNS服务器的IP地址。

保存并退出文件,然后尝试ping或nslookup测试DNS解析是否正常。

请注意,如果您的Linux系统使用NetworkManager,则可能会将resolv.conf文件指向另一个文件或动态生成。在这种情况下,您可以使用nmcli命令检查和更改DNS服务器配置。例如,以下命令将添加google的公共DNS服务器作为首选DNS服务器:


sudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8, 8.8.4.4"

其中,"Wired connection 1"是您的网络连接名称,ipv4.dns是DNS服务器地址。保存更改后,您需要重启网络连接或使用以下命令使更改生效:


sudo systemctl restart NetworkManager

3、检查网卡状态:使用ifconfig或ip命令检查网卡状态,例如ifconfig eth0。如果网卡未启用或存在故障,可以尝试重新启用网卡或更换网卡。

排查解决:

检查网络配置文件:检查 /etc/network/interfaces 或者 /etc/sysconfig/network-scripts/ifcfg-eth0(以eth0为例)等文件中的网络配置是否正确。确保网络配置文件中的 IP 地址、子网掩码、网关、DNS 等信息与网络环境匹配。

  • 检查网卡是否激活:使用 ifconfig -a 命令检查网卡是否被激活,如果网卡未激活,可以使用 ifup eth0 命令激活网卡。
  • 检查网络链路:使用 ping 命令检查网络链路是否通畅,如果不能 ping 通其他设备,可以检查网线、交换机等网络设备是否正常工作。
  • 检查防火墙:检查 Linux 系统的防火墙设置,是否阻止了网络通信。可以使用 iptables -L 命令查看当前防火墙设置。
  • 检查网络服务:检查网络服务是否已启动。使用 systemctl status network 命令检查网络服务状态。
  • 检查网卡驱动程序:使用 lspci -v 命令查看网卡的驱动程序是否正确安装,并检查驱动程序是否支持当前的 Linux 内核版本。

4、检查防火墙配置:使用iptables命令检查防火墙规则配置,例如iptables -L。如果防火墙规则存在问题,可以尝试调整规则或禁用防火墙进行测试。

规则配置和排查的基本步骤:

查看当前iptables规则:使用iptables -L命令可以查看当前iptables的所有规则。

配置iptables规则:iptables的规则配置包括添加、删除、修改规则等操作。例如,要添加一个允许SSH连接的规则,可以使用以下命令:


iptables -A INPUT -p tcp --dport 22 -j ACCEPT

这条命令会向 INPUT 链添加一条规则,允许 TCP 端口 22(SSH 端口)的连接通过。

保存iptables规则:iptables规则默认不会在重启后自动保存。要保存iptables规则,可以使用以下命令:


/sbin/service iptables save

或者


/usr/libexec/iptables/iptables.init save

这将把当前的iptables规则保存到/etc/sysconfig/iptables文件中,以便在系统重新启动后自动加载。

删除iptables规则:可以使用以下命令删除iptables规则:


iptables -D INPUT -p tcp --dport 22 -j ACCEPT

这条命令将删除 INPUT 链中允许 SSH 连接的规则。

防火墙故障排查:如果无法连接到服务器,可能是防火墙规则配置错误所致。在这种情况下,您可以通过以下步骤来排查问题:

  • 确认服务器上的防火墙规则是否包括允许连接的端口。
  • 检查iptables规则是否与其他网络配置(如网络接口配置和路由表)一致。
  • 检查服务器是否启用了SELinux,如果是,则需要确认SELinux策略是否允许连接到所需端口。
  • 确认是否存在其他网络设备(如防火墙或路由器)在服务器和客户端之间阻止了连接。

监控iptables日志:当iptables阻止网络流量时,可以在日志中查看相关信息。可以使用以下命令查看iptables日志:


tail -f /var/log/messages | grep iptables

这将显示iptables相关的日志信息。

启用iptables日志记录:可以通过修改iptables规则来启用日志记录。例如,可以在INPUT链中添加以下规则:


iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

这将在 INPUT 链中添加一个规则,对每个被阻止的数据包记录日志,并在日志中添加 "iptables denied: " 前缀。

使用防火墙管理工具:iptables规则配置和管理可以使用一些防火墙管理工具来简化操作,例如,firewalld和ufw。这些工具提供了更简单的界面来配置防火墙规则。

5、检查路由配置:使用route命令检查路由表配置,例如route -n。如果路由表配置错误,可以尝试添加正确的路由规则。

检查和解决路由配置错误的步骤如下:

  • 检查当前路由表:使用ip route show命令可以查看当前的路由表。这将显示当前系统中所有网络接口的路由信息。
  • 检查网络接口的IP地址:使用ip addr show命令可以查看当前系统中网络接口的IP地址和其他相关信息。确保每个接口都有一个唯一的IP地址,并且与网络拓扑中的其他设备一致。
  • 确认默认网关:使用ip route show default命令可以查看当前系统中的默认网关。确保默认网关的IP地址与网络拓扑中的其他设备一致。
  • 添加静态路由:如果您需要添加静态路由以使特定网络可达,可以使用ip route add命令。

例如,如果您想将10.0.0.0/24网络添加到192.168.1.1网关,可以使用以下命令:


ip route add 10.0.0.0/24 via 192.168.1.1
  • 删除静态路由:如果您需要删除静态路由,可以使用ip route del命令。

例如,如果您要删除上面添加的路由,可以使用以下命令:


ip route del 10.0.0.0/24 via 192.168.1.1
  • 检查路由错误:如果您仍然无法访问目标网络,请检查路由错误。

例如,如果您尝试访问10.0.0.0/24网络但无法访问,您可以使用以下命令来检查路由错误:


traceroute 10.0.0.1

这将显示您的请求到达网络中的哪个设备,以及在哪个设备上停止。

  • 修复路由错误:根据traceroute命令的输出,您可以识别并解决路由错误。

例如,如果traceroute命令停止在一个设备上,您可以检查该设备的路由表和配置以确定问题所在。

6、检查网络服务:使用netstat命令检查网络服务状态。

例如netstat -tln。如果网络服务未启动或存在故障,可以尝试重新启动服务或调整配置。

检查和解决网络服务故障的步骤如下:

  • 检查服务状态:使用systemctl status命令可以查看服务的状态。

例如,如果您要检查Apache HTTP服务器的状态,可以使用以下命令:


systemctl status httpd

这将显示Apache HTTP服务器的状态,例如是否正在运行、是否已启用等。

检查服务配置:使用cat命令查看服务的配置文件。

例如,如果您要查看Apache HTTP服务器的配置文件,可以使用以下命令:


cat /etc/httpd/conf/httpd.conf

这将显示Apache HTTP服务器的配置文件。

  • 检查网络端口:使用netstat命令可以查看网络端口的状态。

例如,如果您要检查Apache HTTP服务器的监听端口,请使用以下命令:


netstat -anp | grep :80

这将显示Apache HTTP服务器是否正在监听80端口。

  • 检查防火墙:如果您使用防火墙保护服务器,您需要确保防火墙允许所需的服务通过。

例如,如果您使用iptables防火墙,并且希望允许HTTP服务通过,请使用以下命令:


iptables -I INPUT -p tcp --dport 80 -j ACCEPT

这将允许HTTP服务通过端口80。

  • 重启服务:如果服务出现故障,您可以尝试通过重启服务来解决问题。

例如,如果Apache HTTP服务器停止响应,请使用以下命令重启服务:


systemctl restart httpd
  • 检查日志:使用journalctl命令可以查看系统日志。

例如,如果您要查看Apache HTTP服务器的日志,请使用以下命令:


journalctl -u httpd

这将显示Apache HTTP服务器的日志。

  • 解决问题:根据检查结果和日志信息,您可以识别并解决网络服务故障。

例如,如果您发现Apache HTTP服务器配置错误,您可以编辑配置文件并重新启动服务。

网络问题的解决方法需要根据具体情况而定,有时需要进行多个步骤的检查和调试。同时,要充分利用Linux系统中提供的网络诊断工具,以便更快地找到并解决问题。

作者: HankZheng

1 comment:

  1. 网络有问题找网管,不过有些基本的trouble-shooting技能还是可以学到的,这样可以提高效率

    ReplyDelete

VxWorks

Blog Archive