Iptables

通過轉發的 ipsec 隧道路由流量

  • June 24, 2021

也許有人可以啟發我……我認為我在 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 的評論

引用自:https://serverfault.com/questions/920809