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

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

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

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

路線指令顯示如下:

$ 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 位址已組成,我無法將另一個 IP 位址新增至 Ubuntu WSL 中的接口,因為出現以下錯誤:

$ 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

答案1

對於 Linux,你的問題的答案是在這裡給出:

出站資料包的初始來源位址是根據以下一系列規則選擇的。

應用程式可以請求特定的IP,核心將使用所選路由路徑中的src 提示,或者,如果缺少此提示,核心將選擇介面上配置的第一個位址,該位址與目標位址或目標位址位於同一網絡中。

答案2

用戶端將尋找與其嘗試連接的位址相符的路由。如您的範例所示,如果有多個符合路由,它將選擇度量值最高的路由條目,並使用該介面的 IP 位址將封包從路由表中找到的介面傳送出去。

您已經截斷了路線的輸出,並且沒有說明您要連接的內容 - 所以我無法告訴您那將是哪個介面。

在伺服器上……事情變得有點複雜。我的 Centos 和 Redhat 主機在同一子網路上有多個介面。這些將在資料包發送到的相同位址/介面上進行回應。但我最近也有 Ubuntu 和 Debian 系統,它們會重新訪問路由表以查找要使用的介面和位址,而忽略客戶端資料包上的尋址。用戶端將忽略從不與之通訊的 IP 位址傳回的封包。

相關內容