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

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

Tags
网络
Published
March 30, 2021
Author
今天线上突然有一台机器的所有外网依赖接口开始报警。根据日志排查了下初步定为是该机器无法访问外网了。把机器脱离七层后开始排查问题。搞起~
 
第一反应就是先访问下外网地址。
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>
 
完美解决!问题到不是很难,但是排查和学习的过程很有趣。记录下、方便日后查询。

参考资料

 
 
4种在Linux中检查默认网关或路由器IP地址的方法-51CTO.COM
作者:Magesh Maruthamuthu 你应该意识到你的默认网关是你的路由器的 IP 地址。一般这是在安装过程中由操作系统自动检测的,如果没有,你可能需要改变它。如果你的系统不能 ping 自身,那么很可能是一个网关问题,你必须修复它。在网络中,当你有多个网络适配器或路由器时,这种情况可能会发生。 你应该意识到你的默认网关是你的路由器的 IP 地址。一般这是在安装过程中由操作系统自动检测的,如果没有,你可能需要改变它。如果你的系统不能 ping 自身,那么很可能是一个网关问题,你必须修复它。在网络中,当你有多个网络适配器或路由器时,这种情况可能会发生。 网关是一个扮演着入口点角色的路由器,可以从一个网络传递网络数据到另一个网络。 这可以通过下面的四个命令完成。 route 命令:被用来显示和操作 IP 路由表。 ip 命令:类似于 ifconfig,常用于设置静态 IP 地址、路由 & 默认网关,等等。 netstat 命令:是一个命令行工具,用来显示网络连接相关的信息(包括入站和出站的),例如路由表、伪装连接、多播成员和网络接口。 routel 命令:被用来以好看的输出格式列出路由。 route 命令被用来显示和操作 IP 路由表。 它主要用于通过一个已经配置的接口给特定的主机或者网络设置静态的路由。 当使用 add 或者 del 选项时, route 修改路由表。没有这些选项, route 显示路由表的当前内容。 IP 命令 类似于 ifconfig ,常用于配置静态 IP 地址、路由 & 默认网关,等等。 ifconfig 命令因为多年没有维护而被遗弃了,即使它仍然在大多数 Linux 发行版上可获得。 ifconfig 命令已经被 ip 命令替代了, ip 命令是非常强大的,只要一个命令就能执行几个网络管理任务。 ip 命令工具附带在 iproute2 包中。在主要的 Linux 发行版中都默认预装了 iproute2 。 如果没有,你可以在你的终端中在包管理器的帮助下通过指定 iproute2 来安装它。 netstat 代表 Network Statistics,是一个用来显示网络连接相关的信息(包括入站和出站)的命令行工具,例如路由表、伪装连接,多播成员和网络接口。 它列出所有的 tcp、udp 套接字连接和 unix 套接字连接。 它在网络中被用来诊断网络问题并判断网络中的流量总量来作为性能测量指标。 它用来以好看的输出格式列出路由信息。这些程序是一系列你可以用来替代 iproute2 的帮助脚本( routel 和 routef )。 routel 脚本以一种被认为更容易解释并且等价于 route 输出列表的格式来输出路由信息。 如果 routef 脚本不加任何参数,将仅仅简单的将路由表清空。小心!这意味着删除所有的路由,让你的网络不再可用。 如果你只想打印默认的网关那么使用下面的格式。
4种在Linux中检查默认网关或路由器IP地址的方法-51CTO.COM
 
 
Linux 如何查看修改DNS配置_wsxlgg的博客-CSDN博客_查看服务器dns
Linux 如何查看修改DNS配置 DNS服务器介绍 DNS是计算机域名系统(Domain Name System 或Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,一个IP地址可以有多个域名,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。域名服务器通常为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为"域名解析"。提供DNS服务的就是DNS服务器。DNS服务器可以分为三种,高速缓存服务器(Cache-only server)、主服务器(Primary Name server)、辅助服务器(Second Name Server)。 一般运作中的域名最好有两台或以上的DNS服务器,一台称为主域名服务器,而另一台称为从域名服务器。第二个DNS服务器通常用于故障转移:如果一台宕机,另外一台就激活成为DNS服务器。 查看服务器的DNS信息 Linux系统中如何查看配置的DNS服务器信息呢? 一般有下面几种方法 1:查看/etc/resolv.con文件 [root@localhost ~]# cat /etc/resolv.conf nameserver 192.168.xxx.xxx #search localdomain [root@localhost ~]# 2:使用nslookup命令查看DNS信息 [root@localhost ~]# nslookup 127.0.0.1 | grep Server Server: 192.168.xxx.xxx [root@localhost ~]# 3:使用dig命令来查看DNS信息 root@localhost ~]# dig ; > DiG 9.3.6-P1- RedHat-9.3.6-16.P1.el5 > ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36888 ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 3 ;; QUESTION SECTION: ;.
Linux 如何查看修改DNS配置_wsxlgg的博客-CSDN博客_查看服务器dns