本文介绍在Linux实例中访问外部网络地址,提示“Network is unreachable”错误的解决方案。
问题描述
在Linux系统的ECS实例中访问外部网络地址,提示Network is unreachable
错误。
问题原因
该问题可能是由于实例缺失默认路由配置,导致无法为数据包确定适当的发送目标,进而阻碍了对外部网络的访问。
解决方案
VPC网络内的ECS实例推荐优先使用DHCP动态获取IP配置和默认路由配置,这样可以避免大多数由于静态IP配置不当导致默认路由缺失引起的网络不通问题。
静态IP配置修改为动态IP配置的方法,请参见Linux实例中本地网卡的DHCP配置检查与修复。
步骤一:获取默认网关IP地址
如果问题实例已经无法访问任意的非本示例地址,那么需要从连接到同一虚拟交换机的其它实例上获取默认网关的IP地址:
找到连接到同一虚拟交换机的其它实例,登录该实例。
执行以下命令,查看同一虚拟交换机的网卡并记录其MAC地址。
ip addr
系统显示类似如下,主网卡eth0与问题实例连接到同一虚拟交换机,其MAC地址为
00:16:52:07:**:**
。1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:**:**:**:** brd 00:00:**:**:**:** inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:16:52:07:**:** brd ff:ff:ff:ff:ff:ff inet 172.16.*.***/24 brd 172.16.2.255 scope global eth0 valid_lft 311974909sec preferred_lft 311974909sec inet6 fe80::216:52ff:fe07:1306/64 scope link valid_lft forever preferred_lft forever
通过执行以下命令,请求实例元数据服务器,获取默认网关IP地址。
说明如果问题实例还可以ping通实例元数据服务器
100.100.100.200
,也可以在问题实例中执行以下命令,选择需要作为默认数据包出口的网卡即可,通常为主网卡eth0。curl http://100.100.100.200/latest/meta-data/network/interfaces/macs/[$MAC_Address]/gateway
说明[$MAC_Address]
为上一步中获取的MAC地址。
步骤二:配置默认路由
当您选择临时配置默认路由时,无需修改网卡配置和重启网络服务,但是关机或者重启后默认路由配置会失效。
临时配置默认路由
执行以下命令,向路由表中添加默认路由。
ip route add default via [$Gateway_IP] dev [$Network]
说明[$Gateway_IP]
为获取默认网关IP地址中获取的默认网关IP地址。[$Network]
为获取默认网关IP地址中与问题实例在同一虚拟交换机中查询默认网关时的网卡。
执行以下命令,查看路由表,可以看到已经添加了默认路由。
ip route
系统显示类似如下。
default via 172.16.2.253 dev eth0 10.64.0.0/10 via 172.16.2.253 dev eth0 169.254.0.0/16 dev eth0 scope link metric 1002 172.16.2.0/24 dev eth0 proto kernel scope link src 172.16.2.248
说明例如,配置默认网关为
172.16.2.253
,默认出口网卡为主网卡为eth0。
长期配置默认路由
稳定配置默认路由需要修改网卡配置文件,如果需要立即生效,还需要重启网络服务,有可能引起网络断流。以下操作以CentOS 7.9系统为例,其它Linux发行版本需要参考对应的系统文档和网络配置文档。
编辑默认数据包出口网卡的
/etc/sysconfig/network-scripts/ifcfg-eth0
配置文件,将以上步骤中记录的网关信息填写到该配置文件中,保存并退出。例如,以主网卡eth0为默认数据包出口网卡,网关IP地址为172.16.2.253
。DEVICE=eth0 TYPE=Ethernet BOOTPROTO=static ONBOOT=yes STARTMODE=auto IPADDR=172.16.2.248 NETMASK=255.255.255.0 GATEWAY=172.16.2.253
执行以下命令,重启网络服务。
systemctl restart network