Linux 网络故障排查 - Go语言中文社区

Linux 网络故障排查




1.检查网络设备

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

#sudo ip link ls eth0

输出:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:c9:b4:f2 brd ff:ff:ff:ff:ff:ff

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

#sudo ip link set eth0 up
或者
#sudo ifconfig eth0 up

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

2.检查IP地址

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

#sudo ifconfig eth0
或者
sudo ip addr ls eth0

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

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

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

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

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

#sudo dhclient -4 -v eth0


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

#ping 192.168.1.1

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

#nc -zv 192.168.1.1 67
#nc -zv 192.168.1.1 53
# telnet 192.168.1.1 67
# telnet 192.168.1.1 53


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

# sudo ifconfig eth0 192.168.1.105 netmask 255.255.255.0
#route add default gw 192.168.1.1 dev eth0
或者
#sudo ip addr add 192.168.1.105/24 dev eth0
#sudo route add default gw 192.168.1.1 dev eth0


#ping 192.168.1.1

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

#sudo route -n
#sudo netstat -rn
#sudo ip route ls


# sudo route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0


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

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


此时可以ping一下外网ip(指不在同一个局域网的IP),注意这里不要用域名,因为可能DNS还是有问题,比如可以ping 百度服务器地址:180.97.33.108:

如果不能连通外网,可以使用tracepath 或者 mtr 命令查看到底是哪一跳不通:


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


4.域名解析

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

#nslookup server

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


# /etc/resolve.conf# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)

# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTENnameserver219.239.26.42
nameserver 124.207.160.106
nameserver 8.8.8.8
search DHCP HOST

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

#nslookup baidu.com

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


5.写入配置文件

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

# The primary network interface

autoeth0# 设置网卡开机启动

ifaceeth0inetdhcp# 设置网卡动态获取IP


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

autoeth0
iface eth0 inetstatic# 设为静态获取

ipaddress192.168.1.101# 配置ip地址

netmask255.255.255.0# 设置子网掩码

gateway192.168.1.1# 设置网关

dns-nameservers8.8.8.8114.114.114.114# 设置DNS服务器,多个地址空格隔开




版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u013816142/article/details/61917042
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢