電腦網路與 Internet 通訊

L15 單介面多 IP 與政策路由

本實驗使用的程式:L15-linux-netns.sh、lan_models.py。文中指令以課程根目錄為工作目錄;建議下載教材套件,解壓後在 computer-networking 目錄執行。

問題與驗證範圍

對應 03A、10、22。必修為 Python 3.10 以上標準函式庫離線查表,不需要管理員權限;不修改任何主機網路。延伸是 Linux 命名空間與 iproute2/ping,需要隔離 Linux VM 與 root,尚未在本教材製作環境執行。先讀 03A 的 H/G1/G2 拓樸。

A:預測與執行

在課程根目錄執行:

python3 labs/lan_models.py L15

執行前填下表,不先查看解答。

案例來源目的預測表/下一跳
no_policy198.51.100.10203.0.113.80____
source_unspecified未指定203.0.113.80____
source_policy198.51.100.10203.0.113.80____
lan_correct198.51.100.10198.51.100.55____
lan_missing_route198.51.100.10198.51.100.55____
endpoint_exception198.51.100.10203.0.113.81____
local_delivery198.51.100.10192.0.2.10____
throw_fallthrough198.51.100.10198.51.100.55____
explicit_reject198.51.100.10198.51.100.55____

輸出中的 kind=model 表示人工查表;trace 列出規則是否匹配、所查表與結果。selected_source 只表示此簡化模型的固定/偏好來源,不模擬完整 OS 來源選擇。

B:判讀與修改

  1. 比較 no_policy 與 source_policy:來源是否改變?下一跳是否改變?
  2. lan_missing_route 中 main 仍有 /24。指出為何 lookup 200 的 default 先成功;在 L15 函式建立 bad[200] 的地方,將缺少的 /24 加回 bad[200] 後重做;demo_tables 原本已有直連路由。
  3. endpoint_exception 用 priority 50 目的規則查 main,早於 priority 100 來源規則。移到 150 後,預測會變成哪個下一跳再驗證。
  4. throw_fallthrough 與 explicit_reject 目的相同,何者繼續查 main?trace 在哪裡停止?
  5. 比較來源尚未指定與明確指定,說明 from 規則的資料前提。

修改前另存自己的程式副本;提交差異與兩組輸出。模型不處理 ECMP、route cache、mark 建立時機、NAT 或完整 Linux socket;不得稱作 Linux 互通測試。

C:隔離 Linux 延伸

只在自己管理的 Linux VM 中執行原檔:

sudo bash labs/L15-linux-netns.sh

腳本建立具唯一名稱的 H、SW、G1、G2 命名空間。H 僅一個 eth0 帶兩個 IP;SW 橋接,G1/G2 的 loopback 各放 203.0.113.80/32。這是兩臺獨立隔離的回應者共用目的 IP,用於觀察第一跳;不是同 LAN 配置重複主機位址,也不模擬 Internet 或完整雙 WAN。G1 另有回來源 2 的路由,讓 bind 來源 2、尚未加政策時也有回程。

腳本依序列出位址、規則、main/200/local 表、route get、ping 與鄰居表;先看未加政策,再看只放 200 default 的錯例,最後補直連路由與 endpoint 例外。預期:S/來源 2 從 G1 改到 G2,LAN 錯例顯示 via G2,補正後顯示直接 dev eth0。實際文字、ping 成功與封包必須以自己的 Linux 版本記錄。

所有介面與路由操作在新建命名空間內,沒有連接實體網卡或改 host default。正常結束及可處理的中斷會清除;強制終止或主機崩潰仍可能殘留,請依開頭顯示的四個精確名稱在 VM 內逐一刪除,勿使用刪除所有命名空間的操作。

若要抓 ARP,需自行在對應 namespace 啟動 tcpdump 並確認權限;腳本本身未抓封包。ping 只證明該隔離拓樸的 ICMP 回應,不能推論代理、TLS 或 WAN 效能。

紀錄與評分

每案記「預測/kind/來源/priority/table/prefix/next_hop/dev/實際差異/限制」。離線路線滿分 10 分:查表 4、LAN 與 endpoint 2、來源/SNAT 區別 2、驗證限制 2。Linux 延伸不影響必修完成;另交 OS、kernel、ip 版本與原始輸出。

來源:03A 章末的 iproute2 與 Linux 官方文件。解答見 answers/lan-solutions.md。