无法将客户端绑定到本地 IP,而是静默使用另一个 IP

无法将客户端绑定到本地 IP,而是静默使用另一个 IP

由于服务器上有防火墙,我需要使用允许的源 IP 从主机(Slackware64 linux 14.2,内核 5.4)建立到它的所有连接,10.2.23.1在这种情况下。

主机上的 IP 地址:

$ ip a
[...]
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0d:b9:55:c1:c8 brd ff:ff:ff:ff:ff:ff
    inet 10.2.22.7/28 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20d:b9ff:fe55:c1c8/64 scope link 
       valid_lft forever preferred_lft forever
7: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0d:b9:55:c1:c9 brd ff:ff:ff:ff:ff:ff
    inet 10.10.16.166/30 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::20d:b9ff:fe55:c1c9/64 scope link 
       valid_lft forever preferred_lft forever
8: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UP group default qlen 1000
    link/ether 00:0d:b9:55:c1:ca brd ff:ff:ff:ff:ff:ff
    inet 10.2.23.1/24 scope global eth2
       valid_lft forever preferred_lft forever
    inet 10.247.226.186/32 scope global eth2
       valid_lft forever preferred_lft forever
    inet6 fe80::20d:b9ff:fe55:c1ca/64 scope link 
       valid_lft forever preferred_lft forever
[...]

例如,使用 SSH,我想从本地 IP 10.2.23.1 连接到 10.0.4.16:

$ ssh -b 10.2.23.1 [email protected]

连接失败,因为 ssh 使用 10.247.226.186 作为源 IP,而不是应有的 10.2.23.1(通过 tcpdump 确认) - 并且服务器上不允许这样做。当然我可以在服务器上允许另一个IP,但我想知道为什么它不起作用。

我还编写了一个简单的 C 程序来证实这一点(实际上只是socketbind10.2.23.1 和connect... 事实上的任何地方)。程序运行,bind功能没有错误,但源IP始终是10.247.226.186。

有谁知道为什么所有连接都使用另一个IP在eth2上?可能是 /32 网络掩码有问题吗?

谢谢。

编辑:添加了主机操作系统。

答案1

就像AB在评论中所说,这是主机上的NAT。这就是所有程序都能够绑定到 IP 但 tcpdump 显示不同 IP 的原因。

相关内容