前提条件
- 云主机状态处于运行中状态。
- 云主机至少一张网卡绑定了公网IP。
问题现象
无法通过SSH远程登录云主机或主机无法访问外网。
问题分析
网络传输的IP协议数据包需要通过路由来确定其下一跳的发送目标。如果在路由表中无法找到匹配的路由条目,就无法确定数据包应该传输到何处,从而表现为目标地址无法到达。当主机路由表中缺少默认路由或者只有某些固定路由,则会导致云主机无法远程登录或者只能访问某些固定的IP地址。
问题排查
1、当云主机无法通过远程登录时,通过VNC登录云主机。
2、查看虚拟网卡和IP信息:
ip a
3、查看网络路由:
ip r
如上图所示,没有名为default的路由。正常有默认路由的路由表如下图:
解决办法
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。