L2TP VPN 简介

L2TP 基本概念:

L2TP(Layer 2 Tunneling Protocol) VPN 是一种用于承载 PPP 报文的隧道技术,该技术主要应用在远程办公场景中为出差员工远程访问企业内网资源提供接入服务。

目的:

L2TP VPN 技术出现以后,使用 L2TP VPN 隧道“承载”PPP 报文在 Internet 上传输成为了解决上述问题的一种途径。无论出差员工是通过传统拨号方式接入 Internet,还是通过以太网方式接入 Internet,L2TP VPN 都可以向其提供远程接入服务。

L2TP VPN 的优点:

身份验证机制

支持本地认证。

支持 Radius 服务器等认证方式

多协议传输

L2TP 传输 PPP 数据包,PPP 本身可以传输多协议,而不仅仅是 IP 可以在 PPP 数据包内封装多种协议

计费认证地址分配

可在 LAC 和 LNS 两处同时计费,即 ISP 处(用于产生账单)及企业网关(用于付费及审计)。L2TP 能够提供数据传输的出入包数、字节数以及连接的起始、结束时间等计费数据,可根据这些数据方便地进行网络计费

LNS 可放置于企业网的 USG 之后,对远端用户地址进行动态分配和管理,可支持私有地址应用

不受 NAT 限制穿越

支持远程接入

灵活的身份验证及时以及高度的安全性

L2TP 协议本身并不提供连接的安全性,但它可以依赖于 PPP 提供的认证(CHAP、PAP 等),因此具有 PP 所具有的所有安全特性。

L2TP 隧道可以与 IPSec 结合,使通过 L2TP 所传输的数据更难被攻击。

可根据特定的网络安全要求,在 L2TP 之上采用通道加密技术、端对端数据加密或应用层数据加密等方案来提高数据的安全性。

可靠性

L2TP 协议支持备份 LNS,当一个主 LNS 不可达之后,LAC 可以重新与备份 LNS 建立连接,增加了 VPN 服务的可靠性和容错性

定义

编辑 播报

第二层隧道协议(英语:Layer Two Tunneling Protocol,缩写为 L2TP)是一种虚拟隧道协议,通常用于虚拟专用网。L2TP 协议自身不提供加密与可靠性验证的功能,可以和安全协议搭配使用,从而实现数据的加密传输。经常与 L2TP 协议搭配的加密协议是 IPsec,当这两个协议搭配使用时,通常合称 L2TP/IPsec。

L2TP 支持包括 IP、ATM、帧中继、X.25 在内的多种网络。在 IP 网络中,L2TP 协议使用注册端口 UDP 1701。因此,在某种意义上,尽管 L2TP 协议的确是一个数据链路层协议,但在 IP 网络中,它又的确是一个会话层协议。

功能

编辑 播报

L2TP 协议提供了如下功能。

(1)L2TP 是用来整合多协议拨号服务至现有的 Intemet 服务提供商点。PPP 定义了多协议跨越第 2 层点对点链接的一个封装机制。特别地,用户通过使用众多技术之一(如拨号 POTS,ISDN,ADSL 等)获得第 2 层连接到网络访问服务器(NAS),然后在此连接上运行 PPP。在这样的配置中,第 2 层终端点和 PPP 会话终点处于相同的物理设备中(如 NAS)。

(2)L2TP 扩展了 PPP 模型,允许第 2 层和 PPP 终点处于不同的由包交换网络相互连接的设备中。

通过 L2TP,用户在第 2 层连接到一个访问集中器(如调制解调器池、ADSL,DSLAM 等),然后这个集中器将单独得的 PPP 帧隧道到 NAS。这样,可以把 PPP 包的实际处理过程与第 2 层连接的终点分离开来。

(3)对于这样的分离,其明显的一个好处是,第 2 层连接可以在一个(本地)电路集中器上终止,然后通过共享网络如帧中继电路或 Intermet 扩展逻辑 PPP 会话,而不用在 NAS 上终止。从用户角度看。

直接在 NAS 上终止第 2 层连接与使用 L2TP 没有什么功能上的区别。L2TP 协议也用来解决“多连接联选组分离”问题。多链接 PPP,一般用来集中 ISDNB 通道,需要构成多链接捆绑的所有通道在一个单网络访问服务器(NAS)上组合。因为 L2TP 使得 PPP 会话可以出现在接收会话的物理点之外的位置,它用来使所有的通道出现在单个的 NAS 上,并允许多链接操作,即使是在物理呼叫分散在不同物理位置的 NAS 上的情况下。

(4)L2TP 使用以下两种信息类型,即控制信息和数据信息。控制信息用于隧道和呼叫的建立、维持和清除。数据信息用于封装隧道所携带的 PPP 帧。控制信息利用 L2TP 中的一个可靠控制通道来确保发送。当发生包丢失时,不转发数据信息。

工作流程

编辑 播报

L2TP 是基于连接的协议,建立一条隧道传递 PPP 会话的过程包括两步。

(1)建立一条隧道的控制连接。

(2)根据入流 / 出流呼叫的请求,触发建立一个会话(Session)。

L2TP 隧道建立在 LAC 和 LNS 之间,由一条控制连接和至少一个 L2TP 会话组成。在一对 LAC 和 LNS 之间可以建立多条 L2TP 隧道。

L2TP 会话也建立在 LAC 与 LNS 之间,但必须在 L2TP 能够通过隧道传递 PPP 帧之前,隧道建立成功之后才能建立。会话与呼叫是一一对应的。呼叫状态由 LAC 和 LNS 维护。一条 L2TP 隧道中可以建立多个会话。

控制连接的建立包括对端的身份验证以及对端的 L2TP 版本号识别、帧类型和硬件承载能力等信息的协商交换。在控制连接的建立过程中,L2TP 的隧道验证功能是可选的,如果使用,则在 LAC 和 LNS 之间必须存在唯一的共享认证密钥。

会话连接的建立必须在隧道(控制连接)成功建立之后进行。每个会话连接对应于 LAC 和 LNS 之间的一个 PPP 数据流。与隧道的建立过程不同,会话连接的建立是有方向性的。

LAC 请求 LNS 接受一个对应于“入呼叫”的会话,或者 LNS 请求 LAC 接受一个对应于“出呼叫”的请求。

L2TP 报文头中包含隧道标识(TunnelID)和会话标识(Session ID)信息,用来标识不同的隧道和会话。隧道标识相同而会话标识不同的报文复用在同一条隧道上,隧道标识与会话标识是由对端分配的,只对接收端有意义,对发送端没有意义。

L2TP 安装

本教程基于 CentOS 7.6 系统,默认已开启防火墙,不熟悉的可以去搜索如何打开防火墙

新装 Linux 需要先安装 wget 命令

yum install -y wget 

说明:OpenVZ 系统架构的 VPS 需要支持 tun 和 ppp 模块,安装前可以用下方命令检查系统是否支持安装;

cat /dev/net/tun  # 检测是否支持TUN模块执行命令,返回结果File descriptor in bad state即可
modprobe ppp-compress-18 && echo yes  # 检测是否支持ppp模块执行命令,返回结果yes即可

下载脚本一键安装 l2tp:

wget --no-check-certificate https://raw.githubusercontent.com/teddysun/across/master/l2tp.sh  
chmod +x l2tp.sh
./l2tp.sh

使用 root 权限把上面三句命令或复制一起执行,然后按照提示输入密钥,账户,密码就行了,然后等待一两分钟安装完成; 这里可以用手机试下能不能连接成功,安卓手机用自带 V,pn 的选择 L2TP,输入服务器 IP,然后再输入账户密码就行,密钥不用输入,选择 L2TP/IPSec PSK 需要输入 IPSec PSK 预共享密钥,也就是服务端设置这个密钥;如不能连接则继续下方命令检查服务有无启动;

启动服务

service ipsec start
service x12tpd start

停止服务

service ipsec stop
service x12tpd stop

重启服务

service ipsec restart
service xl2tpd restart

分析 ipsec 的状态

ipsec verify

查看服务是否启动成功

ps -ef | grep -E "(ipsec|l2tp)"

L2TP 用户操作

l2tp -a # 新增用户
l2tp -d # 删除用户
l2tp -m # 修改现有的用户的密码
l2tp -l # 列出所有用户名和密码
l2tp -h # 列出帮助信息 

本脚本经测试可以正常连接 Windows 电脑和安卓手机,苹果手机好像不能用,不知道是配置问题还是 ios 系统问题,如按照上述教程搭建连接不上的可先检查自身端口防火墙开放,IP 有无被墙等原因。

下面说下 windows 系统连接需要注意的地方:

1、Windows 连接 l2tp 后需要手动在 l2tp 连接属性里的安全选择类型,再点击高级设置输入 psk 密钥;

2、在注册表添加以下两条信息。

同时按快捷键“Win + R”,打开“运行”窗口,输入 regedit 命令,然后点击“确定,在“注册表编辑器”中,找到以下注册表子项:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters

(1)新建 ProhibitIpSec,然后按 Enter 键。双击名称为“ProhibitIpSec”的键,将其值更改为“1”,然后点击“确定”。

(2)修改“AllowL2TPWeakCryphto”的数据数值更改为“1”,然后点击“确定”。

修改好后重启电脑就可解决部分 Windows 系统无法链接的问题。

如有错误和不足请联系站长邮箱:chaoweilangmao@qq.com

欢迎大家踊跃评论