更改特定目标主机的源 IP

更改特定目标主机的源 IP

这是我的问题。(仍然在 Debian 7.8 上)

该问题实际上与 IPSec 无关,因为我甚至无法 ping 具有“正确”源 IP 的远程主机(通过 ping -I eth1:ipsec)。

以下是必要的信息:

inet xxx.xxx.xxx.94/24 brd xxx.xxx.xxx.255 scope global eth1
inet xxx.xxx.xxx.92/29 brd xxx.xxx.xxx.95 scope global secondary eth1:ipsec

我希望我的连接使用 eth1: .94 的默认 gw 和标准 IP,但与远程主机的一个连接使用 eth1:ipsec: .92。

我认为这是一个路由问题,因此我添加了一个路由规则表:

0:      from all lookup local
2:      from all to xxx.xxx.xxx.21 lookup 17
32766:  from all lookup main
32767:  from all lookup default

并且 17 有:

xxx.xxx.xxx.21 via xxx.xxx.xxx.91 dev eth1  src xxx.xxx.xxx.92

但即使现在,如果我 ping 数据包得到的源 IP 为 .94(即使使用 ping -I eth1:ipsec 或 -I xxx.xxx.xxx.92):

xxx.xxx.xxx.94 > xxx.xxx.xxx.21: ICMP echo request, id 20865, seq 9, length 64
IP xxx.xxx.xxx.21 > xxx.xxx.xxx.94: ICMP echo reply, id 20865, seq 9, length 64

另外,通过 iptables 对数据包进行 SNAT 也不起作用,源 IP 仍然是错误的。

...我完全迷失了。

答案1

经过几天痛苦的调试、路由和路由表以及勃然大怒之后,我放弃了,并重新配置了我直接控制的所有 IPSec 客户端以使用 .92 IP,现在一切都按预期运行。

我仍然不明白为什么我无法对数据包进行源路由或 SNAT...是时候在我的测试环境中进行一些严肃的测试了(我怀疑 IP 别名、起搏器和路由表之间存在一些疯狂的不兼容性或类似的东西,或者只是简单的愚蠢)。

相关内容