编译参考:http://www.cyberciti.biz/tips/linux-network-diagnose-tools.html
吃饭不积极,网络有问题。
ping那个ip
直接ping
那个ip,看看通不通。
如果直接ping ip是通的,但是ping域名不行,那么可能是dns server
有问题。
这个时候就需要看一看 /etc/resolv.conf
这个文件
vi /etc/resolv.conf
输出示例
domain openstacklocal
search openstacklocal
nameserver 202.101.172.46
nameserver 114.114.114.114
nameserver 223.5.5.5
nameserver 202.101.172.47
这个里面就是dns server的ip。
直接ping一下dns server
。看看dns server
是否正常,有没有挂掉。或者把公共服务的dns 域名加入。比如 114.114.114.114
,或者阿里的 223.5.5.5
。
还有一种可能,ping
不通是因为服务器管理员吧icmp
应答关掉了。这个时候可以试试tcping。
使用 traceroute 试试
如果完全ping
不同服务器,那么试试traceroute
这个命令。它能提供从你这一端,到服务器之间详细的信息。你可以看到到底是那个网关路由挂了。
root@debian-test-master:~# traceroute v2ex.com
traceroute to v2ex.com (180.96.71.148), 30 hops max, 60 byte packets
1 223.252.223.3 (223.252.223.3) 0.419 ms 223.252.223.2 (223.252.223.2) 0.659 ms 0.644 ms
2 115.238.118.237 (115.238.118.237) 0.605 ms 114.113.197.173 (114.113.197.173) 0.703 ms 115.238.118.241 (115.238.118.241) 0.521 ms
3 115.238.118.89 (115.238.118.89) 0.330 ms * 115.238.118.97 (115.238.118.97) 0.295 ms
4 * * *
5 61.164.31.253 (61.164.31.253) 2.064 ms 61.164.31.137 (61.164.31.137) 5.728 ms 61.164.13.117 (61.164.13.117) 1.237 ms
6 202.97.68.225 (202.97.68.225) 8.226 ms 4.743 ms 8.830 ms
7 * * *
8 202.102.73.54 (202.102.73.54) 13.977 ms 202.102.73.78 (202.102.73.78) 14.047 ms 14.026 ms
9 180.96.51.118 (180.96.51.118) 104.830 ms 104.053 ms 104.359 ms
10 * * *
11 180.96.71.130 (180.96.71.130) 10.000 ms 9.954 ms 9.941 ms
12 180.96.71.138 (180.96.71.138) 13.497 ms 11.722 ms 12.609 ms
当然,现在更好的工具是 mtr
。但是一般服务器上都没有装,要先手工装一下。它结合了 traceroute
和 ping
的功能。并且是动态的。
看看默认的路由/网关ip
如果traceroute
结果是都不能到你自己这边的网关,那么大概是路由没设置好。
使用这个命令
route
route add default gw 192.168.1.254 eth0
或者
ip route
获取到ip地址了吗
接下来排查的一个点可以考虑是否从dhcp服务器获取到正确的ip地址。很有可能网管改了dhcp服务器或者是ip路由啥的。那么重启网络设备,重新刷一下可能可以解决:
# /etc/init.d/network restart
# tail -f /var/log/message
# ifconfig -a
# route
service networking restart
debian系统
/etc/init.d/networking restart
网线接口,电源
如果还有问题,那么看看这个通路中,是不是有网线接口没插好,电源没插上。
这边还有个段子,微软的技术支持说,大部分打电话过来反应网络不通的客户,到最后很多都是网线没插好,但是你要直接跟他们说你去看看是不是网线没插好,客户肯定会说,“怎么可能,我怎么可能会犯这么低级的错误!”其实这些人就是犯了这么低级的错误,但是顾客是上帝啊,所以你要说,“可能是接触不好,你把网线先拔下来,再插上去试试。”这样既解决了问题,又照顾了客户的面子。
查看防火墙的日志
到了这一步,那么再看看防火墙的日志吧。也许是因为防火墙的问题。可以先关掉防火墙,重复上面几步,如果问题解决了,那么就是防火墙的原因,把你的主机加入白名单吧。
# iptables -L -n
# tail -f /var/log/messages
# /etc/init.d/iptables stop
据说线下环境默认镜像把防火墙都打开了。
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j ACCEPT
检查端口
是否把默认端口改了?常用的端口如下:
HTTP - port 80
Proxy - port 3128
SSH - port 22
FTP - port 21
但是为了安全,有时候会把ssh默认端口改掉,然后死活连不上去。
这一步可以使用telnet
telnet
如果看到 connection refused,那么是因为端口没有开启。
可以直接登录远端的云主机
这种情况一般是通过私有网登录云主机,挂了一个外网port,发现这个port不起作用。
这个时候排查的一般思路是
ip r get 114.114.114.114
看看走的哪个路由,路由是否推进路由表。
ifconfig eth0 down
把eth0
先卸掉,只能走外网网卡,在ping一下114.114.114.114
.
重启网络设备。
抓包
这是最后一步,上抓包工具,看看具体是啥原因导致网络不通。
可以利用wireshark
,tcpdump
等。