今天线上突然有一台机器的所有外网依赖接口开始报警。根据日志排查了下初步定为是该机器无法访问外网了。把机器脱离七层后开始排查问题。搞起~
第一反应就是先访问下外网地址。
curl baidu.com
确定了是一个必现的问题。之后先随意 Ping 了一下域名。
ping baidu.com
发现无论Ping任何域名都会返回如下的信息:
Destination Host Unreachable
那么接下来开始排查网络是哪一步出了问题。
ping 127.0.0.1
如果 ping 的通说明tcp协议栈没有问题。
ping 主机地址
如果Ping的通说明网卡没有问题。
查看主机地址
ifconfig -a
ping 路由默认网关
Ping的通说明包可以到达路由器。
查看默认路由
route -n
ping DNS服务器地址
Ping的通说明DNS服务期解析没有问题。
查看DNS服务器
cat /etc/resolv.conf
最后发现路由默认的网关地址无法 ping 通。
这时候突然想到昨天运维同学帮忙解决其他问题的时候重启过这台机器。这台机器的默认网卡和默认路由不是相同的网卡。猜测之前负责的同学是临时设置的,重启后路由默认网关应该是被重置为最原始配置了。
找到问题就简单了。把路由的默认网关改为正确的网关ip就好。
#删除之前的默认网关 (此步骤非必须,不同的网卡可以设置多个默认网关。) route delete default gw x.x.x.x eth0 #添加正确的的默认网关 route add default gw x.x.x.x eth0
验证
curl baidu.com <html> <meta http-equiv="refresh" content="0;url=http://www.baidu.com/"> </html>
完美解决!问题到不是很难,但是排查和学习的过程很有趣。记录下、方便日后查询。