Networking

網路介面使用哪個 IP 地址?

  • May 31, 2021

當主機充當客戶端時,介面使用哪個 IP?

假設我為 eth0 配置了 2 個 IP 地址:192.168.1.7 和 192.168.1.8

route 命令顯示如下內容:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.240.0   0.0.0.0         255.255.240.0   U     256    0        0 eth0
...

這基本上意味著當我嘗試從192.168.240.0網路連接到任何主機時,它使用 eth0 介面。好的,但是… 該介面的哪個 IP 地址?

如果主機充當伺服器並且客戶端使用 IP 地址連接到我的電腦,192.168.1.7我知道 eth0 將用於192.168.1.7與客戶端通信,但如果我是客戶端怎麼辦?


編輯

IP 地址已組成,我無法在我的 Ubuntu WSL 中的介面中添加另一個 IP 地址,因為我收到此錯誤:

$ ip address add 192.168.1.7/24 dev eth0
RTNETLINK answers: Permission denied

的輸出ip r s是這樣的:

$ ip r s
none 224.0.0.0/4 dev eth0 proto unspec metric 256
none 255.255.255.255 dev eth0 proto unspec metric 256
none 224.0.0.0/4 dev eth1 proto unspec metric 256
none 255.255.255.255 dev eth1 proto unspec metric 256
...

編輯 2

我升級到 WSL2,現在添加 IP 地址的命令可以工作(使用 sudo)。

$ ip -4 a s dev eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
   inet 192.168.249.181/20 brd 192.168.255.255 scope global eth0
      valid_lft forever preferred_lft forever
   inet 192.168.1.7/24 scope global eth0
      valid_lft forever preferred_lft forever
   inet 192.168.1.8/24 scope global secondary eth0
      valid_lft forever preferred_lft forever

對於 Linux,您的問題的答案在此處給出

根據以下一系列規則選擇出站數據包的初始源地址。

應用程序可以請求一個特定的 IP,核心將使用所選路由路徑中的 src 提示,或者,如果沒有此提示,核心將選擇介面上配置的第一個地址,該地址與目標地址或下一跳路由器。

客戶端將查找與其嘗試連接的地址匹配的 ROUTES。如果像在您的範例中那樣,有多個匹配路由,它將選擇具有最高度量的路由條目,並使用該介面的 IP 地址將數據包從路由表中找到的介面發送出去。

你已經截斷了路由的輸出,並沒有說你連接到什麼——所以我不能告訴你那將是哪個介面。

在伺服器上……好吧,那裡的事情變得有點複雜。我在同一個子網上有多個介面的 Centos 和 Redhat 主機。那些將在數據包發送到的相同地址/介面上回复。但我也有最近的 Ubuntu 和 Debian 系統,它們將重新訪問路由表以查找要使用的介面和地址,而忽略客戶端數據包上的定址。客戶端將忽略從其未與之通信的 IP 地址返回的數據包。

引用自:https://unix.stackexchange.com/questions/652082