Linux网络故障排查总结

企业动态
本文主要针对服务器,使用命令行进行网络故障排除,没有类似图形界面network-manager工具。事实上,在ubuntu桌面版,我习惯把network-manager工具禁掉。

 [[186463]]

0.前言

不管使用什么操作系统,使用物理机还是虚拟机,甚至容器,网络往往都是最难解决的疑难杂症,我们经常由于各种不明原因导致网络不通。网络故障可能是运营商或者链路问题,也有可能是本地故障,比如网卡配置错误等。解决网络故障,通常需要掌握非常多的网络知识,比如网络协议、路由、NAT、网卡配置等。本文不在于细讲这些知识,仅仅总结我在Linux操作系统(使用更多的当然是ubuntu系统)中着手解决网络故障的过程和思路。注意,本文主要针对服务器,使用命令行进行网络故障排除,没有类似图形界面network-manager工具。事实上,在ubuntu桌面版,我习惯把network-manager工具禁掉。

1.检查网络设备

要能连网,网络设备首先必须保证处于工作状态,如果网卡没有开启,则肯定不能上网的,假设我们使用eth0网卡上网,首先检查该网卡是否处于up状态,使用ip命令:

  1. sudo ip link ls eth0 

输出:

  1. fgp@ubuntu:~$ sudo ip link ls eth0 
  2. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 
  3.     link/ether 08:00:27:c9:b4:f2 brd ff:ff:ff:ff:ff:ff 

state必须处于up状态,若处于down状态,尝试手动启动:

  1. sudo ip link set eth0 up 

或者:

  1. sudo ifconfig eth0 up 

手动启动后,需要再次运行sudo ip link ls,如果仍然处于down状态,则说明是网络硬件问题,比如网线没有连接好,或者链路不通等。如果大家都能上网,极有可能是由于网线接触不良导致的,拔下网线重新插好,重复以上工作试试。

2.检查IP地址

如果网卡已经处于up状态,但仍无法上网,则需要查看网卡是否配置好ip地址:

  1. sudo ifconfig eth0 

或者

  1. sudo ip addr ls eth0 

输出为:

  1. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 
  2.     link/ether 08:00:27:c9:b4:f2 brd ff:ff:ff:ff:ff:ff 
  3.     inet 192.168.1.105/24 brd 192.168.1.255 scope global eth0 
  4.        valid_lft forever preferred_lft forever 
  5.     inet6 fe80::a00:27ff:fec9:b4f2/64 scope link 
  6.        valid_lft forever preferred_lft forever 

以上说明网卡已经获取了ip地址,地址为192.168.1.105/24,如果输出为:

  1. 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 
  2.     link/ether 08:00:27:9a:d5:d1 brd ff:ff:ff:ff:ff:ff 
  3.     inet6 fe80::a00:27ff:fe9a:d5d1/64 scope link 
  4.        valid_lft forever preferred_lft forever 

则说明该网卡没有正确获取IP。

如果没有或者ip,就需要配置ip。如果是通过dhcp服务自动获取ip的,则可手动运行dhclint获取ip:

  1. sudo dhclient -4 -v eth0 

如果无法获取ip,且网卡处于up状态,则可能是链路问题,无法连接远程DHCP服务器。如果知道DHCP服务器地址,可以ping一下试试,比如DHCP服务器地址为192.168.1.1:

  1. ping 192.168.1.1 

如果ICMP被禁了,使用nc命令或者telnet更适合,且可以探测端口是否开放,虽然DHCP端口是67,不过通常DHCP和DNS服务器是同一台机器,因此顺便测试53端口:

  1. nc -zv 192.168.1.1 67 
  2. nc -zv 192.168.1.1 53 
  3. # telnet 192.168.1.1 67 
  4. # telnet 192.168.1.1 53 

如果服务器的IP不是通过DHCP获取的动态IP,而是静态IP,则需要手动设置IP地址,使用ifconfig配置:

  1. sudo ifconfig eth0 192.168.1.105/24 gw 192.168.1.1 

或者

  1. sudo ip addr add 172.16.0.2/24 dev eth0 
  2. sudo route add default gw 172.16.0.1 dev eth0 

到此,需要重新运行ip addr ls或者ifconfig命令再次检查是否ip配置正确。

3.配置网关和路由

如果网卡的IP已经配置正确(包括子网掩码),仍然不能上网,则需要检查能否ping通网关地址,通常网关地址为网络地址的第一个ip或者最后一个ip,比如若ip为192.168.1.101/24,则网关通常为192.168.1.1或者192.168.1.254,如果不是二者,则需要询问网管了。假设网关地址为192.168.1.1,ping一下是否通:

  1. ping 192.168.1.1 

如果ping不通,则可能是交换机问题。如果网关连通性良好,则查看路由表是否正确,以下三个命令都可查看路由表,随便使用一个:

  1. sudo route -n 
  2. sudo netstat -rn 
  3. sudo ip route ls 

输出为:

  1. fgp@ubuntu:~$ sudo route -n 
  2. Kernel IP routing table 
  3. Destination     Gateway         Genmask         Flags Metric Ref    Use Iface 
  4. 0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0 
  5. 192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0 

其中Genmask为0.0.0.0的是默认路由,检查Gateway是否正确。不正确的话需要重新修改默认网关:

  1. sudo route del default eth0 # 先删除错误的默认网关 
  2. sudo route add default gw 172.16.0.1 dev eth1 # 填写正确的网关 

此时可以ping一下外网ip(指不在同一个局域网的IP),注意这里不要用域名,因为可能DNS还是有问题,比如可以ping我们校园网认证服务器IP:10.3.8.211:

  1. ping 10.3.8.211 

如果不能连通外网,可以使用tracepath命令查看到底是哪一跳不通,不过我更喜欢mtr命令:

  1. mtr -n 8.8.8.8 

输出为:

其中host列是所有经过的跳(路由),可以查看哪个跳不通或者丢包严重。

4.域名解析

如果能够ping通外网,但仍然不能使用浏览器上网,那八成是域名解析不了了,即DNS服务器配置有错误。检查下:

  1. nslookup server 

此时会输出DNS服务器地址,检查是否正确,若不正确或者不存在,可以临时设置,修改/etc/resolve.conf文件,设置可用的DNS服务器,如果不知道本区的DNS服务器,可以设置通用的`8.8.8.8,可以同时设置多个DNS服务器:

  1. # /etc/resolve.conf 
  2. Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) 
  3. #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN 
  4. nameserver 219.239.26.42 
  5. nameserver 124.207.160.106 
  6. nameserver 8.8.8.8 
  7. search DHCP HOST 

设置完成后,试一下能不能解析域名:

  1. nslookup baidu.com 

如果能够解析域名,则应该就可以正常上网了。

5.写入配置文件

我们以上都是通过命令行的方式配置网络,服务器重启后,需要重新配置,如果需要保存状态,需要写到配置文件中去,以ubuntu为例,修改/etc/network/interfaces文件,如果是DHCP 动态ip,配置如下:

  1. # The primary network interface 
  2. auto eth0 # 设置网卡开机启动 
  3. iface eth0 inet dhcp # 设置网卡动态获取IP 

如果是静态IP,则配置如下:

  1. auto eth0 
  2. iface eth0 inet static # 设为静态获取ip 
  3. address 192.168.1.101 # 配置ip地址 
  4. netmask 255.255.255.0 # 设置子网掩码 
  5. gateway 192.168.1.1 # 设置网关 
  6. dns-nameservers 8.8.8.8 114.114.114.114 # 设置DNS服务器,多个地址空格隔开 

总结

网络通常是一个反反复复的棘手问题,除了以上提到的经典问题外,其他配置比如代理、防火墙、VPN、认证等,也有可能导致不能正常上网,务必配置正确,本文不再介绍。还有更棘手的比如mtu设置不正确(比如Openstack neutron使用gre隧道,注意设置mtu为1400)、病毒劫持等,遇到此类问题,可以试试tcpdump命令进行抓包分析。

【本文是51CTO专栏作者“付广平”的原创文章,如需转载请通过51CTO获得联系】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2010-09-16 14:30:26

无线网络故障

2023-11-10 07:23:57

Kubernetes集群网络

2010-09-25 13:52:11

无线网络故障排查

2011-01-24 13:42:27

网络故障网络故障修复

2018-08-08 15:35:42

网络故障网络异常网络报错

2010-08-05 09:46:54

2019-04-11 09:17:14

网络故障路由汇总

2022-04-18 09:07:54

Linux网络延迟

2010-08-31 09:17:17

2015-08-24 11:02:56

网络故障负载均衡

2009-05-19 16:40:41

TTL网络故障科来软件

2010-04-19 13:50:20

XP系统无线网络故障

2010-09-07 09:35:22

2018-09-10 05:03:51

网络故障故障排查运维

2009-12-25 10:31:31

Linux网络故障

2010-04-19 13:31:29

无线网络故障

2011-03-14 14:13:28

网络故障

2010-08-26 14:45:40

2019-05-28 06:05:41

网络故障Ping命令断网

2013-04-07 13:47:12

点赞
收藏

51CTO技术栈公众号