今天线上突然有一台机器的所有外网依赖接口开始报警。根据日志排查了下初步定为是该机器无法访问外网了。把机器脱离七层后开始排查问题。搞起~
第一反应就是先访问下外网地址。
curl baidu.com确定了是一个必现的问题。之后先随意 Ping 了一下域名。
ping baidu.com发现无论Ping任何域名都会返回如下的信息:
Destination Host Unreachable那么接下来开始排查网络是哪一步出了问题。
ping 127.0.0.1如果 ping 的通说明tcp协议栈没有问题。
ping 主机地址如果Ping的通说明网卡没有问题。
查看主机地址
ifconfig -aping 路由默认网关Ping的通说明包可以到达路由器。
查看默认路由
route -nping 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>完美解决!问题到不是很难,但是排查和学习的过程很有趣。记录下、方便日后查询。
参考资料#
linux Destination Host Unreachable