Linux系统默认路由丢失导致连接或访问异常

前提条件

  • 云主机状态处于运行中状态。
  • 云主机至少一张网卡绑定了公网IP。

问题现象

无法通过SSH远程登录云主机或主机无法访问外网。

问题分析

网络传输的IP协议数据包需要通过路由来确定其下一跳的发送目标。如果在路由表中无法找到匹配的路由条目,就无法确定数据包应该传输到何处,从而表现为目标地址无法到达。当主机路由表中缺少默认路由或者只有某些固定路由,则会导致云主机无法远程登录或者只能访问某些固定的IP地址。

问题排查

1、当云主机无法通过远程登录时,通过VNC登录云主机。

2、查看虚拟网卡和IP信息:

ip a

3、查看网络路由:

ip r

如上图所示,没有名为default的路由。正常有默认路由的路由表如下图:

说明
缺少默认路由会使得只能访问路由表中剩余的路由条目所能匹配的地址,除此之外的均无法访问。例如,上面的路由表中缺少了默认路由,但是存在能够转发匹配192.168.10.0/24的IP地址的路由,因此可以访问如192.168.10.18的同网段的网络地址,但是无法访问IP地址为其他网段的主机。

解决办法

VPC网络内的ECS实例推荐优先使用DHCP动态获取IP配置和默认路由配置,这样可以避免大多数由于静态IP配置不当导致默认路由缺失引起的网络不通问题。

1、获取网卡的默认网关。

配置默认路由需要使用相应网卡的网关地址,您可以通过控制台查看对应网卡的网关地址(详见:查看网关信息)。

2、检查网络配置,是否动态获取IP配置和默认路由。

cat /etc/sysconfig/network-scripts/ifcfg-eth0

说明
  • ifcfg-eth0 :代表网卡名称,不同系统网卡名称可能不一样,根据 ip a 获取的网卡信息修改。
  • BOOTPROTO:代表IP获取方式,如果配置如上图取值为dhcp则动态获取;如果取值为static则配置了静态IP。

3、如果配置动态获取方式但是没有默认路由,并且云主机正在使用中无法中断当前业务,可以优先使用临时增加默认路由方式恢复。

方式一:添加临时路由。

ip route add default via [$Gateway_IP] dev [$Network]
eg:
ip route add default via 192.168.10.254 dev eth0
说明
  • [$Gateway_IP]:为默认网关IP地址,参考本解决方法步骤1。
  • [$Network]:为获取默认网关IP地址的网卡名称。

 通过命令行增加的默认路由属于临时路由,当重启网络服务或云主机后默认路由将丢失,但该方法可以快速生效。

方式二:重启网络服务或重启云主机。

在重启网络服务或重启云主机后,DHCP方式将动态获取IP配置和默认路由配置:

systemctl restart network
reboot

4、如果配置静态IP方式,按照如下方法修复默认路由配置。

方式一:添加临时路由。

ip route add default via [$Gateway_IP] dev [$Network]
eg:
ip route add default via 192.168.10.254 dev eth0
说明
  • [$Gateway_IP]:为默认网关IP地址,参考解决办法中的步骤1,获取网卡的默认网关。
  • [$Network]:为获取默认网关IP地址的网卡名称。

 通过命令行增加的默认路由属于临时路由,当重启网络服务或云主机后默认路由将丢失,但该方法可以快速生效。

方式二:长期配置路由。

稳定配置默认路由需要修改网卡配置文件,如果需要立即生效,还需要重启网络服务或重启云主机,有可能引起网络断流。以下操作以CentOS 7.9系统为例,其它Linux发行版本需要参考对应的系统文档和网络配置文档。

编辑默认数据包出口网卡的/etc/sysconfig/network-scripts/ifcfg-eth0配置文件,将以上步骤中记录的网关信息填写到该配置文件中,保存并退出。例如,以主网卡eth0为默认数据包出口网卡,网关IP地址为192.168.10.1。

DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=static
ONBOOT=yes
STARTMODE=auto
IPADDR=192.168.10.16
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
说明
  • IPADDR:为相应网卡对应的IP地址,根据实际情况修改。
  • GATEWAY:为相应网卡对应的网关地址,根据实际情况修改,参考步骤1。
本文档内容整理自移动云官方帮助中心(查看原文),仅供参考。