通过转发的 IPSec 隧道路由流量

通过转发的 IPSec 隧道路由流量

也许有人可以启发我...我想我在 IPTables 中遇到了问题,但现在不知道了...

我在 pfSense 服务器和带有 strongswan 的虚拟机之间建立了 IPSEC 站点到站点隧道。我使用 iptables 将虚拟机正在运行的主机的流量转发到虚拟机

iptable 规则:

iptables -t nat -A POSTROUTING -m policy --pol ipsec --dir out -j ACCEPT
iptables -t nat -A PREROUTING -i eno1 -p udp -d externalip --dport 500 -j DNAT --to-destination 10.49.10.35
iptables -t nat -A PREROUTING -i eno1 -p udp -d externalip --dport 4500 -j DNAT --to-destination 10.49.10.35
iptables -A FORWARD -p udp -d 10.49.10.35 --dport 500 -j ACCEPT
iptables -A FORWARD -p udp -d 10.49.10.35 --dport 4500 -j ACCEPT
iptables -t nat -A POSTROUTING -p udp -s 10.49.10.35 --sport 500 -j SNAT --to-source externalip
iptables -t nat -A POSTROUTING -p udp -s 10.49.10.35 --sport 4500 -j SNAT --to-source externalip

IPSEC 隧道设置正确(我认为),因为当它连接时,我可以使用内部 IP 来回 ping pfSense 机器和具有 IPSec 端点的 VM。

从 pfSense 机器到 VM:

ping -S 10.130.20.1 10.49.30.35
PING 10.49.30.35 (10.49.30.35) from 10.130.20.1: 56 data bytes
64 bytes from 10.49.30.35: icmp_seq=0 ttl=64 time=12.248 ms
64 bytes from 10.49.30.35: icmp_seq=1 ttl=64 time=12.265 ms
64 bytes from 10.49.30.35: icmp_seq=2 ttl=64 time=12.327 ms
64 bytes from 10.49.30.35: icmp_seq=3 ttl=64 time=12.286 ms

从 IPSEC VM 到 pfSense

PING 10.130.20.1 (10.130.20.1) 56(84) bytes of data.
64 bytes from 10.130.20.1: icmp_seq=1 ttl=64 time=12.2 ms
64 bytes from 10.130.20.1: icmp_seq=2 ttl=64 time=12.2 ms
64 bytes from 10.130.20.1: icmp_seq=3 ttl=64 time=12.1 ms
64 bytes from 10.130.20.1: icmp_seq=4 ttl=64 time=12.1 ms

一切似乎都正常,但是当我在 IPSecVM 后面的设置中输入一台额外的机器时,ping 等就不再可能了。
我已经net.ipv4.ip_forward = 1在 IPSecVM 上进行了设置。

所以现在当我从 pfSense 对我的新测试机器 (10.49.10.36) 执行 ping 操作时

ping -S 10.130.20.1 10.49.30.36
PING 10.49.30.36 (10.49.30.36) from 10.130.20.1: 56 data bytes
^C
--- 10.49.30.36 ping statistics ---
4 packets transmitted, 0 packets received, 100.0% packet loss

当我tcpdump -i ens19 host 10.130.20.1在测试机上运行时,我看到流量进来,但没有回复

12:48:03.432489 IP 10.130.20.1 > 10.49.30.36: ICMP echo request, id 2145, seq 0, length 64
12:48:04.434735 IP 10.130.20.1 > 10.49.30.36: ICMP echo request, id 2145, seq 1, length 64
12:48:05.435699 IP 10.130.20.1 > 10.49.30.36: ICMP echo request, id 2145, seq 2, length 64
12:48:06.443736 IP 10.130.20.1 > 10.49.30.36: ICMP echo request, id 2145, seq 3, length 64
12:48:07.454943 IP 10.130.20.1 > 10.49.30.36: ICMP echo request, id 2145, seq 4, length 64

我不再想这是关于路由了,我在 testvm 上添加了一条路由:

route add -net 10.130.20.0/24 gw 10.49.10.35

但仍然没有流量被发回......

我认为它与 iptables 有关的原因是,我有类似的设置,其中 strongswan 直接在主机上而不是虚拟机上运行,​​然后一切都正常。

我可能只是忘记了一些愚蠢的事情,但经过几天的思考,我再也看不到它了。

希望有人能帮助我。

答案1

原来我通过错误的接口路由了流量。我尝试让它工作了一段时间,然后你忽略了最愚蠢的事情。退后一会儿,画出我发现的情况。感谢 ecda 的评论

相关内容