Ubuntu

Linux 如何選擇使用哪個網路介面?

  • December 14, 2021

假設我有一台機器,在不同的子網eth0(10.0.100.5) 和eth1(10.0.200.5) 上有兩個網路適配器。假設兩個子網都有通往網際網路的路由(儘管它們自己的 NAT)和本地網路的其餘部分(儘管它們自己的交換機):

  1. 當向 10.0.150.5 或 173.194.43.102 發出請求時,Linux 將如何選擇使用哪個網路介面?
  2. 有沒有辦法可以在網路層面影響這一點?從子網中刪除路由會影響這一點嗎?我在 AWS 環境中使用無法登錄的設備 AMI,所以這樣的事情不起作用

AWS VPC 環境,其他執行 Ubuntu 12.04 的機器,不知道我試圖影響的機器正在執行什麼(因為我無法登錄)。

說明:

  • 兩個子網都設置為/24s

子網由networkmask定義,例如

網路: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/8use eth0。所以離開這個介面的數據包將有源地址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

引用自:https://serverfault.com/questions/644656