做網路實驗是為了遇到相關問題時,troubleshooting 有頭緒,但在安裝 appliance 過程,就遇到相關問題了XD

問題

GNS3 連不上 GNS3 VM 裡的 server

環境

GNS3 VM 有兩個 Network Adapter 一為 Host-only,一為 NAT,兩種型態都要能跟 host 互通

host 那端有兩個 VMware ethernet adapter

解釋

GNS3 VM 裡的 Server 是透過 eth0 對外連接。

  • 如果我們把 eth0 設為192.168.209.X/24,那麼 host 會透過 VMnet1 發出請求封包
  • 如果我們把 eth0 設為192.168.223.X/24,那麼 host 會透過 VMnet8 發出請求封包

但是我們不知道 eth0 實際是與 VMnet1 還是 VMnet8 對接?

  • 如果 eth0 實際與 VMnet1 對接,且收到 source IP 為 192.168.209.1 的請求封包,那麼返回封包的 destination IP 192.168.209.1 可以由 eth0 出去 (因為 ARP table 有紀錄),就看得到 GNS3 Web UI。
  • 如果 eth0 實際與 VMnet8 對接,且收到 source IP 為 192.168.209.1 的請求封包,那麼返回封包的 destination IP 192.168.209.1 就不能由 eth0 出去 (因為 ARP table 無法完成紀錄),就看不到 GNS3 Web UI。

  • 反之亦然

設定

於是,我們可以取巧地把 gateway 設為 192.168.209.1,這樣返回封包在 routing table 碰壁到最後會丟給 192.168.209.1,進而選擇192.168.209.0/24 dev eth1 scope link,由 eth1 出去,就看得到 GNS3 Web UI。

結論

  • netplan 設定會產出對應的 entry 到 routing table,而 routing entry 在目的網段符合下,還會去看 ARP table 有沒有出路。若無,則丟至 default gateway。
  • 另一種方式,是直接從 ARP table 判斷,就可以知道 eth0 該設為哪個網段。