網路介面使用哪個 IP 地址?
當主機充當客戶端時,介面使用哪個 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 地址返回的數據包。