也许有人可以启发我...我想我在 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 的评论