网络接口使用哪个 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 地址返回的数据包。

相关内容