單元 07 一個介面、多個位址與來源選擇
學習目標與問題
先讀 04 的 CIDR 與下一跳、05 的 MAC 與 ARP。本單元用兩個閘道說明位址不等於出口,而且只用一張 main 表。完成後應能預測指定與未指定來源時的來源、匹配前綴與下一跳,寫出回程的可達條件,並區分來源偏好與 SNAT。SNAT 見 16,依規則選表的政策路由見 17。
問題:一張網卡同時持有兩個 IP,應用指定第二個 IP 後,是否一定走第二個閘道?
7.1 一個介面不只一個位址
介面是收送封包的邊界;IP 位址是三層識別。Linux 可對同一介面加入多個位址,無須建立另一張網卡;舊式「IP alias」名稱或 label 不會自動產生獨立鏈路。兩個位址可屬同一子網或不同子網,但新增位址本身不會建立 VLAN 隔離。
以下文件用位址只在隔離實驗中使用。H 的 eth0、G1、G2 都接同一個交換器/VLAN,G1 與 G2 各有自己的遠端網路。
| 節點 | 位址 | 角色 |
|---|---|---|
| H eth0 | 192.0.2.10/24、198.51.100.10/24 | 一個介面、兩個來源候選(下稱來源 1、2) |
| G1 | 192.0.2.1/24 | 預設出口 1 |
| G2 | 198.51.100.1/24 | 希望來源 2 使用的出口 |
| S | 203.0.113.80 | 範例遠端目的;兩條路徑均可達的假設 |

兩個不同 IP 子網共用同一個廣播域是可行拓樸;它們仍共用二層廣播,不能達成訪客隔離。若 eth0.10 與 eth0.20 是 802.1Q 子介面,則另有 VLAN 標記與交換器設定,不能與「同 eth0 加兩個位址」混為一談。
新增一般前綴位址時,Linux 通常會建立相應直連前綴路由,並記錄為本機位址(表的機制見 17);noprefixroute 等選項及網路管理程式會影響結果。要看實際表,不靠位址清單猜測。
7.2 三個決策分開回答
bind 是應用指定本機來源位址的動作,細節見 09。
| 決策 | 例子 | 不代表什麼 |
|---|---|---|
| 應用來源 | bind 198.51.100.10 | 不自動指定 G2 |
| 表內路由 | default via G1 dev eth0 | 不會改寫來源位址 |
| 鏈路交付 | ARP 取得 G1 的 MAC | 不保證 G1 有回程或服務可用 |
Linux 路由的 src 欄位是偏好來源,適用於尚未固定來源的本機發送;它不是 SNAT,不能把已綁定來源或轉送封包一律改成該位址。SNAT 需另讀 16,並記錄改寫前後四元組。
若只有 main 表預設經 G1,應用即使 bind 來源 2,也可能以來源 2、下一跳 G1 送出;G1 及遠端必須知道如何回到來源 2。來源位址與下一跳不是依序排列的一對一配對。
未綁定來源的新連線,初始查表時可能尚未有具體來源可匹配。本例普通未指定來源的查表走 main/G1,再取該路由偏好的來源 1。規則選表見 17。
7.3 main 表的最長前綴匹配
H 的 main 表如下,所有路由皆走 eth0。
| 前綴 | 下一跳 | 偏好來源 |
|---|---|---|
| 192.0.2.0/24 | on-link | 192.0.2.10 |
| 198.51.100.0/24 | on-link | 198.51.100.10 |
| 0.0.0.0/0 | 192.0.2.1 | 192.0.2.10 |
目的 198.51.100.55 匹配 /24,直接 ARP .55;目的 S 匹配 /0,ARP G1。指定來源 2 並不改變此表的目的查找。若下一跳不在可達鏈路上,不能任意加 onlink 來掩蓋拓樸錯誤;須確認實際鄰居解析可行。
7.4 回程的可達條件
正向正確只是一半。本例經 G1 送出時,G1 與遠端須能把回覆送回來源 2,例如 G1 要有通往 198.51.100.0/24 的路由。狀態檢查與回覆來源見 16、17。
實驗、習題與檢核
做 L15 階段一:先預測,再以 python3 labs/lan_models.py L15 --stage 1 核對兩案,即來源 2 與未指定來源送往 203.0.113.80;只記預測、來源、prefix、next_hop、dev 與模型限制,並回答手冊的階段一判讀,本階段在此提交。其餘七案與 priority、table、trace 屬階段二,讀完 17 再做。必修離線路線不改主機設定;本例未作 Linux 實測,預期輸出須與實測紀錄分開。
- 基本:兩個 IP 同 eth0、同 VLAN,為何不等於兩個隔離 LAN?
- 分析:僅有 main 表時,bind 來源 2 到 S 會用哪個閘道?還需哪項回程條件?
- 基本:main 表預設路由的 src 是來源 1;應用已 bind 來源 2 時,src 能否把它改寫成來源 1?
- 基本:應用未指定來源,分別送往 198.51.100.55 與 192.0.2.77。依 7.3 的 main 表,各匹配哪個前綴、選出哪個來源、下一跳是誰?
檢核:能在同一筆紀錄分別寫來源、匹配前綴、下一跳、介面及回程條件;能說明哪些只是模型。
來源(查閱 2026-10-06):ip-address、ip-route。命令以 Linux/iproute2 語義編寫;本文拓樸與題目為獨立設計。