这是我对这个问题的跟进。(仍然在 Debian 7.8 上)
问题与 IPSec 无关,因为我什至无法使用“正确”的源 IP ping 远程主机(通过 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
我希望我的连接使用默认的 gw 和标准 IP eth1: .94,但一个到远程主机的连接使用 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 数据包得到 0.94 的源 IP(即使使用 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。
...我完全迷失在这里。
经过几天痛苦的调试和路由和路由表以及愤怒的头脑,我放弃并重新配置了我直接控制的所有 IPSec 客户端以使用 .92 IP,现在一切正常。
我仍然不知道为什么我不能 sourceroute 或 SNAT 数据包......是时候在我的测试环境中进行一些严肃的测试了(我怀疑 IP 别名、起搏器和路由表或类似的东西之间存在一些疯狂的不兼容,或者只是愚蠢的)。