一、L2TP介绍
1、L2TP定义
L2TP(Layer 2 Tunneling Protocol,二层隧道协议),通过公共网络(如Internet)上建立点到点的L2TP隧道,将PPP(Point-to-Point Protocol,点对点协议)数据帧封装后通过L2TP隧道传输,使得远端用户利用PPP接入公共网络后,能够通过L2TP隧道与企业内部网络通信,访问企业内部网络资源,从而为远端用户接入私有的企业网络提供了一种安全、经济且有效的方式。
L2TP是一种工业标准的Internet隧道协议,功能大致和PPP协议类似,同样可以对网络数据流进行加密。不过也有不同之处,比如PPTP要求网络为IP网络,L2TP要求面向数据包的点对点连接;PPTP使用单一隧道,L2TP使用多隧道;L2TP提供包头压缩、隧道验证,而PPTP不支持。
第二层隧道协议(L2TP)是用来整合多协议拨号服务至现有的因特网服务提供商点。PPP 定义了多协议跨越第二层点对点链接的一个封装机制。特别地,用户通过使用众多技术之一(如:拨号 POTS、ISDN、ADSL 等)获得第二层连接到网络访问服务器(NAS),然后在此连接上运行 PPP。
L2TP 扩展了 PPP 模型,允许第二层和 PPP 终点处于不同的由包交换网络相互连接的设备来。通过 L2TP,用户在第二层连接到一个访问集中器(如:调制解调器池、ADSL DSLAM 等),然后这个集中器将单独得的 PPP 帧隧道到 NAS。这样,可以把 PPP 包的实际处理过程与 L2 连接的终点分离开来。
L2TP 是一个数据链路层协议。其报文分为数据消息和控制消息两类。数据消息用投递 PPP 帧,该帧作为L2TP报文的数据区。L2TP不保证数据消息的可靠投递,若数据报文丢失,不予重传,不支持对数据消息的流量控制和拥塞控制。控制消息用以建立、维护和终止控制连接及会话,L2TP确保其可靠投递,并支持对控制消息的流量控制和拥塞控制。
2、L2TP典型组网原理
L2TP的典型组网中包括以下三个部分:
(1)、远端系统
远端系统是要接入企业内部网络的远端用户和远端分支机构,通常是一个拨号用户的主机或私有网络中的一台设备。
(2)、LAC(L2TP Access Concentrator ,L2TP访问集中器)
LAC是具有PPP和L2TP协议处理能力的设备,通常是一个当地的ISP的NAS(Network Access Server,网络接入服务器),主要用于为PPP类型的用户提供接入服务。
LAC作为L2TP隧道的端点,位于LNS和远端系统之间,用于在LNS和远端系统之间传递报文。它把远端系统收到的报文按照L2TP协议进行封装并送往LNS,同时也将LNS接收到的报文进行解封装病送往远端系统。
(3)、LNS (L2TP Network Server ,L2TP网络服务器)
LNS是具有PPP和L2TP协议处理能力的设备,通常位于企业内部网络的边缘。
LNS作为L2TP隧道的另一侧端点,是LAC通过隧道传输的PPP会话的逻辑终点。L2TP通过在公共网络中建立L2TP隧道,将远端系统的PPP连接由原来的NAS延伸到了企业内部网络的LNS设备。
3、L2TP消息类型及封装结构
L2TP协议定义了两种消息:
(1)、控制消息:
用于L2TP隧道和L2TP会话的建立、维护和拆除。控制消息的传输是可靠的,并且支持流量控制和拥塞控制。
(2)、数据消息:
用于封装PPP帧,数据消息的传输是不可靠的,若数据消息丢失,不予重传。数据消息支持流量控制,既支持对乱序的数据消息进行排序。
L2TP控制消息和L2TP数据消息均封装在UDP报文中。
4、L2TP隧道和会话
L2TP隧道是LAC和LNS之间的一条虚拟点到点连接。控制消息和数据消息都在L2TP隧道上传输。在同一对LAC和LNS之间可以建立多条L2TP隧道。每条隧道可以承载一个或多个L2TP会话。
L2TP会话复用在L2TP隧道之上,每个L2TP会话对应于一个PPP会话。当远端系统的LNS之间建立PPP会话时,LAC和LNS之间将建立与其对应的L2TP会话。属于该PPP会话的数据帧通过该L2TP会话所在的L2TP隧道传输。
5、L2TP协议的特点
(1)、灵活的身份验证机制以及高度的安全性
L2TP协议本身并不提供链接的安全性,但它可依赖于PPP提供的认证(比如CHAP、PAP等),因此具有PPP所具有的所有安全特性。
L2TP还可以与IPSec结合起来实现数据安全,使得通过L2TP所传输的数据更难被***。
(2)多协议传输
L2TP 传输PPP数据包,在PPP数据包内可以封装多种协议。
(3)、支持RADIUS服务器的认证
LAC和LNS可以将用户名和密码发往RADIUS服务器,有RADIUS服务器对用户身份进行认证。
(4)、支持内部地址分配
LNS可以对远端系统的地址进行动态的分配和管理,可支持私有地址应用(RFC 1918)。为远端系统的分配企业内部的私有地址,可以方便地址的管理并增加安全性。
(5)网络计费的灵活性
可在LAC和LNC两处同时计费,既ISP处(用于产生账单)既企业网关(用于付费及审计)。L2TP能够提供数据传输的出/入包数、字节数、字节数以及连接的起始、结束时间等计费数据,AAA服务器可根据这些数据方便地进行网络计费。
(6)、可靠性
L2TP协议支持备份LNS,当主LNS不可达之后,LAC可以与备份LNS建立连接,增加L2TP服务的可靠性。
(7)、支持由RADIUS服务器为LAC下发隧道属性
L2TP隧道采用NAS-Initiated模式时,LAC上的L2TP隧道属性可以通过RADIUS服务器来下发。此时,在LAC上只需要开启L2TP服务,并配置采用AAA远程认证方式对PPP用户进行身份验证,无需进行其他L2TP配置。
当L2TP用户拨入LAC时,LAC作为RADIUS客户端将用户的身份信息发送给RADIUS服务器。RADIUS服务器对L2TP用户的身份进行验证。RADIUS服务器将验证结果返回给LAC,并将该用户对应的L2TP隧道属性下发给LAC。LAC根据下发的隧道属性,创建L2TP隧道和会话。
6、L2TP的封装
在L2TP中,控制通道和数据通道都采用L2TP头格式,只是其中的具体的字段不同,以type位表明本消息的类型,值为1并表示此消息是控制消息,值是0表示此消息是数据消息。
L2TP头中的tunnel id字段是L2TP控制连接的标识符,也就是隧道的标识符。
使用的是UDP的端口1701
私网的ip包前面加上ppp头,ppp头前面加上L2TP头,加上udp头,加上公网的IP头。
在UDP头中,用端口1701标识这时L2TP协议。
二、L2TP隧道模式及隧道建立过程
1、两种典型的L2TP隧道模式
L2TP隧道的建立包括以下两种典型模式
(1)、NAS-Intiated
NAS-Initiated L2TP隧道的建立是由LAC(值NAS)发起L2TP隧道连接。远程系统的拨号用户通过PPPoE/ISDN拨入LAC,由LAC通过Internet向LNS发起建立隧道连接请求。拨号用户的私网地址有LNS分配;对远程拨号用户的验证与计费既可由LAC侧代理完成,也可在LNS侧完成。
(2)、Client-Initiated
Client-Initiated L2TP隧道的建立是由LAC客户(指本地支持L2TP协议的用户)发起L2TP隧道连接。LAC客户获得Internet访问权限后,可直接向LNS发起隧道连接请求,无需经过一个单独的LAC设备建立隧道。LAC客户的私网地址由LNS分配。
在Client-Initiated模式下,LAC客户需要具有公网地址,能够直接通过Internet与LNS通信。
2、L2TP隧道的建立过程
(1)、 L2TP应用的典型组网如下图:
(2)、L2TP隧道的呼叫建立流程
在此已NAS-Initiated模式的L2TP隧道为例,介绍L2TP的呼叫建立流程。
L2TP隧道的呼叫建立流程如图:
如上图所示,L2TP隧道的呼叫建立过程如下:
三、IPSec 介绍
1、IPSec定义:
IPSec(IPSecurity)是IETF制定的三层隧道加密协议,它为Internet上传输的数据提供了高质量的、可互操作的、基于密码学的安全保证。“Internet协议安全性”是一种开放标准的框架结构,通过使用加密的安全服务以确保在Internet协议(IP)网络上进行保密而安全的通讯。IPSec(Internet Protocol Security)是安全联网的长期方向。它通过端对端的安全性来提供主动的保护以防止专用网络与Internet的***。
特定的通信方之间在IP层通过加密与数据源认证等方式,提供了以下的安全服务:
(1)、数据机密性(Confidentiality):IPsec发送方在通过网络传输包前对包进行加密。
(2)、数据完整性(Data Integrity):IPsec接受方对发送方发送来的包进行认证,以确保数据在传输过程中没有被篡改。
(3)、数据来源认证(Data Authentication):IPsec在接收端可以认证发送IPsec报文的发送端是否合法。
(4)、防重放(Anti-Replay):IPsec接收方可检测并拒绝接收过时或重复的报文。
2、IPsec的协议实现
IPsec协议不是一个单独的协议,它给出了应用于IP层上网络数据安全的一整套体系结构,包括网络认证协议AH(Authentication Head,认证头)、ESP(Encapsulating Security Payload,封装安全载荷)、IKE(Internet Key Exchange,因特网密钥交换)和用于网络认证及加密的一些算法等。其中,AH协议和ESP协议用于提供安全服务,IKE协议用于密钥交换。
IPsec提供了两种安全机制:认证和加密。认证机制使IP通信的数据接收方能够确认数据发送方的真实身份以及数据在传输过程中是否遭篡改。加密机制通过对数据进行加密运算来保证数据的机密性,以防数据在传输过程中被窃听。
IPsec协议中的AH协议定义了认证的应用方法,提供数据源认证和完整性保证;ESP协议定义了加密和可选认证的应用方法,提供数据可靠性保证。
(1)AH协议
AH协议(IP协议号为51)提供数据源认证、数据完整性校验和防报文重放功能,它能保护通信免受篡改,但不能防止窃听,适合用于传输非机密数据。AH的工作原理是在每一个数据包上添加一个身份验证报文头,此报文头插在标准IP包头后面,对数据提供完整性保护。可选择的认证算法有MD5(Message Digest)、SHA-1(Secure Hash Algorithm)等。
(2)ESP协议
ESP协议(IP协议号为50)提供加密、数据源认证、数据完整性校验和防报文重放功能。ESP的工作原理是在每一个数据包的标准IP包头后面添加一个ESP报文头,并在数据包后面追加一个ESP尾。与AH协议不同的是,ESP将需要保护的用户数据进行加密后再封装到IP包中,以保证数据的机密性。常见的加密算法有DES、3DES、AES等。同时,作为可选项,用户可以选择MD5、SHA-1算法保证报文的完整性和真实性。
在实际进行IP通信时,可以根据实际安全需求同时使用这两种协议或选择使用其中的一种。AH和ESP都可以提供认证服务,不过,AH提供的认证服务要强于ESP。同时使用AH和ESP时,设备支持的AH和ESP联合使用的方式为:先对报文进行ESP封装,再对报文进行AH封装,封装之后的报文从内到外依次是原始IP报文、ESP头、AH头和外部IP头。
(3)IKE 密钥交换协议
在两个对等体之间来建立一条隧道来完成密钥交换,协商完成再用ESP和AH协议来进行封装数据。IKE动态的,周期性的在两个PEER之间更新密钥。
3、IKE原理
(1)、组成
由三个不同的协议组成:
ISAKMP:定义了信息交换的体系结构,也就是格式。
SKEME:实现公钥加密认证的机制
Oakley:提供在两个IPsec对等体间达成相同加密密钥的基本模式的机制
ISAKMP 基于UDP ,源目端口都是500
(2)、安全联盟(Security Association,简称SA)
SA是两个通信实体经协商建立起来的一种协定,它们决定了用来保护数据包安全的IPsec协议、转码方式、密钥、以及密钥的有效存在时间等等。任何IPsec实施方案始终会构建一个SA数据库(SADB),由它来维护IPsec协议,用来保障数据包安全。
SA是单向的:如果两个主机(比如A和B)正在通过ESP进行安全通信,那么主机A就需要有一个SA,即SA(OUT),用来处理外发的数据包,另外还需要有一个不同的SA,即SA(IN)用来处理进入的数据包。主机A的SA(OUT)和主机B的SA(IN)将共享相同的加密参数(比如密钥)。
SA还要根据协议来区分,如果两个主机间同时使用ESP和AH,对于ESP和AH会生成不同的SA。
SA分为两种:
IKE(ISAKMP)SA 协商对IKE数据流进行加密以及对对等体进行验证的算法(对密钥的加密和peer的认证)
IPsec SA 协商对对等体之间的IP数据流进行加密的算法
对等体之间的 IKE SA只能有一个 对等体之间的IPsec SA可以有多个。
IKE的交换模式(主动模式)
IKE的交换模式(被动模式)
(3)site-to-site ipsec×××的协商过程,分两个阶段:
要想在两个站点之间安全的传输IP数据流,它们之间必须要先进行协商,协商它们之间所采用的加密算法,封装技术以及密钥。
阶段一:在两个对等体设备之间建立一个安全的管理连接。没有实际的数据通过这个连接。这个管理连接是用来保护第二阶段协商过程的。
阶段二:当对等体之间有了安全的管理连接之后,它们就可以接着协商用于构建安全数据连接的安全参数,这个协商过程是安全的,加密的。协商完成后,将在两个站点间形成安全的数据连接。用户就可以利用这些安全的数据连接来传输自已的数据了。
(4)、ESP
ESP的概述,Encapsulationsecurity payload,用于实现数据机密性以及完整性校验。
ESP有两种模式:
传输模式:只加密IP头部以上的数据,对IP头部不进行加密(适用于GRE(通用路由协议)over IPSEC)加密地点即通信地点
隧道模式:加密原有数据包,再加入新的头部 加密地点非通信地点。
四、环境准备
1、服务器:
操作系统:CentOS Linux release 7.5.1804(Core)
IP地址:172.28.8.192
2、客户端:
windows 7 操作系统
windows10 操作系统
五、安装服务
1、查看主机是否支持pptp,返回结果为yes表示通过
modprobe ppp-compress-18 && echo yes
2、是否开启了TUN
有的虚拟机需要开启,返回结果为 cat:/dev/net/tun:File descriptor in bad state. 表示通过。
cat /dev/net/tun
3、查看IP地址信息
ip addr
4、安装需要的插件
yum install -y vim
yum install -y wget
yum install -y net-tools
5、更新epel
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
6、跟新源列表
yum repolist
yum -y update
7、使用脚本安装
在网上可以下载已经写好的自动化脚本,直接运行自动化脚本即可,在下面我们会具体介绍脚本的配置内容在此需要把脚本下载到服务器,运行下载好的脚本并配置自己的账号、密码、IP和客户端IP地址。
(1)下载脚本
浏览器打开: https://github.com/BoizZ/PPTP-L2TP-IPSec-×××-auto-installation-script-for-CentOS-7
(2)想下载的自动脚本压缩包解压
(3)上传脚本至服务器
ls
(4)、给运行脚本赋值权限
chmod +x ***-script-for-centos7.sh
ll
(5)、运行脚本
sh ***-script-for-centos7.sh
确定获取的IP地址是不是服务器的IP地址 如果是的话 直接回车。
输入完信息 ,然后开始自动安装
安装完,会显示安装和设置的配置信息:
8、具体安装和配置步骤
(1)安装epel源
yum install -y epel-release
提示已安装。
(2)、安装依赖组件
yum install -y openswan
yum install -y ppp pptpd xl2tpd wget
(3)、修改配置文件
vim /etc/ipsec.conf
(4)、设置预共享密钥配置文件
vim /etc/ipsec.secrets
设置的PSK密码为:password
(5)、配置xl2tpd.com文件
vim /etc/xl2tpd/xl2tpd.conf
(6)、配置 options.xl2tpd 文件
vim /etc/ppp/options.xl2tpd
(7)、创建chap-secrets配置文件,即用户列表及密码
vim /etc/ppp/chap-secrets
9、系统配置
(1)、允许IP转发
vim /etc/sysctl.conf
(2)、允许防火墙端口
创建文件/usr/lib/firewalld/services/l2tpd.xml 并修改
vim /usr/lib/firewalld/services/l2td.xml
10、初始化并重启防火墙
firewall-cmd --reload
11、启动并设置开机自启动服务
systemctl enable pptpd ipsec xl2tpd
systemctl restart pptpd ipsec xl2tpd
六、问题解决
按照以上的配置方法,使用客户端测试连接性,发现不能正常连接,现在下面进行具体解决方法
1、测试ipsec的安装
ipsec verify
3、添加防火墙列表
firewall-cmd --zone=public --add-port=1701/tcp --permanent
firewall-cmd --zone=public --add-port=4500/tcp --permanent
firewall-cmd --zone=public --add-port=500/tcp --permanent
systemctl restart firewalld.service
4、iptables 转发规则
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE
iptables -I FORWARD -s 10.0.1.0/24 -j ACCEPT
iptables -I FORWARD -d 10.0.1.0/24 -j ACCEPT
/sbin/iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
/sbin/iptables -A INPUT -p udp -m udp --dport 1701 -j ACCEPT
/sbin/iptables -A INPUT -p udp -m udp --dport 500 -j ACCEPT
/sbin/iptables -A INPUT -p udp -m udp --dport 4500 -j ACCEPT
/sbin/iptables -A INPUT -p esp -j ACCEPT
/sbin/iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT
/sbin/iptables -A FORWARD -d 10.0.1.0/24 -j ACCEPT
/sbin/iptables -A FORWARD -s 10.0.1.0/24 -j ACCEPT
/sbin/iptables -A FORWARD -i ppp+ -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
5、vim /etc/ipsec.d/linuxcc_l2tp.secrets
6、防火墙列表配置
firewall-cmd --add-port=1701/udp
firewall-cmd --add-port=500/udp
firewall-cmd --add-port=4500/udp
firewall-cmd --list-ports
7、设置端口转发机制
iptables --table nat --append POSTROUTING --jump MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.0.1.0/24 -j ACCEPT
iptables -A INPUT -i eth0 -p esp -j ACCEPT
8、开启iptables 端口
iptables -A INPUT -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -p udp --dport 500 -j ACCEPT
9、经过以上的排除,终于能够通过账号连接成功了,但是又出现新的问题了 ,能够访问内部网络了,不能访问互联网,查了很多资料,测试了很多次,发现是服务器iptables防火墙的问题。
因为centos7默认没有安装iptables服务,在此需要安装iptables服务
yum install -y iptables-services
安装完iptables以后,下面就要对iptables防火墙策略进行配置了
下面是我对iptables的配置,最主要的就是允许内部获取的网络地址可以通过eth0口访问网络
/sbin/iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
/sbin/iptables -A INPUT -p udp -m udp --dport 1701 -j ACCEPT
/sbin/iptables -A INPUT -p udp -m udp --dport 500 -j ACCEPT
/sbin/iptables -A INPUT -p udp -m udp --dport 4500 -j ACCEPT
/sbin/iptables -A INPUT -p esp -j ACCEPT
/sbin/iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT
/sbin/iptables -A FORWARD -d 10.0.1.0/24 -j ACCEPT
/sbin/iptables -A FORWARD -s 10.0.1.0/24 -j ACCEPT
/sbin/iptables -A FORWARD -i ppp+ -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
service iptables save
systemctl stop firewalld
iptables --table nat --append POSTROUTING --jump MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.0.1.0/24 -j ACCEPT
iptables -A INPUT -i eth0 -p esp -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -p udp --dport 500 -j ACCEPT
service iptables save
通过以上的配置 输入服务器的内网IP地址 ,可以连接成功,但是非公司网络,输入公司公网IP不能正常访问,然后进行进一步排查。
10、不能通过公网IP地址访问 ,需要通过公司的路由器网关做服务器端口映射,将公司的公网IP对应的1701 4500 500 端口 使用udp协议映射到内网l2tp服务的IP地址(172.28.5.201)的端口 1701 4500 500 ,使用udp协议。
七、客户端验证:
1、windows 10 操作系统客户端验证
(1)点击windows10 的“设置”-然后点击“网络和Internet”
(2)、点击“***”选择中,然后点击“***”连接
(3)弹出的对话框,填写相应的信息:
(4)、下面要对刚建立的l2tp进行简单的配置:
点击“以太网”,然后点击“更改适配器选项”
(5)设置完成后,然后进行连接
如果显示已连接,这表示连接成功。
(6)、测试访问内网是否成功
ping 服务器内网IP地址
2、windows7 客户端连接测试
(1)、右击桌面右下角网络图标,然后打开“网络和共享中心”。在打开的界面点击“设置新的连接或网络”
(3)、在弹出的页面中点击“连接到工作区”,点击下一步,然后再弹出的界面选择“使用我的Internet连接(×××)”:
(4)、然后再Internet地址中输入L2tp的IP地址,名称可自定义,然后点击下一步,输入账号密码,也可在后续连接时输入:
(5)、点击“跳过”按钮,然后在“网络和共享中心”点击左侧的“更改适配器设置”:
(6)然后进行简单的配置,如下图:
(7)、点击上图中的“高级设置”,在弹出的界面选择“使用预共享的密钥作身份验证”并输入密钥,然后点击“确定”,
(8)、选择刚刚创建的L2tp连接,然后进行连接:
(9)提示连接成功后,然后进行测试
本文链接:https://www.kinber.cn/post/420.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝: