CentOS 7 搭建 L2TP/IPsec VPN 服务器
一、前言
L2TP(Layer 2 Tunneling Protocol)结合 IPsec(Internet Protocol Security)可以在提供隧道功能的同时,确保数据传输的安全性,本文将详细介绍在 CentOS 7 系统上如何搭建一个安全稳定的 L2TP/IPsec VPN 服务器。

二、前置条件检查
1、操作系统:CentOS 7
2、公网 IP:确保服务器拥有公网 IP 地址
3、网络环境:允许必要的端口通过防火墙
三、安装相关软件
1. 安装 EPEL 源
EPEL(Extra Packages for Enterprise Linux)是一个由 Fedora 特殊兴趣小组维护的项目,为 RHEL/CentOS 及其衍生发行版提供额外的软件包,执行以下命令安装 EPEL 源:
sudo yum install y epelrelease
2. 安装 xl2tpd

xl2tpd 是xl2tpd 的一个分支,用于实现 L2TP 和PPP协议,执行以下命令进行安装:
sudo yum install y xl2tpd
3. 安装 libreswan
libreswan 是 OpenSWAN 的一个分支,实现了 IPsec 协议,执行以下命令进行安装:
sudo yum install y libreswan
四、配置 IPsec
1. 编辑 IPsec 配置文件
创建或编辑/etc/ipsec.conf 文件,添加以下内容以启用 NAT 遍历:
config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/122. 创建 IPsec 与 L2TP 服务关联的配置文件

创建或编辑/etc/ipsec.d/l2tp_psk.conf 文件,添加以下内容:
conn L2TPPSKNAT
rightsubnet=vhost:%priv
also=L2TPPSKnoNAT
conn L2TPPSKnoNAT
authby=secret
pfs=no
auto=add
keyingtries=3
dpddelay=30
dpdtimeout=120
dpdaction=clear
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=10.0.30.177 # 服务器的公网 IP 地址
leftprotoport=17/1701
right=%any
rightprotoport=17/%any3. 创建保存预共享密钥的文件
创建或编辑/etc/ipsec.d/ipsec.secrets 文件,添加以下内容:
: PSK "123456"
4. 设置 l2tp 的账号信息
创建或编辑/etc/ppp/chapsecrets 文件,添加 VPN 用户信息:
用户名 服务器 密码 客户端 IP 地址池 admin1 * 12345678 * admin2 * 12345678 * admin3 * 12345678
5. 修改内核参数以支持 IPsec
创建或编辑/etc/sysctl.conf 文件,添加以下内容:
net.ipv4.ip_forward = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0
使配置生效:
sudo sysctl p
6. 启动并验证 IPsec 服务
启动并设置开机自启 IPsec 服务:
sudo systemctl start ipsec sudo systemctl enable ipsec
验证 IPsec 配置是否正确:
sudo ipsec verify
五、配置 L2TP
1. 编辑 L2TP 配置文件
创建或编辑/etc/xl2tpd/xl2tpd.conf 文件,修改以下内容:
[global] ;ifconfig显示的ip不是公网ip listenaddr = 10.0.12.7 ipsec saref = yes ;修改分配的地址段 [lns default] ip range = 192.168.7.7192.168.7.77 local ip = 192.168.7.10
2. 修改安全配置
创建或编辑/etc/ppp/options.xl2tpd 文件,添加以下内容:
requiremschapv2 msdns 8.8.8.8 msdns 114.114.114.114 logfile /var/log/xl2tpd.log
3. 停止 firewalld 服务并禁用
执行以下命令停止并禁用firewalld 服务:
sudo systemctl stop firewalld sudo systemctl mask firewalld
4. 安装并配置 iptables 服务
安装iptablesservices:
sudo yum install y iptablesservices
配置防火墙规则:
#注意 ens33要是自己的网卡名称 sudo iptables t nat A POSTROUTING s 192.168.7.10/24 o eth0 j MASQUERADE sudo iptables I FORWARD s 192.168.7.10/24 j ACCEPT sudo iptables I FORWARD d 192.168.7.10/24 j ACCEPT sudo iptables A INPUT p udp m policy dir in pol ipsec m udp dport 1701 j ACCEPT sudo iptables A INPUT p udp m udp dport 1701 j ACCEPT sudo iptables A INPUT p udp m udp dport 500 j ACCEPT sudo iptables A INPUT p udp m udp dport 4500 j ACCEPT sudo iptables A INPUT p esp j ACCEPT sudo iptables A INPUT m policy dir in pol ipsec j ACCEPT sudo iptables A FORWARD i ppp+ m state state NEW,RELATED,ESTABLISHED j ACCEPT sudo iptables A FORWARD m state state RELATED,ESTABLISHED j ACCEPT service iptables save
5. 启动并设置开机自启 L2TP 服务
启动并设置开机自启xl2tpd 服务:
sudo systemctl start xl2tpd sudo systemctl enable xl2tpd
六、常见问题与解答 (FAQs)
Q1:如何更改预共享密钥?
A1:预共享密钥定义在/etc/ipsec.d/ipsec.secrets 文件中,找到对应的条目,修改为新的密钥即可。
: PSK "newpassword"
保存文件后,重启 IPsec 服务使更改生效。
sudo systemctl restart ipsec
Q2:如何更改 VPN 用户的密码?
A2:VPN 用户信息定义在/etc/ppp/chapsecrets 文件中,找到对应的用户条目,修改密码即可。
admin1 * newpassword
保存文件后,无需重启服务,更改即时生效。
