我有一个防火墙/路由器(不执行 NAT)。
我在 Google 上搜索过,看到了相互矛盾的答案。似乎 UDP 500 是常见的。但其他的令人困惑。1701、4500。
有人说我还需要允许 GRE 50,或 47,或 50 和 51。
好的,哪些端口是正确的,IPSec/L2TP 可以在没有 NAT 的路由环境中工作?例如,我想使用内置的 Windows 客户端连接到此路由器/防火墙后面的 VPN。
也许一个好的答案是指定在不同情况下要打开哪些端口。我认为这对很多人来说都很有用。
答案1
以下是端口和协议:
- 协议:UDP,端口 500(用于 IKE,管理加密密钥)
- 协议:UDP,端口 4500(用于 IPSEC NAT-Traversal 模式)
- 协议:ESP,值 50(用于 IPSEC)
- 协议:AH,值 51(用于 IPSEC)
此外,L2TP 服务器使用端口 1701,但不应允许从外部传入连接。有一个特殊的防火墙规则,只允许 IPSEC 安全流量从此端口传入。
如果使用 IPTABLES,并且您的 L2TP 服务器直接位于互联网上,那么您需要的规则是:
iptables -A INPUT -i $EXT_NIC -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i $EXT_NIC -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i $EXT_NIC -p 50 -j ACCEPT
iptables -A INPUT -i $EXT_NIC -p 51 -j ACCEPT
iptables -A INPUT -i $EXT_NIC -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
$EXT_NIC
您的外部网络接口卡名称在哪里,例如 ppp0。
答案2
Ipsec 需要 UDP 端口 500 + IP 协议 50 和 51 - 但您可以使用 NAt-T,它需要 UDP 端口 4500。另一方面,L2TP 使用 udp 端口 1701。如果您尝试通过“常规”Wi-Fi 路由器传递 ipsec 流量,并且没有 IPSec 直通选项,我建议打开端口 500 和 4500。至少在我的路由器上就是这样工作的。希望这能有所帮助。
答案3
好的。
事实上 - 这取决于情况。
我有Ubuntu L2TP\IPSEC 服务器位于 NAT 后面。
如果您的 L2TP\ipsec 服务器位于 NAT 后面,在这种情况下,在您的网关(带有 NAT)上,您需要为以下端口和协议进行端口转发:
500 UDP
4500 UDP
1701 UDP
本例中的重点是——没有必要转发 ESP 或 AH。
此外,当服务器位于 NAT 后面时,默认情况下 Windows 操作系统客户端无法连接到此类服务器,您需要添加到注册表中
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
AssumeUDPEncapsulationContextOnSendRule = 2 (type dword32)
如果服务器直接位于互联网上
UDP 500
UDP 4500
只需要在WAN接口上开启就可以了。
在这种情况下,Windows 操作系统客户端不需要进行任何注册表编辑。
这些信息都是经过实践检验的。
===
更新(2021.04.23):
如果您使用 ipsec 进行动态 vpn,则不需要在防火墙上启用 ESP\AH 协议。
但是如果你使用 ipsec 进行站点到站点隧道(在两个具有 Internet IP 地址的路由器之间) ---> 则还需要在防火墙上启用
ESP protocol
AH protocol