![更改特定目标主机的源 IP](https://linux22.com/image/655844/%E6%9B%B4%E6%94%B9%E7%89%B9%E5%AE%9A%E7%9B%AE%E6%A0%87%E4%B8%BB%E6%9C%BA%E7%9A%84%E6%BA%90%20IP.png)
这是这我的问题。(仍然在 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 别名、起搏器和路由表之间存在一些疯狂的不兼容性或类似的东西,或者只是简单的愚蠢)。