当前位置:首页 > 虚拟主机 > 正文

Linux下L2TP配置,怎样才算最简单的方法?

在网络管理和远程访问领域,构建一个稳定、安全的梯子隧道是至关重要的,Linux凭借其强大的网络堆栈和灵活性,成为搭建梯子服务器的理想选择,L2TP(Layer 2 Tunneling Protocol,第二层隧道协议)本身并不提供加密,因此通常与IPsec(Internet Protocol Security)结合使用,形成一个既安全又具备良好穿透性的梯子解决方案,以下将详细介绍如何在Linux系统上一步步配置L2TP/IPsec 梯子服务。

准备工作

在开始配置之前,请确保您具备以下条件:

  1. 一台拥有公网IP地址的Linux服务器(本文以CentOS 7/8和Ubuntu 20.04为例)。
  2. 拥有root权限或sudo权限的普通用户。
  3. 确保服务器内核已加载必要的L2TP模块,可以通过以下命令检查: modprobe l2tp_ppp && lsmod | grep l2tp

    如果输出包含l2tp_ppp和l2tp_core等模块,则表示已加载成功。

  4. 为了简化初始配置过程,建议临时关闭防火墙和SELinux,配置完成后再根据需要开启并设置相应规则。

安装必要软件

我们将使用xl2tpd作为L2TP守护进程,Libreswan作为IPsec守护进程,这两款软件成熟稳定,且社区支持良好。

对于基于Red Hat的系统(如CentOS, Rocky Linux):

sudo yum install epel-release -y sudo yum install xl2tpd libreswan -y

对于基于Debian的系统(如Ubuntu, Debian):

sudo apt-get update sudo apt-get install xl2tpd librewsan -y

配置IPsec (Libreswan)

IPsec负责为L2TP流量提供加密和认证。

编辑主配置文件 /etc/ipsec.conf

version 2.0 config setup protostack=netkey # 日志记录级别,调试时可设为"all" plutodebug="all" plutostderrlog=/var/log/pluto.log conn L2TP-IPsec authby=secret pfs=no rekey=no keyingtries=3 type=transport left=%defaultroute leftid=@your-梯子-server-id # 可以是公网IP或域名,需与客户端匹配 leftprotoport=17/1701 right=%any rightid=%any rightprotoport=17/%any # DPD (Dead Peer Detection) 配置,用于检测客户端是否在线 dpddelay=30 dpdtimeout=120 dpdaction=clear auto=add

  • type=transport:L2TP/IPsec使用传输模式,因为L2TP已经处理了隧道。
  • leftid:建议使用服务器的公网IP地址或一个FQDN(完全限定域名)。

设置预共享密钥 (PSK) /etc/ipsec.secrets

此文件定义了IPsec连接的认证密钥,请将your-strong-pre-shared-key替换为您自己的强密码。

Linux下L2TP配置,怎样才算最简单的方法? 第1张

%any %any : PSK "your-strong-pre-shared-key"

配置L2TP (xl2tpd)

L2TP负责建立第二层隧道并承载PPP会话。

编辑主配置文件 /etc/xl2tpd/xl2tpd.conf

[global] listen-addr = YOUR_SERVER_PUBLIC_IP # 替换为您的公网IP port = 1701 [lns default] ip range = 192.168.101.2-192.168.101.254 # 分配给梯子客户端的IP地址池 local ip = 192.168.101.1 # 梯子服务器的虚拟IP require chap = yes refuse pap = yes require authentication = yes name = l2tp-梯子-server pppoptfile = /etc/ppp/options.xl2tpd length bit = yes

配置PPP选项 /etc/ppp/options.xl2tpd

此文件定义了PPP会话的参数,如DNS、MTU等。

ipcp-accept-local ipcp-accept-remote ms-dns 8.8.8.8 ms-dns 8.8.4.4 auth crtscts idle 1800 mtu 1410 mru 1410 nodefaultroute debug lock proxyarp connect-delay 5000

  • mtu和mru设置为1410是为了适应IPsec封装后的包大小,避免分片问题。

设置梯子用户名和密码 /etc/ppp/chap-secrets

此文件存储了客户端的登录凭证。

Linux下L2TP配置,怎样才算最简单的方法? 第2张

  • 第二个表示name字段在xl2tpd.conf中定义的任何值。
  • 最后一个表示从ip range动态分配IP。

网络与防火墙设置

开启内核IP转发

编辑/etc/sysctl.conf文件,添加或修改以下行:

net.ipv4.ip_forward = 1

然后执行 sudo sysctl -p 使配置立即生效。

配置防火墙

开放L2TP/IPsec所需的端口,并设置NAT规则。

协议 端口 用途
UDP 500 IKE(密钥交换)
UDP 4500 NAT-T(NAT穿透)
UDP 1701 L2TP隧道

对于firewalld (CentOS/RHEL):

sudo firewall-cmd --permanent --add-service="ipsec" sudo firewall-cmd --permanent --add-port=1701/udp sudo firewall-cmd --permanent --add-masquerade sudo firewall-cmd --reload

对于ufw (Ubuntu):

Linux下L2TP配置,怎样才算最简单的方法? 第3张

sudo ufw allow 500/udp sudo ufw allow 4500/udp sudo ufw allow 1701/udp # 需要在 /etc/ufw/before.rules 中添加 NAT 规则

注意:UFW的NAT配置稍复杂,需在规则文件顶部添加`nat和POSTROUTING`规则。*

启动服务与验证

启动并启用服务

sudo systemctl enable ipsec xl2tpd sudo systemctl restart ipsec xl2tpd

验证IPsec状态

sudo ipsec verify

这个命令会检查IPsec配置的各个方面,确保没有问题,所有检查项都应显示为 [OK]。

检查日志

如果连接失败,查看系统日志是关键。

sudo journalctl -u ipsec -f sudo journalctl -u xl2tpd -f

至此,服务器端的L2TP/IPsec配置已全部完成,您现在可以在Windows、macOS、iOS或Android等客户端上,使用您设置的PSK、用户名和密码来连接梯子,连接成功后,客户端应获得一个168.101.x网段的IP地址,并能通过服务器访问互联网。


相关问答FAQs

问题1:客户端连接成功,也获取到了IP地址,但无法访问任何网站或外部网络,是什么原因?

解答: 这是一个典型的NAT或IP转发问题,请首先确认以下两点:

  1. IP转发是否已开启? 再次检查 /etc/sysctl.conf 中的 net.ipv4.ip_forward = 1 是否已设置并使用 sysctl -p 生效。
  2. 防火墙NAT规则是否正确? 这是导致此问题的最常见原因,请确保您的防火墙(如firewalld或iptables)已经添加了MASQUERADE(地址伪装)规则,允许从梯子客户端IP地址池(如168.101.0/24)出去的流量,其源地址被伪装成服务器的公网IP,对于firewalld,命令是 sudo firewall-cmd --permanent --add-masquerade,对于iptables,规则类似 iptables -t nat -A POSTROUTING -s 192.168.101.0/24 -o eth0 -j MASQUERADE(其中eth0是您的公网网卡)。

问题2:IPsec连接建立失败,日志中常出现“no connection named …”或“pluto busy”等错误,该如何排查?

解答: 这种错误通常指向IPsec配置本身或服务状态问题。

  1. 检查连接名称: “no connection named …” 错误意味着Libreswan无法在 /etc/ipsec.conf 文件中找到匹配的连接定义,请检查客户端发起连接时使用的连接名称(或ID)是否与服务器 ipsec.conf 中 conn L2TP-IPsec 定义的名称一致。
  2. 服务状态与重启: “pluto busy” 可能表示Libreswan守护进程(pluto)状态异常或正在处理其他连接,尝试重启IPsec服务:sudo systemctl restart ipsec,如果问题依旧,检查 journalctl -u ipsec 的详细日志,通常会给出更具体的失败原因,如密钥不匹配、网络接口问题等。
  3. 文件语法: 确认 /etc/ipsec.conf 和 /etc/ipsec.secrets 文件的语法正确无误,特别是PSK的引号、ID的格式等,使用 ipsec verify 命令也可以帮助发现一些基本的配置错误。

0