L2TP 虚拟专用网络搭建实战:企业级配置指南(全流程问题详解)
本文详细介绍了在openEuler系统上搭建IPsec over L2TP虚拟专用网络的完整流程。实验采用两台服务器和一台交换机模拟企业环境,重点包括关闭防火墙、安装必要软件包(libreswan、xl2tpd等)、配置IPsec连接参数和密钥文件、设置L2TP服务端参数等关键步骤。文章提供了详细的命令操作和配置示例,并针对常见问题给出了解决方案,适合企业网络管理人员参考学习。实验环境使用192.
系列文章目录
第一章 PPTP 虚拟专用网络搭建实战:企业级配置指南(全流程问题详解)
第二章 L2TP 虚拟专用网络搭建实战:企业级配置指南(全流程问题详解)
文章目录
前言
本次实验采用的是天枢一体化仿真靶场平台(感兴趣的可以查看:https://mp.weixin.qq.com/s/5Uihq_uBAdRB1vyxgFs-YA),如果没有平台的可以使用VMaware替代
注意:虚拟专用网络名称英文是:Virtual Private Network,本文统一称为虚拟专用网络
快速拓扑构建
实验概述
这次使用的设备是天枢平台的两台 openEuler 22.03sp4 服务器和一台交换机模拟企业级虚拟专用网络场景。
本实验基于以下环境配置:
- 操作系统: openEuler-22.03
- 协议: IPsec over L2TP
- 服务端 IP: 192.168.0.213
- 客户端 IP: 192.168.0.26
- 网络拓扑: 简单的客户端 - 服务端架构

理论基础
L2TP是一种工业标准的Internet隧道协议,功能大致和PPTP协议类似,比如同样可以对网络数据流进行加密。不过也有不同之处,比如PPTP要求网络为IP网络,L2TP要求面向数据包的点对点连接;PPTP使用单一隧道,L2TP使用多隧道;L2TP提供包头压缩、隧道验证,而PPTP不支持。
想学习PPTP搭建请点击跳转:第一章 PPTP虚拟专用网络搭建实战:企业级配置指南(全流程问题详解)
一、前期准备
为了实验方便,首先需要关闭两台服务器的防火墙。使用 systemctl stop firewalld 命令停止防火墙服务,然后使用 systemctl status firewalld 命令验证防火墙是否已成功停止。
命令如下:
systemctl stop firewalld # 停止 firewalld 防火墙服务
systemctl status firewalld # 查看 firewalld 防火墙服务的当前状态(如运行中、已停止等)
运行结果:
[root@localhost ipsec.d]# systemctl stop firewalld
[root@localhost ipsec.d]# systemctl status firewalld
○ firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2025-08-26 16:43:39 CST; 7s ago
Docs: man:firewalld(1)
Process: 813 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 813 (code=exited, status=0/SUCCESS)
8月 26 16:34:54 localhost systemd[1]: Starting firewalld - dynamic firewall daemon...
8月 26 16:34:55 localhost systemd[1]: Started firewalld - dynamic firewall daemon.
8月 26 16:43:39 localhost.localdomain systemd[1]: Stopping firewalld - dynamic firewall daemon...
8月 26 16:43:39 localhost.localdomain systemd[1]: firewalld.service: Deactivated successfully.
8月 26 16:43:39 localhost.localdomain systemd[1]: Stopped firewalld - dynamic firewall daemon.
【注意事项】
关闭防火墙仅适用于实验环境,生产环境中应配置适当的防火墙规则
停止防火墙后,系统安全性会降低,请谨慎操作
实验完成后建议重新启动防火墙服务
可以使用 systemctl disable firewalld 命令禁用防火墙开机自启动
二、服务端配置
1.安装相关软件包
安装 libreswan 和 xl2tp 的相关 rpm 软件包
进入软件包目录,使用 rpm -Uvh *.rpm 命令安装所有相关软件包。这些软件包包括 libreswan(IPsec 实现)、xl2tpd(L2TP 实现)、ppp(点对点协议)等,是构建 IPsec over L2TP 虚拟专用网络 的必要组件。
[root@localhost ~]# cd /root/ipsec_over_l2tp/
[root@localhost ipsec_over_l2tp]# ls
initscripts-10.17-3.oe2203sp4.x86_64.rpm libreswan-help-4.15-1.oe2203sp4.x86_64.rpm tcpdump-4.99.3-4.oe2203sp4.x86_64.rpm
ldns-1.7.0-28.oe2203sp4.x86_64.rpm network-scripts-10.17-3.oe2203sp4.x86_64.rpm xl2tpd-1.3.16-1.oe2203sp4.x86_64.rpm
libreswan-4.15-1.oe2203sp4.x86_64.rpm ppp-2.4.9-8.oe2203sp4.x86_64.rpm
[root@localhost ipsec_over_l2tp]# rpm -Uvh *.rpm
警告:initscripts-10.17-3.oe2203sp4.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID b675600b: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:libreswan-help-4.15-1.oe2203sp4 ################################# [ 13%]
2:ldns-1.7.0-28.oe2203sp4 ################################# [ 25%]
3:initscripts-10.17-3.oe2203sp4 ################################# [ 38%]
4:network-scripts-10.17-3.oe2203sp4################################# [ 50%]
5:ppp-2.4.9-8.oe2203sp4 ################################# [ 63%]
6:xl2tpd-1.3.16-1.oe2203sp4 ################################# [ 75%]
7:libreswan-4.15-1.oe2203sp4 ################################# [ 88%]
正在清理/删除...
8:initscripts-10.17-2.oe2203sp4 ################################# [100%]
2.配置 IPsec
创建 ipsec 需要的配置文件和秘钥文件
进入 /etc/ipsec.d/ 目录,创建 IPsec 配置文件 testipsec.conf 和密钥文件 testipsec.secrets。将密钥文件权限设置为 600,确保只有 root 用户可以访问,提高安全性。
cd /etc/ipsec.d/ # 进入 IPsec 配置文件存放目录(/etc/ipsec.d/ 是 IPsec 服务默认读取配置的目录之一)
touch testipsec.conf # 创建名为 testipsec.conf 的 IPsec 主配置文件(用于定义 IPsec 连接规则等)
touch testipsec.secrets # 创建名为 testipsec.secrets 的 IPsec 密钥文件(用于存储预共享密钥等敏感信息)
chmod 600 testipsec.secrets # 将密钥文件权限设置为 600(仅文件所有者可读写,增强敏感信息安全性)
【注意事项】
配置文件和密钥文件必须存储在 /etc/ipsec.d/ 目录下
密钥文件权限必须严格设置为 600,防止未授权访问
文件名可以自定义,但建议使用有意义的命名
确保目录路径正确,避免文件创建在错误位置
写入 IPsec 连接配置
编辑 testipsec.conf 文件,配置 IPsec 连接参数。该配置定义了一个名为 "testipsec" 的 IPsec 连接,使用预共享密钥认证,禁用 PFS,设置传输模式,指定 L2TP 协议端口等关键参数。
因为需要使用vim命令,所以解下来给新手一些vim常用命令表
| 操作场景 | 模式 | 命令/按键 | 作用说明 |
|---|---|---|---|
| 进入输入状态 | 普通模式 | i |
切换到插入模式(可输入文字) |
| 回到命令状态 | 插入模式 | Esc |
退回普通模式(执行命令) |
| 保存文件 | 普通模式 | :w |
保存当前修改(w=write) |
| 退出Vim | 普通模式 | :q |
退出程序(q=quit) |
| 保存并退出 | 普通模式 | :wq |
保存后退出(最常用) |
| 强制退出(不保存) | 普通模式 | :q! |
放弃修改,强制退出 |
用法:所有冒号开头的命令,输完后按回车生效;i 和 Esc 直接按就生效。
继续开始
编辑配置文件并写入配置内容(配置内容在下方)
vim testipsec.conf # 使用 vim 编辑器打开 testipsec.conf 文件,把下面的配置内容写入进去
cat testipsec.conf # 查看 testipsec.conf 文件的内容(检查 IPsec 配置规则是否正确设置)
配置内容如下:
conn testipsec
authby=secret
pfs=no
auto=add
rekey=no
left=%defaultroute
right=%any
ikev2=never
type=transport
leftprotoport=17/1701
rightprotoport=17/%any
dpddelay=15
dpdtimeout=30
dpdaction=clear
ike=aes256-sha1;modp2048
phase2alg=aes256-sha1
【注意事项】
authby=secret 表示使用预共享密钥认证
pfs=no 禁用完美前向保密,可以提高兼容性
auto=add 表示 ipsec 服务启动时自动添加此连接
left=% defaultroute 使用默认路由作为本地端点
right=% any 接受任何远程端点连接
leftprotoport=17/1701 指定本地使用 UDP 端口 1701(L2TP 协议)
ike 和 phase2alg 指定加密算法为 AES256-SHA1
写入秘钥文件
编辑 testipsec.secrets 文件,配置预共享密钥。格式为 "本地 ID 远程 ID : PSK" 密钥内容 "",这里使用 % any 表示任何本地和远程 ID 都可以使用此密钥,密钥内容为"testipsec123456"。
vim testipsec.secrets # 使用 vim 编辑器打开 testipsec.secrets 文件,接着填入下方的写入内容
写入内容(vim不会用的请看上面的命令表哦):
%any %any : PSK "testipsec123456"
启动ipsec服务
使用 systemctl 命令管理 ipsec 服务。enable 命令设置服务开机自启动,start 命令启动服务,status 命令检查服务状态。成功启动后,服务会加载配置文件并准备接受连接。
输出命令:
systemctl enable ipsec # 设置 ipsec 服务开机自启动(确保系统重启后 IPsec 服务能自动运行)
systemctl start ipsec # 启动 ipsec 服务(使配置的 IPsec 规则生效,开始提供 IPsec 相关功能)
systemctl status ipsec # 查看 ipsec 服务的当前状态(如是否激活、运行状态、最近日志等)
结果如下:
[root@localhost ipsec.d]# systemctl enable ipsec
Created symlink /etc/systemd/system/multi-user.target.wants/ipsec.service → /usr/lib/systemd/system/ipsec.service.
[root@localhost ipsec.d]# systemctl status ipsec
● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec
Loaded: loaded (/usr/lib/systemd/system/ipsec.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2025-08-26 16:43:00 CST; 3s ago
Docs: man:ipsec(8)
man:pluto(8)
man:ipsec.conf(5)
Process: 1751 ExecStartPre=/usr/libexec/ipsec/addconn --config /etc/ipsec.conf --checkconfig (code=exited, status=0/SUCCESS)
Process: 1753 ExecStartPre=/usr/libexec/ipsec/_stackmanager start (code=exited, status=0/SUCCESS)
Process: 1992 ExecStartPre=/usr/sbin/ipsec --checknss --nssdir /etc/ipsec.d (code=exited, status=0/SUCCESS)
Process: 2001 ExecStartPre=/usr/sbin/ipsec --checknflog (code=exited, status=0/SUCCESS)
Main PID: 2012 (pluto)
Status: "Startup completed."
Tasks: 3 (limit: 20421)
Memory: 10.6M
CGroup: /system.slice/ipsec.service
└─ 2012 /usr/libexec/ipsec/pluto --leak-detective --config /etc/ipsec.conf --nofork
需要注意输出的内容,服务状态输出显示了 IPsec 连接的详细配置信息,包括网络接口、加密算法、DPD 设置、NAT 穿越等参数。这些信息有助于验证配置是否正确应用。
【注意事项】
检查输出中的关键参数是否与配置一致
确认 IPsec 服务正在监听正确的网络接口和端口
验证 DPD 功能已启用(dpd: active)
注意 NAT 穿越设置,对于有 NAT 设备的环境很重要
如参数不正确,检查配置文件并重载服务
3. 配置 pppd
配置 CHAP 密钥
进入 /etc/ppp/ 目录,编辑 chap-secrets 文件配置 CHAP 认证信息。该文件用于存储 L2TP 连接的用户认证信息,格式为 “客户端用户名 服务器名 密码 允许的 IP 地址”。
命令如下:
cd /etc/ppp/ # 进入 ppp 协议配置文件所在目录(ppp 是点对点协议,常用于 虚拟专用网络 中的身份验证等配置)
vim chap-secrets # 使用 vim 编辑器打开 chap-secrets 文件,该文件用于存储 PPP 协议的 CHAP 身份验证信息(如用户名、密码、允许访问的服务等)
vim编辑的内容如下:
# Secrets for authentication using CHAP
# client server secret IP addresses
testvpn * testvpn *
配置 pppd 选项
创建 options.xl2tpd 文件,配置 pppd(点对点协议守护进程)的选项。这些选项包括接受本地和远程 IP 地址分配、禁用压缩控制协议、要求客户端认证等。
命令如下:
vim options.xl2tpd # 使用 vim 编辑器打开 xl2tpd 服务的 PPP 选项配置文件(该文件用于设置 L2TP 连接中 PPP 协议的相关参数,如 IP 地址分配、DNS 服务器、认证方式等)
vim编辑内容如下:
ipcp-accept-local
ipcp-accept-remote
noccp
auth
4. 配置 xl2tpd
创建 xl2tpd 配置文件
创建 xl2tpd.conf 配置文件,设置 L2TP 网络服务器(LNS)的参数。配置包括监听端口、IP 地址范围、认证要求、PPP 选项文件路径等。
命令如下:
cd /etc/xl2tpd/ # 进入 xl2tpd 服务的主配置目录
vim xl2tpd.conf # 使用 vim 编辑器打开 xl2tpd 服务的主配置文件(用于配置 L2TP 服务的核心参数,如监听端口、隧道设置、PPP 配置文件路径等)
vim编辑内容如下:
[global]
port = 1701
listen-addr = 192.168.0.213
[lns default]
ip range = 192.168.1.100-192.168.1.200
local ip = 192.168.1.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
【注意事项】
listen-addr 应设置为服务端的 IP 地址
ip range 指定分配给客户端的 IP 地址范围
local ip 指定 LNS 的本地 IP 地址
启用认证提高安全性
pppoptfile 路径必须正确指向 PPP 选项文件
添加 xl2tpd 的运行目录的执行权限
chmod +x /run/xl2tpd # 为 /run/xl2tpd 目录添加可执行权限(确保进程可访问该目录,通常用于存放 xl2tpd 运行时的临时文件或进程 PID 等)
ls -ld /run/xl2tpd # 查看 /run/xl2tpd 目录的详细权限信息(确认权限设置是否生效,此处显示为 drwxr-xr-x,即所有者、组用户、其他用户均有读和执行权限,所有者额外有写权限)
启动客户端 xl2tpd 服务
命令如下:
systemctl enable xl2tpd # 设置 xl2tpd 服务开机自启动(确保系统重启后 L2TP 服务能自动运行)
systemctl start xl2tpd # 启动 xl2tpd 服务(使 L2TP 相关配置生效,开始监听并处理 L2TP 隧道连接请求)
systemctl status xl2tpd # 查看 xl2tpd 服务的当前状态(如是否激活、运行状态、最近日志等,验证服务是否正常启动)
结果如下:
[root@localhost ppp]# systemctl enable xl2tpd
Created symlink /etc/systemd/system/multi-user.target.wants/xl2tpd.service → /usr/lib/systemd/system/xl2tpd.service.[root@localhost xl2tpd]# systemctl start xl2tpd
[root@localhost xl2tpd]# systemctl status xl2tpd
● xl2tpd.service - Level 2 Tunnel Protocol Daemon (L2TP)
Loaded: loaded (/usr/lib/systemd/system/xl2tpd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2025-08-26 16:50:53 CST; 2s ago
Process: 2130 ExecStartPre=/sbin/modprobe -q l2tp_ppp (code=exited, status=0/SUCCESS)
Main PID: 2132 (xl2tpd)
Tasks: 1 (limit: 20421)
Memory: 336.0K
CGroup: /system.slice/xl2tpd.service
└─ 2132 /usr/sbin/xl2tpd -D8月 26 16:50:53 localhost.localdomain systemd[1]: Starting Level 2 Tunnel Protocol Daemon (L2TP)...
8月 26 16:50:53 localhost.localdomain systemd[1]: Started Level 2 Tunnel Protocol Daemon (L2TP).
8月 26 16:50:53 localhost.localdomain xl2tpd[2132]: xl2tpd[2132]: Not looking for kernel SAref support.
8月 26 16:50:53 localhost.localdomain xl2tpd[2132]: xl2tpd[2132]: Using l2tp kernel support.
8月 26 16:50:53 localhost.localdomain xl2tpd[2132]: xl2tpd[2132]: xl2tpd version xl2tpd-1.3.16 started on localhost.localdomain PID:2132
8月 26 16:50:53 localhost.localdomain xl2tpd[2132]: xl2tpd[2132]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
8月 26 16:50:53 localhost.localdomain xl2tpd[2132]: xl2tpd[2132]: Forked by Scott Balmos and David Stipp, (C) 2001
8月 26 16:50:53 localhost.localdomain xl2tpd[2132]: xl2tpd[2132]: Inherited by Jeff McAdams, (C) 2002
8月 26 16:50:53 localhost.localdomain xl2tpd[2132]: xl2tpd[2132]: Forked again by Xelerance ( www.xelerance.com ) (C) 2006-2016
8月 26 16:50:53 localhost.localdomain xl2tpd[2132]: xl2tpd[2132]: Listening on IP address 0.0.0.0, port 1701
[root@localhost xl2tpd]#
【注意事项】
确保 xl2tpd 服务在 ipsec 服务之后启动
验证服务是否正确监听配置的 IP 地址和端口
检查防火墙是否允许 UDP 端口 1701 的流量
如服务启动失败,查看日志文件获取详细信息
可以使用 netstat 或 ss 命令检查端口监听状态
三、客户端配置
1. 安装相关软件包
客户端需要安装与服务端相同的软件包,包括 libreswan、xl2tpd、ppp 等。使用 rpm -Uvh 命令安装所有相关软件包。
[root@localhost ~]# cd /root/ipsec_over_l2tp/
[root@localhost ipsec_over_l2tp]# ls
initscripts-10.17-3.oe2203sp4.x86_64.rpm libreswan-help-4.15-1.oe2203sp4.x86_64.rpm tcpdump-4.99.3-4.oe2203sp4.x86_64.rpm
ldns-1.7.0-28.oe2203sp4.x86_64.rpm network-scripts-10.17-3.oe2203sp4.x86_64.rpm xl2tpd-1.3.16-1.oe2203sp4.x86_64.rpm
libreswan-4.15-1.oe2203sp4.x86_64.rpm ppp-2.4.9-8.oe2203sp4.x86_64.rpm
[root@localhost ipsec_over_l2tp]# rpm -Uvh *.rpm
警告:initscripts-10.17-3.oe2203sp4.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID b675600b: NOKEY
2. 配置 IPsec
客户端 IPsec 配置与服务端类似,需要创建配置文件和密钥文件,并设置适当的权限。
[root@localhost ipsec_over_l2tp]# cd /etc/ipsec.d/
[root@localhost ipsec.d]# touch testipsec.conf
[root@localhost ipsec.d]# touch testipsec.secrets
[root@localhost ipsec.d]# chmod 600 testipsec.secrets
写入客户端 IPsec 配置
客户端 IPsec 配置与服务端的主要区别是 right 参数指定了服务端的 IP 地址(192.168.0.213),而不是使用 % any。其他参数如加密算法、DPD 设置等应与服务端保持一致。
写入命令:
vim testipsec.conf
写入内容:
conn testipsec
authby=secret
pfs=no
auto=add
rekey=no
left=%defaultroute
right=192.168.0.213
type=transport
leftprotoport=17/1701
rightprotoport=17/1701
dpddelay=30
dpdtimeout=70
dpdaction=clear
ikev2=never
ike=aes256-sha1;modp2048
phase2alg=aes256-sha1
【注意事项】
right 参数必须指定服务端的正确 IP 地址
所有加密和认证参数必须与服务端完全一致
DPD 超时时间可以适当延长,提高稳定性
确保 leftprotoport 和 rightprotoport 设置正确
禁用 IKEv2 确保与服务端兼容性
写入客户端密钥文件
客户端密钥文件与服务端完全相同,使用相同的预共享密钥。
写入命令:
vim testipsec.secrets
写入内容:
%any %any : PSK "testipsec123456"
启动客户端 IPsec 服务
启动客户端 IPsec 服务,与服务端配置类似
启动命令:
systemctl enable ipsec
systemctl start ipsec
systemctl status ipsec
启动结果:
[root@localhost ipsec.d]# systemctl enable ipsec
Created symlink /etc/systemd/system/multi-user.target.wants/ipsec.service → /usr/lib/systemd/system/ipsec.service.
[root@localhost ipsec.d]# systemctl start ipsec
[root@localhost ipsec.d]# systemctl status ipsec
● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec
Loaded: loaded (/usr/lib/systemd/system/ipsec.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2025-08-26 16:43:00 CST; 3s ago
Docs: man:ipsec(8)
man:pluto(8)
man:ipsec.conf(5)
Process: 1751 ExecStartPre=/usr/libexec/ipsec/addconn --config /etc/ipsec.conf --checkconfig (code=exited, status=0/SUCCESS)
Process: 1753 ExecStartPre=/usr/libexec/ipsec/_stackmanager start (code=exited, status=0/SUCCESS)
Process: 1992 ExecStartPre=/usr/sbin/ipsec --checknss --nssdir /etc/ipsec.d (code=exited, status=0/SUCCESS)
Process: 2001 ExecStartPre=/usr/sbin/ipsec --checknflog (code=exited, status=0/SUCCESS)
Main PID: 2012 (pluto)
Status: "Startup completed."
Tasks: 3 (limit: 20421)
Memory: 10.6M
CGroup: /system.slice/ipsec.service
└─ 2012 /usr/libexec/ipsec/pluto --leak-detective --config /etc/ipsec.conf --nofork
3. 配置 pppd
创建 options.test 文件,配置客户端 PPP 选项。这些选项包括接受 IP 地址分配、拒绝 EAP 认证、要求 MSCHAPv2 认证、设置 MTU/MRU 大小、使用默认路由等。
创建 PPP 选项文件
写入命令:
vim options.test
写入内容
[root@localhost ppp]#
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth
idle 1800
mtu 1200
mru 1200
defaultroute
noipdefault
usepeerdns
debug
connect-delay 5000
name testvpn
password testvpn
【注意事项】
用户名和密码必须与服务端 chap-secrets 配置一致
mtu 和 mru 设置为 1200 可以避免某些网络环境中的分片问题
defaultroute 会将 虚拟专用网络 设置为默认路由,所有流量通过 虚拟专用网络 传输
usepeerdns 允许从 虚拟专用网络 服务器获取 DNS 配置
启用 debug 有助于问题排查,但在生产环境中应禁用
4. 配置 xl2tpd
创建客户端 xl2tpd 配置文件,定义 L2TP 访问 concentrator(LAC)。lns 参数指定 L2TP 网络服务器(LNS)的 IP 地址(192.168.0.213),即 虚拟专用网络 服务端的 IP 地址。
创建客户端 xl2tpd 配置
写入命令:
vim xl2tpd.conf
写入内容:
[lac testl2tp]
lns = 192.168.0.213
ppp debug = yes
pppoptfile = /etc/ppp/options.test
【注意事项】
lns 参数必须指定服务端的正确 IP 地址
pppoptfile 路径必须正确指向 PPP 选项文件
可以配置多个 LAC 连接不同的 虚拟专用网络 服务器
确保配置文件格式正确,注意缩进和语法
启动客户端 xl2tpd 服务
启动客户端 xl2tpd 服务,与服务端配置类似。
命令如下:
systemctl enable xl2tpd
systemctl start xl2tpd
systemctl status xl2tpd
结果如下:
[root@localhost xl2tpd]# systemctl enable xl2tpd
Created symlink /etc/systemd/system/multi-user.target.wants/xl2tpd.service → /usr/lib/systemd/system/xl2tpd.service.
[root@localhost xl2tpd]# systemctl start xl2tpd
[root@localhost xl2tpd]# systemctl status xl2tpd
● xl2tpd.service - L2TP daemon
Loaded: loaded (/usr/lib/systemd/system/xl2tpd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2025-08-26 16:45:00 CST; 1s ago
Main PID: 2200 (xl2tpd)
Tasks: 1 (limit: 20421)
Memory: 656.0K
CGroup: /system.slice/xl2tpd.service
└─2200 /usr/sbin/xl2tpd -c /etc/xl2tpd/xl2tpd.conf -p /var/run/xl2tpd/xl2tpd.pid -s /var/run/xl2tpd/l2tp-control
四、虚拟专用网络连接测试
1. 建立 IPsec 连接
使用 ipsec auto 命令手动添加和建立 IPsec 连接。--add 参数添加连接配置,--up 参数建立连接。输出显示 IKE SA 和 IPsec SA 成功建立。
命令如下:
ipsec auto --add testipsec # 将名为 testipsec 的 IPsec 连接配置添加到 IPsec 服务中(加载配置使其可被服务识别)
ipsec auto --up testipsec # 启动名为 testipsec 的 IPsec 连接(建立该配置定义的 IPsec 隧道,使连接生效)
结果如下:
[root@localhost ipsec.d]# ipsec auto --add testipsec
002 "testipsec": added IKEv1 connection
[root@localhost ipsec.d]# ipsec auto --up testipsec
002 "testipsec" #1: initiating IKEv1 Main Mode connection
102 "testipsec" #1: sent Main Mode request
104 "testipsec" #1: sent Main Mode I2
106 "testipsec" #1: sent Main Mode I3
002 "testipsec" #1: Peer ID is ID_IPV4_ADDR: '192.168.0.213'
004 "testipsec" #1: IKE SA established {auth=PRESHARED_KEY cipher=AES_CBC_256 integ=HMAC_SHA1 group=MODP2048}
002 "testipsec" #2: initiating Quick Mode IKEv1+PSK+ENCRYPT+DONT_REKEY+UP+IKE_FRAG_ALLOW+ESN_NO+ESN_YES {using isakmp#1 msgid:762ac6bf proposal=AES_CBC_256-HMAC_SHA1_96 pfsgroup=no-pfs}
115 "testipsec" #2: sent Quick Mode request
004 "testipsec" #2: IPsec SA established transport mode {ESP=>0x974aad9d <0x6f63fe50 xfrm=AES_CBC_256-HMAC_SHA1_96 DPD=active}
【注意事项】
连接建立过程包括 Main Mode 和 Quick Mode 两个阶段
检查输出中的加密算法是否与配置一致
确认 SA 成功建立
如连接失败,检查网络连通性和防火墙规则
查看日志文件获取详细的错误信息
2. 验证 IPsec 状态
使用 ip xfrm state 命令查看 IPsec 安全关联状态。输出显示了双向的 ESP 规则,包括源地址、目标地址、加密算法、认证算法等详细信息。
命令如下:
ip xfrm state # 查看 Linux 内核中当前 XFRM(IPsec 安全框架)的状态信息,包括已建立的 IPsec 安全关联(SA)、加密算法、封装模式等,用于验证 IPsec 隧道是否正常建立
结果如下:
[root@localhost ipsec.d]# ip xfrm state
src 192.168.0.213 dst 192.168.0.26
proto esp spi 0x6f63fe50 reqid 16397 mode transport
replay-window 0
auth-trunc hmac(sha1) 0xf495ebdd08e564d0d7c02b700f01319206218df2 96
enc cbc(aes) 0x7233cb78892eea0263e1d67dcec5a2cff448fd2af9785b262df546bc17b71018
anti-replay esn context:
seq-hi 0x0, seq 0x0, oseq-hi 0x0, oseq 0x0
replay_window 128, bitmap-length 4
00000000 00000000 00000000 00000000
sel src 192.168.0.213/32 dst 192.168.0.26/32 proto udp sport 1701 dport 1701
src 192.168.0.26 dst 192.168.0.213
proto esp spi 0x974aad9d reqid 16397 mode transport
replay-window 0
auth-trunc hmac(sha1) 0xc8b99225acaf8f92e23b446155af184e4d5e5156 96
enc cbc(aes) 0x97955d547ace4ecbcac24edd6dc91a7a15c824927e6407a1a01dfc5af6722f70
anti-replay esn context:
seq-hi 0x0, seq 0x0, oseq-hi 0x0, oseq 0x0
replay_window 128, bitmap-length 4
00000000 00000000 00000000 00000000
sel src 192.168.0.26/32 dst 192.168.0.213/32 proto udp sport 1701 dport 1701
【注意事项】
验证源地址和目标地址是否正确
确认加密和认证算法与配置一致
SPI 值是随机生成的,每次连接可能不同
检查选择器是否正确匹配 L2TP 流量
确保双向规则都已正确建立
3. 建立 L2TP 连接
启动 xl2tpd 服务并建立 L2TP 连接。xl2tpd -c 命令指定配置文件启动服务,echo 命令向控制文件写入 "c testl2tp" 命令,触发 L2TP 连接的建立。
xl2tpd -c /etc/xl2tpd/xl2tpd.conf
# 使用指定的配置文件(/etc/xl2tpd/xl2tpd.conf)启动 xl2tpd 服务(-c 选项用于指定配置文件路径,强制使用该文件进行初始化)
echo "c testl2tp" > /var/run/xl2tpd/l2tp-control
# 向 xl2tpd 服务的控制管道(/var/run/xl2tpd/l2tp-control)发送命令,请求建立名为 "testl2tp" 的 L2TP 连接("c" 表示 create,即创建连接)
【注意事项】
确保 IPsec 连接已成功建立
控制文件路径必须正确
“c testl2tp” 中的 “testl2tp” 对应配置文件中的 LAC 名称
连接建立可能需要几秒钟时间
如连接失败,检查 xl2tpd 日志文件
4. 验证网络接口
使用 ip a 命令查看网络接口状态。成功建立 L2TP 连接后,会创建一个新的 ppp0 接口,并分配虚拟专用网络 网段的 IP 地址。
命令如下:
ip a # 查看当前系统中所有网络接口的详细信息,包括接口名称、IP地址(IPv4/IPv6)、MAC地址、接口状态(如UP/DOWN)等,可用于验证连接是否成功分配IP
结果如下:
[root@localhost xl2tpd]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.26/24 brd 192.168.0.255 scope global noprefixroute ens3
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe12:3456/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1200 qdisc fq_codel state UNKNOWN group default qlen 3
link/ppp
inet 192.168.1.100 peer 192.168.1.1/32 scope global ppp0
valid_lft forever preferred_lft forever
【注意事项】
查找 ppp 接口(如 ppp0)确认连接成功
检查分配的 IP 地址是否在预期的网段内
验证接口状态是否为 UP
如未看到 ppp 接口,检查连接配置和日志
记录分配的 IP 地址用于后续测试
5. 测试网络连通性
使用 ping 命令测试 虚拟专用网络 连接的连通性。首先 ping 虚拟专用网络服务端的本地 IP 地址(192.168.1.1),然后 ping 服务端的物理 IP 地址(192.168.0.213),验证连接是否正常。
使用命令:
ping 192.168.1.1 # 向目标IP地址 192.168.1.1 发送ICMP回声请求包,用于测试本地主机与该目标IP之间的网络连通性
结果如下:
[root@localhost xl2tpd]# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.23 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.89 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=1.01 ms
--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.890/1.043/1.230/0.143 ms
[root@localhost xl2tpd]# ping 192.168.0.213
PING 192.168.0.213 (192.168.0.213) 56(84) bytes of data.
64 bytes from 192.168.0.213: icmp_seq=1 ttl=64 time=0.76 ms
64 bytes from 192.168.0.213: icmp_seq=2 ttl=64 time=0.65 ms
【注意事项】
测试多个目标地址,确保连接稳定性
注意 ping 的响应时间,判断网络质量
检查是否有丢包现象
如无法 ping 通,检查路由表和防火墙规则
可以使用 traceroute 命令分析路由路径
总结
本实验详细介绍了在 openEuler 22.03-LTS-SP4 系统上构建 IPsec over L2TP虚拟专用网络的完整过程,包括服务端和客户端的安装配置、连接建立和网络测试。通过使用 libreswan 实现 IPsec 协议、xl2tpd 实现 L2TP 协议,成功建立了安全的虚拟专用网络连接,实现了客户端与服务端之间的加密通信。实验采用预共享密钥认证方式,使用 AES256-SHA1 加密算法,配置了 CHAP 用户认证,最终实现了虚拟专用网络连接的成功建立和网络连通性验证。
关键注意事项
- 网络环境准备:确保服务端和客户端网络连通,关闭防火墙或配置适当规则
- 软件版本兼容性:服务端和客户端应使用相同版本的libreswan、xl2tpd 和 ppp 软件包
- 配置参数一致性:IPsec加密算法、预共享密钥、认证方式等参数在服务端和客户端必须完全一致
- 密钥安全管理:生产环境中应使用强密钥并定期更换,严格控制密钥文件权限
- 服务启动顺序:应先启动 ipsec 服务,再启动 xl2tpd 服务 连接建立顺序:必须先建立 IPsec 连接,再建立 L2TP 连接
- 网络接口验证:连接建立后应检查 ppp 接口是否正确创建并分配 IP 地址
- 故障排查方法:遇到问题时查看/var/log/secure、/var/log/messages 等日志文件
- 生产环境建议:实验环境中关闭防火墙仅为方便测试,生产环境应配置完整的防火墙规则
- 性能优化考虑:根据网络环境调整 MTU/MRU 大小,优化虚拟专用网络连接性能
想学习PPTP搭建请点击跳转:第一章 PPTP虚拟专用网络搭建实战:企业级配置指南(全流程问题详解)
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)