[Linux] 錯誤的 172.0.0.0 路由 (routing),導致連不上 Google
今天到公司打開電腦,突然發現桌機連不到 Google 了,
但使用 Wi-Fi 的筆電可以正常連上 Google,所以應該不是公司網路連外有問題,
而且其他同事似乎沒有遇到問題,看來只有我這台桌機連不到 Google…
先在桌機 ping 看看 Google,發現不行:
testuser@localhost ~ $ ping www.google.com PING www.google.com (172.217.24.4) 56(84) bytes of data. ^C --- www.google.com ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 999ms
不過從 ping 的結果可以看到 Google 的 IP 是 172.217.24.4…
看到 172. 開頭的 IP,直覺想到了公司內網 lab 的網段就是 172.22.x.y,
但 172.217 應該是屬於 public IP,並非 172.16.0.0-172.31.255.255 的內網範圍…
不過這倒是讓我想起來,之前為了在公司內部可以連到 lab 的 172.22 網段,
我曾經修改了 routing table,立刻看一下目前的 routing,
果真有一個 172.0.0.0 網段,都會往 10.1.119.250 這台 gateway 送過去:
testuser@localhost ~ $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.1.119.254 0.0.0.0 UG 100 0 0 em1 172.0.0.0 10.1.119.250 255.0.0.0 UG 0 0 0 em1
看來真相大白了~我之前因為偷懶,把整個 172.x.y.z 網段都當作是 lab 網段,
所以設定了一個 172.0.0.0 的 routing destination,只要是 172.x.y.z 的 IP,
封包全都會往 10.1.119.250 這台 gateway 送。
但 10.1.119.250 想必看不懂 Google 的這個 172.217.24.4 public IP,所以封包八成被丟掉了…
解法是先把原本的這個 172.0.0.0 的 routing 刪除:
sudo /sbin/route del -net 172.0.0.0 gw 10.1.119.250 netmask 255.0.0.0
再重新加入 172.22.0.0 網段的專屬 routing:
sudo /sbin/route add -net 172.22.0.0 netmask 255.224.0.0 gw 10.1.119.250
這是修正後的 routing table:
testuser@localhost ~ $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.1.119.254 0.0.0.0 UG 100 0 0 em1 172.22.0.0 10.1.119.250 255.255.0.0 UG 0 0 0 em1
修正之後,Google 就可以正常連線囉:
testuser@localhost ~ $ ping www.google.com PING www.google.com (172.217.24.4) 56(84) bytes of data. 64 bytes from tsa01s07-in-f4.1e100.net (172.217.24.4): icmp_seq=1 ttl=51 time=2.60 ms 64 bytes from tsa01s07-in-f4.1e100.net (172.217.24.4): icmp_seq=2 ttl=51 time=2.80 ms
結論:routing table 還是不能隨便亂設定呀…
也千萬別偷懶,用一個超大的 IP 範圍,不小心就會把外網的 IP 都當成內網了~