Iptables
通過轉發的 ipsec 隧道路由流量
也許有人可以啟發我……我認為我在 IPTables 中遇到了問題,但不知道了……
我在 pfSense 伺服器和帶有 strongswan 的虛擬機之間有一個 IPSEC 站點 2 站點隧道。我正在使用 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 虛擬機到 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 上設置了。所以現在當我對我的新測試機 (10.49.10.36) 執行 pfsense 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 直接在主機而不是 VM 上執行,然後一切正常。
我可能只是忘記了一些愚蠢的事情,但經過幾天的思考,我再也看不到它了。
希望有人可以幫助我。
原來我通過錯誤的介面路由流量。我試圖讓它工作一段時間,然後你忽略了最愚蠢的事情。退了一會兒後,我發現了情況。感謝 ecda 的評論