为了允许 IPsec NAT-T 流量通过,为什么防火墙在已经允许 UDP 4500 的情况下仍需要允许 ESP?

为了允许 IPsec NAT-T 流量通过,为什么防火墙在已经允许 UDP 4500 的情况下仍需要允许 ESP?

我在两个 Juniper SRX 路由器之间跨 NAT 建立了 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 标头时,它应该相应地接受该数据包。

相关内容