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_policy | 198.51.100.10 | 203.0.113.80 | ____ |
| source_unspecified | 未指定 | 203.0.113.80 | ____ |
| source_policy | 198.51.100.10 | 203.0.113.80 | ____ |
| lan_correct | 198.51.100.10 | 198.51.100.55 | ____ |
| lan_missing_route | 198.51.100.10 | 198.51.100.55 | ____ |
| endpoint_exception | 198.51.100.10 | 203.0.113.81 | ____ |
| local_delivery | 198.51.100.10 | 192.0.2.10 | ____ |
| throw_fallthrough | 198.51.100.10 | 198.51.100.55 | ____ |
| explicit_reject | 198.51.100.10 | 198.51.100.55 | ____ |
輸出中的 kind=model 表示人工查表;trace 列出規則是否匹配、所查表與結果。selected_source 只表示此簡化模型的固定/偏好來源,不模擬完整 OS 來源選擇。
B:判讀與修改
- 比較 no_policy 與 source_policy:來源是否改變?下一跳是否改變?
- lan_missing_route 中 main 仍有 /24。指出為何 lookup 200 的 default 先成功;在 L15 函式建立 bad[200] 的地方,將缺少的 /24 加回 bad[200] 後重做;demo_tables 原本已有直連路由。
- endpoint_exception 用 priority 50 目的規則查 main,早於 priority 100 來源規則。移到 150 後,預測會變成哪個下一跳再驗證。
- throw_fallthrough 與 explicit_reject 目的相同,何者繼續查 main?trace 在哪裡停止?
- 比較來源尚未指定與明確指定,說明 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。