网络接口使用哪个 IP 地址?

Adr*_*ian 2 networking ip network-interface

当主机作为客户端时,接口使用哪个 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
...
Run Code Online (Sandbox Code Playgroud)

这基本上意味着当我尝试从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
Run Code Online (Sandbox Code Playgroud)

的输出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
...
Run Code Online (Sandbox Code Playgroud)

编辑 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
Run Code Online (Sandbox Code Playgroud)

Edu*_*ani 6

对于 Linux,您的问题的答案如下

根据以下一系列规则选择出站数据包的初始源地址。

应用程序可以请求一个特定的 IP,内核将使用来自所选路由路径的 src 提示,或者,如果没有这个提示,内核将选择接口上配置的第一个地址,该地址与目标地址或下一跳路由器。