本文介紹在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