记一次服务器无法访问外网的问题排查过程

今天线上突然有一台机器的所有外网依赖接口开始报警。根据日志排查了下初步定为是该机器无法访问外网了。把机器脱离七层后开始排查问题。搞起~

第一反应就是先访问下外网地址。

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服务期解析没有问题。

「 cat /etc/resolv.conf 」查看DNS服务器

最后发现路由默认的网关地址无法 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
4种在Linux中检查默认网关或路由器IP地址的方法
如何在Linux上添加或更改默认网关
Linux 如何查看修改DNS配置