我透過 NAT 在兩台 Juniper SRX 路由器之間建立了 IPsec VPN 隧道,NAT 由防火牆(Linux 伺服器)執行。當嘗試設定防火牆規則以允許 IPsec VPN 流量通過時,我發現雖然 IKE 協商在允許 UDP 連接埠 500 和 4500 的情況下成功完成,但 VPN 流量通訊無法正常運作,除非新增規則以允許 ESP。
以下是我在防火牆上應用的規則,但僅完成了 IKE 協商:
iptables -F
iptables -P FORWARD DROP
# Inbound
iptables -I FORWARD -s <External IP address> -d <Internal IP address> -p udp --sport 500 -j ACCEPT
iptables -I FORWARD -s <External IP address> -d <Internal IP address> -p udp --sport 4500 -j ACCEPT
# Outbound
iptables -I FORWARD -s <Internal IP address> -d <External IP address> -p udp --sport 500 -j ACCEPT
iptables -I FORWARD -s <Internal IP address> -d <External IP address> -p udp --sport 4500 -j ACCEPT
為了成功地透過VPN隧道傳輸數據,也應該設定以下兩條規則:
iptables -I FORWARD -s <External IP address> -d <Internal IP address> -p 50 -j ACCEPT
iptables -I FORWARD -s <Internal IP address> -d <External IP address> -p 50 -j ACCEPT
由於ESP資料是由UDP頭封裝的(這裡提供的是我的防火牆捕獲的 VPN 通訊資料包),為什麼防火牆會阻止隧道流量而不在規則中允許 ESP?在我的預期中,當防火牆發現封包包含 UDP 連接埠 4500 標頭時,它應該相應地接受該封包。


