L2TP/IPsec VPN 端口与防火墙配置说明

适用范围:本项目使用的 L2TP/IPsec(libreswan/strongswan + xl2tpd + ppp)脚本安装的 VPN 服务。


一、必须开放的端口与协议

从公网正常连接到 VPS 上的 L2TP/IPsec VPN,需要同时满足:

  1. 云厂商安全组 / 防火墙(阿里云、腾讯云等)放行:

    • UDP 500:IKE(IPsec 密钥交换)
    • UDP 4500:IPsec NAT-T(穿透 NAT)
    • UDP 1701:L2TP 隧道(通常在 IPsec 之上使用)
    • 协议 ESP(IP 协议号 50):IPsec 加密数据通道(有的云厂商归在 IPsec 服务里统一放行)
  2. 服务器本机防火墙(firewalld / iptables / ufw 等)同样需要放行以上端口/协议,并开启 SNAT/MASQUERADE 以便内网地址出网。

说明:

  • 大多数云厂商提供了内置的 IPsec 服务类型,勾选后会自动放行 UDP 500、UDP 4500 和 ESP 协议;
  • 若安全组只支持按端口配置,至少要手动添加 UDP 500、4500、1701 三个端口规则,并确保没有额外策略拦截协议 ESP。

二、云厂商安全组建议配置

以常见云服务器为例,建议在安全组中添加如下入站规则(入方向):

协议 端口范围 来源 说明
UDP 500 0.0.0.0/0 IKE,IPsec 密钥交换
UDP 4500 0.0.0.0/0 IPsec NAT-T,穿透 NAT
UDP 1701 0.0.0.0/0 L2TP 隧道(在 IPsec 之上)
ESP ALL 0.0.0.0/0 IPsec 加密数据(协议号 50)

如果你只允许部分网段使用 VPN,可以把 0.0.0.0/0 换成指定的出口公网 IP 或网段。


三、服务器本机防火墙示例

1. firewalld(CentOS/RHEL 默认)

# 开启 IPsec 服务(含 UDP 500/4500 + ESP 等)
firewall-cmd --permanent --add-service=ipsec

# 单独确保 L2TP 端口 1701/udp 放行
firewall-cmd --permanent --add-port=1701/udp

# 允许 VPN 客户端出网(SNAT)
firewall-cmd --permanent --add-masquerade

# 应用配置
firewall-cmd --reload

说明:

  • --add-service=ipsec 通常会自动放行 UDP 500、4500 以及 IPsec 使用的 ESP 协议;
  • 如果你不确定,可再显式加上:--add-port=500/udp--add-port=4500/udp

2. iptables 示例

# 放行 IPsec IKE/NAT-T 端口
iptables -A INPUT -p udp --dport 500  -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT

# 放行 L2TP 端口
iptables -A INPUT -p udp --dport 1701 -j ACCEPT

# 放行 ESP 协议(协议号 50)
iptables -A INPUT -p esp -j ACCEPT

# 允许 VPN 地址池出网(假设为 10.10.10.0/24,出口网卡为 eth0)
iptables -A FORWARD -s 10.10.10.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE

# 持久化规则(不同系统命令可能稍有差异)
service iptables save

注意:

  • 请将 10.10.10.0/24 替换为你在 /etc/xl2tpd/xl2tpd.conf 中配置的 ip range 网段;
  • eth0 替换为实际对外网卡名(可用 ip addr 查看,如 ens3eth1 等)。

3. ufw(Debian/Ubuntu 常用)

# 放行 IPsec IKE/NAT-T 端口
ufw allow 500/udp
ufw allow 4500/udp

# 放行 L2TP 端口
ufw allow 1701/udp

# (可选)开启转发和 SNAT,通常结合 /etc/ufw/before.rules 配置
# 示例:在 *nat 表中加一条 MASQUERADE 规则
# -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE

# 启用 ufw
ufw enable

四、和本项目安装脚本的对应关系

本项目内的安装脚本会:

  • 安装并配置 IPsec(libreswan 或 strongswan)、xl2tpd、ppp;
  • 修改 /etc/ipsec.conf/etc/ipsec.secrets/etc/xl2tpd/xl2tpd.conf/etc/ppp/options.xl2tpd 等;
  • 在 CentOS/RHEL 环境下,通常会自动执行类似:
    • firewall-cmd --permanent --add-service=ipsec
    • firewall-cmd --permanent --add-port=1701/udp
    • firewall-cmd --permanent --add-masquerade

云厂商安全组部分需要你手工在控制台放行,否则即使服务器本机已经放开端口,外网也连不进来。

若你想了解完整安装流程,可参考同目录下的:

  • L2TP_IPSEC_CENTOS7.md:详细的 CentOS 7 部署步骤和防火墙示例。

五、快速自查清单

当客户端连不上时,建议按下面顺序排查:

  1. 确认云服务器安全组是否放行:UDP 500、4500、1701;是否有 IPsec/ESP 的额外限制;
  2. 确认服务器本机防火墙(firewalld/iptables/ufw)是否放行以上端口和 ESP;
  3. 确认内核转发已开启:net.ipv4.ip_forward = 1
  4. 确认 VPN 服务状态正常:systemctl status ipsecsystemctl status xl2tpd
  5. 查看系统日志(如 /var/log/messages/var/log/syslog)排查错误信息。

如果你有指定云厂商(比如阿里云/腾讯云)需要对照具体控制台截图配置,我也可以再帮你补一版安全组示例。\n

作者:wuge  创建时间:2025-12-31 17:47
最后编辑:wuge  更新时间:2025-12-31 17:47