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/12
2. 创建 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/%any
3. 创建保存预共享密钥的文件
创建或编辑/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
保存文件后,无需重启服务,更改即时生效。