Linux 如何選擇使用哪個網路介面?
假設我有一台機器,在不同的子網
eth0
(10.0.100.5) 和eth1
(10.0.200.5) 上有兩個網路適配器。假設兩個子網都有通往網際網路的路由(儘管它們自己的 NAT)和本地網路的其餘部分(儘管它們自己的交換機):
- 當向 10.0.150.5 或 173.194.43.102 發出請求時,Linux 將如何選擇使用哪個網路介面?
- 有沒有辦法可以在網路層面影響這一點?從子網中刪除路由會影響這一點嗎?我在 AWS 環境中使用無法登錄的設備 AMI,所以這樣的事情不起作用。
AWS VPC 環境,其他執行 Ubuntu 12.04 的機器,不知道我試圖影響的機器正在執行什麼(因為我無法登錄)。
說明:
- 兩個子網都設置為
/24
s
子網由network和mask定義,例如
網路:10.0.100.5 遮罩:/8
這意味著您的子網是:
10.
0.100.5/8
基本上 10.xxx.xxx.xxx 系列中的任何有效 IP 都屬於該子網。只能使用一個介面訪問該子網中的主機。因此,在您的情況下,將使用 eth0 或 eth1。如果其他介面在同一子網中具有 IP 地址,則無法正確路由流量。
如果介面 eth0 和 eth1 都連接到同一網路且 IP 地址位於同一子網上,則會發生以下情況。
- eth0 10.0.100.5/8
- eth1 10.0.200.5/8
現在只有其中一個介面有路由(假設它是eth0),它說
to access subnet 10.0.100.0/8
useeth0
。所以離開這個介面的數據包將有源地址10.0.100.5
!注意
- 10.0.100.5/8 和 10.0.200.5/8 是同一個子網(因為遮罩遮罩最後 3 個八位字節,我們也可以寫成 10.0.0.0/8)
所以現在考慮我們在這個子網上有一個主機,它試圖與
10.0.200.5
Packet進行通信,eth1
但無法返回 via,eth1
因為eth0
它是唯一具有網路路由的介面,10.0.0.0/8
並且來自 eth0 的響應具有不同的 IP;因此,與 10.0.200.5 的一個發起連接將無法理解來自其他來源的響應。編輯
要確定將使用哪個介面,您需要查看您的路由表。該問題不包含路由表,因此我將嘗試使用以下假設的路由表進行解釋
$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlan0 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
替代路由表輸出
$ ip route show default via 192.168.0.1 dev wlan0 proto static 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5 192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.14
所以我們在上面的例子中有 2 個介面。
- eth0 與 IP 10.0.0.5 在子網 10.0.0.5/255.255.255.0 或 CIDR 表示法 10.0.0.5/24
- wlan0 與 IP 192.168.0.14 在子網 192.168.0.14/255.255.255.0 或 CIDR 表示法 192.168.0.0/24
現在路由表告訴我們什麼;逐行解釋,自下而上:
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.14
要訪問子網中的主機,請
192.168.0.0/24
使用 interfacewlan0
和 src IP192.168.0.14
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5
要訪問子網中的主機,請
10.0.0.0/24
使用 interfaceeth0
和 src IP10.0.0.5
default via 192.168.0.1 dev wlan0 proto static
要訪問上述規則未涵蓋的任何其他主機,請使用
default
路由,使用介面wlan0
和網關可以訪問其他網路192.168.0.1