L2TP_VPN和IPSec_VPN
L2TP VPN和IPSec VPN简述
L2TP VPN工作在数据链路层,L2TP其本身是不进行加密和身份校验的
IPSec VPN工作在网络层,IPSec不像OSPF那样是一个协议,IPSec是由多个协议组成的协议族
L2TP VPN的概念
L2TP VPN是一个工作在二层隧道,是通过拨号的方式来接入公网
因为其本身并没有加密机制和可靠性验证,所以一般都搭配着IPSec VPN等安全加密的方式结合起来,保证数据的完整性、真实性、私密性
由于是通过拨号上网的方式,LS2TP VPN只会针对PPP格式的数据帧进行封装,如PPPoE
L2TP VPN是通过UDP端口为1701在IP网络中传输
L2TP VPN的封装
由于L2TP VPN本质上还是VPN,而VPN的本质就是在原有的数据帧上进行封装,再到目的地进行解封装
而L2TP VPN也会将数据封装成L2TP独有的模式,是该数据被引导进入LSTP VPN或是说L2TP隧道中
L2TP VPN的场景
L2TP VPN有两种场景,分为NAS-Intiated场景和Client-Intiated
NAS-Intiated是通过NAS和总部的LNS来之间来创建L2TP VPN,
NAS指的是网络接入设备,即拨号设备的前置设备,同时NAS设备在L2TP中也被称为LAC端
总部LNS指的是总部的VPN设备,如下图
出差员工或分公司通过拨号到NAS,由NAS将数据进行L2TP格式的,通过LSTP VPN到总部LNS,再由总部LNS将LSTP格式的数据解封装为正常数据转发到总部内
Client-Intiated场景是出差员工或分公司到总部LNS直接建立一条LSTP VPN,使得出差员工直接拨号到总部LNS
L2TP的配置过程
L2TP的配置过程
①配置IP和路由协议
②client端与LAC的接口开启PPP拨号上网功能
③在LAC上使能VPDN,VPDN是一种虚拟专用拨号网络,专门建立允许用户通过公网一个临时的、直接的连接到内部的网络
④总部LNS使能VPDN,配置LNS地址池等参数
在实际的生产中,NAS的配置都是在ISP中进行配置的,我们在公司中只需要进行LNS的配置即可
L2TP重点配置:LNS端的配置
使能VDPN
R1(config)#vpdn enable
创建出virtual-vpdn接口,virtual-vpdn接口类似于lookback接口,起到创建出另一个独立的网络的作用,由于eve-ng模拟器没有关于virtual-vpdn的命令,所以我们使用Virtual-template来代替
R1(config)#int virtual-template 1
R1(config-if-Virtual-Template 1)#ex
创建vpdn组,在vpdn组中我们可以通过配置接收拨入请求,来定义建立L2TP VPN的相关内容,如L2TP VPN本地的出口地址、使用哪一个独立网络(如lookback,virtual-vpdn,virtual-template等)
接收拨入请求就是配置隧道服务器(如总部LNS)接收来自网络接入服务器(如NAS)的拨入请求
R1(config)#vpdn-group 1
R1(config-vpdn)#source-ip 12.1.1.2 //定义总部VPN设备(即LNS)的出口地址,也是NAS的目的地址
R1(config-vpdn)#accept-dialin //配置定义接收拨入请求
R1(config-vpdn-acc-in)#protocol l2tp //定义隧道协议为l2tp
R1(config-vpdn-acc-in)#virtual-template 1 //采用virtual-template 1接口的私有网络
R1(config-vpdn)#l2tp tunnel authentication //使L2TP VPN采用认证的方式
R1(config-vpdn)#l2tp tunnel password ruijie //认证的密钥为ruijie
配置LNS的地址池和用户信息,就是配置总部中哪些用户需要上网
但不知道为什么,在锐捷的官方pdf中和模拟器上的配置有所出入,以下就是锐捷官方给出来的配置
R1(config)#vpdn pool test 100.1.1.1 100.1.1.100
R1(config)#username test password test
以下是实际配置中可以配的出来的命令
R1(config)#ip local pool test 100.1.1.1 100.1.1.100 //配置哪些用户需要使用LSTP,后续在进行绑定
R1(config)#username test password test //用户进入L2TP VPN需要进行认证的用户名和密码
配置LNS的virtual-template接口,因为上面配置vpdn-group时已经使得virtual-template 1使用L2TP VPN中了,所以我们配置virtual-template 1,就相当于配置在LNS上L2TP VPN的接口一样
R1(config)#interface virtual-template 1
R1(config-if-Virtual-Template 1)#ppp authentication chap //采用chap认证的方式
R1(config-if-Virtual-Template 1)#peer default ip add pool test //关联地址池test
R1(config-if-Virtual-Template 1)#ip add 10.1.1.1 24
IPSec VPN概念
IPSec并不是一个单一的协议,而是由多个协议组成的协议族
IPSec本身的目的就是为了数据在传输时的安全通信
IPSec VPN就是使用IPSec协议来创建一条数据传输时安全加密的通道
因为涉及到安全,那么肯定就少不了加/解密算法
加密算法可分为三种:1、对称加密算法,2、非对称加密算法,3、散列算法
对称加密算法
对称加密算法,两端加密和解密的key值都是一样的
优点是速度快,但是并不安全
非对称加密算法
非对称加密算法的核心有两个,1、公钥时公开的,谁都有目标的公钥,私钥是自由直接才有的
2、公钥加密私钥解,私钥加密公钥解
这样看下来,如果是两端进行通信,那么其中一端就会拥有三种密钥,以PC1为例子
PC1上有PC1的公钥、PC1的私钥、PC2的公钥
由于在每一端设备上有三种密钥,所以就产生出了三种的加密方式
由于有点复杂,所以这种方式比较慢,但是安全
1、PC1的公钥加密,PC2没有PC1的私钥,解密不出来,所以这种方式被淘汰掉了
2、PC1私钥加密,PC2使用PC1的公钥加密,但是谁都有PC1的公钥,这样就使得信息不安全
3、PC2的公钥加密,PC2使用PC2的私钥机密,由于PC2的私钥只有PC2才有,所以这种方法也是正在使用的
对称+非对称
由于对称加密算法快,但不安全,而非对称加密算法慢,但安全
在真实的数据传输中,我们想到了一个折中的想法,就是对称加密算法和非对称加密算法合并起来使用
因为对称加密算法的缺点是key值相同,并且容易被截取到
所以我们可以采用非对称加密算法去加密对称加密算法的key值,使得key值在网络中安全传输
而最终,真正的数据还是由对称加密算法进行加密传输
散列算法
散列算法最主要的用途就是防止数据在传输的过程中被修改,通过对如hash运算出来的MD5值进行对比,发现哪些数据在传输过程中被篡改
但是散列算法的方式是加密的,也就是说,Hello这个信息经过hash运算之后,得到的MD5值,MD5值不能再将通过散列算法变成Hello
即散列算法一旦变了,就变不回来了
IPSec安全协议
我们上述说的三种算法,IPSec都会进行使用
对称加密算法和非对称加密算法用来加密数据,散列算法用来校验数据的完整性
IPSec并不是指一个协议,而是由多个协议组成的协议族
在IP网络传输中,IPSec可以用来保证数据的三大性
1、私密性,2、完整性,3、真实性
①私密性可以用对称/非对称算法实现,②完整性可以用散列算法进行实现,③真实性可以在IPSec中配置与共享密钥进行实现
另外还有DH1,DH2,DH5,DH14等算法实现密钥的安全性
既然被称作IPSec,所以IPSec协议只能用在IP层上,并且IPSec的乘客协议和承载协议都只能是IP协议
在IPSec协议中,最常用的协议就是AH协议和ESP协议
AH协议:只能对数据进行摘要,但是不能实现数据的加密,所以不能实现数据的私密性,只能够保证数据的完整性和真实性
ESP协议:私密性、完整性和真实性都能实现,即能够进行数据的摘要,又能够实现数据的加密
IPSec的封装模式
IPSec的封装模式分为两种,传输模式和隧道模式
1、传输模式:不会新增IP头,主要的场景在内网中构建IPSec VPN,主机与主机之间的通信也实现安全保密性
2、隧道模式:会增加新的IP头,这个新的IP头一般都是公网IP,因为隧道模式的场景一般都用于私网与私网之间,其中需要跨公网进行数据通信
IPSec的协议+封装模式
IPSec VPN的构成是由AH或ESP加上传输模式或隧道模式构成的,所以IPSec VPN由四种情况
①AH+传输模式:这种方式只有对数据的摘要,并没有对数据进行加密,适用于普通内网内部的传输
②ESP+传输模式:对数据进行了摘要和加密,在内网中也实行安全策略
③AH+封装模式:只有对数据的摘要,没有对数据的加密,通过新增了一个公网IP头,在公网中进行传输,可想而知,数据的安全性得到了威胁
④ESP+封装模式:满足了数据的摘要和加密,因为新增了一个公网IP头,所以在公网传输的过程当中,数据得到了保密
SA(安全关联)的概念
IPSec VPN本质上还是个VPN,需要两个VPN实体进行创建,而在创建IPSec VPN的过程中,两个实体之间需要约定创建IPSec VPN是用什么方式,如IPSec协议是用AH还是ESP,封装模式是用传输模式是用隧道模式
而这种约定就被称为SA,安全关联
由于SA是单向的,所以IPSec VPN的组成,需要使用到两个SA,一个入方向的SA,和一个出方向的SA,两个SA组成了SA束
SA的产生方式有两种,1、手动配置,需要由管理员一个一个定义SA中的内容,特别的麻烦,但是没有生命周期,一旦配上去,除非删除,那么就永久生效
2、IKE自动管理,由IPSec VPN实体之间互相自身信息,能够做到动态建立、维护和删除SA,但是这样创建SA是存在生命周期的。在站点与站点之间,若是有需要创建IPSec连接,那么IPSec将会立即启动IKE来协商出SA
IKE和ISAKMP
IKE,互联网密钥交换协议,用于动态建立、维护和删除SA
IKE是一种混合型的的协议,建立在ISAKMP框架之上,实现了两种密钥管理协议Oakley和SKEME
Oakley:使用公钥加密的加密方式,只是为了提供认证的机制,其它的什么都不管
SKEME:在两个IPSec对等体之间达成相同的加密密钥的基本模式
ISAKMP,互联网安全联盟密钥管理协议:定义了协商、建立、删除和修改SA的过程以及包格式,与IKE一个意思
IPSec的工作原理
IPSec实体之间的IKE协商主要分为两个阶段,第一阶段和第二阶段
第一阶段是建立ISAKMP SA,也被称为IKE SA
第二阶段是建立IPSec SA,主要目的是为了给IP数据提供安全保护的
在IPSec VPN中主要使用什么进行传输(如,AH还是ESP,传输模式还是封装模式)是在第二阶段才协商出来的,而第一阶段会产生出密钥从而保护第二阶段的内容的安全
在第一阶段中,消息的交互有两种模式可以选择,主模式和野蛮模式
主模式共发出6个包进行ISAKMP SA的建立,而野蛮模式通过对主模式的6个包压缩成3个包进行ISAKMP SA的建立,在6个包中,每2个包分为不同的功能
可想而知,主模式虽然慢,但是安全。而野蛮模式,虽然快,但是并不太安全
在第二阶段中,消息交互就只有一个模式,快速模式:发出三个ISAKMP包
IPSec VPN场景介绍
如下图,内网1和内网2分别通过R1和R2接入公网,通过在R1和R2之间建立静态IPSec VPN,使得传输的数据进行加密
IPSec配置流程
1、配置R1和R2能够正常地访问互联网,并且R1与R2之间能够ping通。不要对IPSec VPN有一种误解,IPSec VPN也是建立在TCP通的基础之上,再进行数据加密。即先保证能够通信,再达到安全的目的
2、再R1和R2上分别配置IPSec感兴趣流、isakmp策略、与共享密钥、IPSec加密转换集、IPSec加密图,再将加密图应用在接口上
3、在R1和R2上配置路由,使得内网1/内网2的外网出口指向R1/R2
以下就以R1配置IPSec VPN作为例子
先配置IPSec VPN感兴趣流,用于定义哪些流量是去走IPSec隧道,哪些流量去走正常的公网IP转发
R1(config)#access-list 101 permit ip 192.168.0.0 0.0.0.255 192.168.1.0 0.0.0.255
配置SA
先配置第一阶段,ISAKMP SA
配置IPSec DPD探测功能,IPSec DPD就是死亡对等体的检测,因为使用IKE建立SA是有存活周期的,所以需要在定期时间内检测SA的存活时间
R1(config)#crypto isakmp keepalive 5
创建ISAKMP的规则,在规则视图内,可以配置ISAKMP策略,如认证方式、加密算法等,但一定要记住,在ISAKMP中配置的并不是最终使用的,而是用来保护第二阶段的,这里只指定身份认证的方式为与共享密钥
另外group表示定义DH算法,如DH1、DH2、DH5等
可选的加密算法和hash运算如下
R1(config)#crypto isakmp policy 1
R1(isakmp-policy)#authentication pre-share //身份认证方式使用与共享密钥的方式
刚刚指定完与与共享密钥之后,还需进行与共享密钥的配置,才能使其生效
在key后面有0和7两种选择,其中0表示后面输入的密码不会加密,而7表示后面输入的密码将会被隐藏起来
最后的IP地址为IPSec VPN对端的VPN出接口IP地址
当然,一旦敲下这条命令,就表示着IPSec VPN对端也要敲入密钥为ruijie才能成功完成第一阶段ISAKMP SA的协商
R1(config)#crypto isakmp key 0 ruijie address 10.10.2.1
下面就开始配置第二阶段,IPSec SA的协商了
先要配置IPSec加密转换集,IPSec加密转换集被用于指定IPSec VPN中是使用AH还是ESP协议与封装模式是传输模式还是隧道模式,很明显,我们使用ESP协议最为安全,并且该场景是跨公网需要使用隧道模式,另外还需要指定在VPN中的加密算法和摘要算法,如下,des为一种加密算法,MD5又为一种摘要算法
R1(config)#crypto ipsec transform-set myset esp-des esp-md5-hmac
//myset为加密转化集的名字
配置IPSec加密图,IPSec加密图用于将刚刚配置的信息(如加密转换集,IPSec邻居,感兴趣流等)都与IPSec VPN进行一个绑定的操作
使用set指定IPSec VPN使用时的前提,使用match绑定感兴趣流
R1(config)#crypto map mymap 5 ipsec-isakmp //mymap为加密图的名字
R1(config-crypto-map)#set peer 10.10.2.1 //指定IPSec对端邻居
R1(config-crypto-map)#set transform-set myset //指定加密转换集为myset
R1(config-crypto-map)#match address 101 //匹配感兴趣流为ACL101
ipsec-isakmp:指定使用IKE/ISAKMP建立IPSec的SA协商关联
ipsec-manual:指定使用手动的方式建立IPSec的SA协商关联
最后,将加密图应用到IPSec VPN的出接口
R1(config)#int g0/0
R1(config-if-GigabitEthernet 0/0)#no switchport //有时需要我们将二层接口转换为三层接口
R1(config-if-GigabitEthernet 0/0)#crypto map mymap //匹配加密图为mymap
我们可以通过查看IPSec SA的协商情况来判断是否配置成功
R1(config)#show crypto ipsec sa
IPSec VPN实验
目的:通过IPSec VPN,实现PC4到PC5的通信
在网络中,万事都要先配IP
R1
R1(config)#int g0/0
R1(config-if-GigabitEthernet 0/0)#no sw
R1(config-if-GigabitEthernet 0/0)#ip ad 192.168.1.1 24
R1(config-if-GigabitEthernet 0/0)#ex
R1(config)#int g0/1
R1(config-if-GigabitEthernet 0/1)#no sw
R1(config-if-GigabitEthernet 0/1)#ip add 12.1.1.1 24
R1(config-if-GigabitEthernet 0/1)#ex
R2
R2(config)#int g0/0
R2(config-if-GigabitEthernet 0/0)#no sw
R2(config-if-GigabitEthernet 0/0)#ip add 12.1.1.2 24
R2(config-if-GigabitEthernet 0/0)#int g0/1
R2(config-if-GigabitEthernet 0/1)#no sw
R2(config-if-GigabitEthernet 0/1)#ip add 23.1.1.2 24
R3
R3(config)#int g0/0
R3(config-if-GigabitEthernet 0/0)#no sw
R3(config-if-GigabitEthernet 0/0)#ip add 23.1.1.3 24
R3(config-if-GigabitEthernet 0/0)#int g0/1
R3(config-if-GigabitEthernet 0/1)#no sw
R3(config-if-GigabitEthernet 0/1)#ip add 192.168.2.1 24
R3(config-if-GigabitEthernet 0/1)#ex
PC4
VPCS> ip 192.168.1.10 255.255.255.0 192.168.1.1
PC5
VPCS> ip 192.168.2.10 255.255.255.0 192.168.2.1
在R1和R3之间建立IPSec VPN的前提是R2和R3的公网地址能互相通信,这里由于网络拓扑的简单,我们采用直接干上默认路由的方式
R1上配置默认路由
R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
R3上配置默认路由
R3(config)#ip route 0.0.0.0 0.0.0.0 23.1.1.2
随后,就可以开始我们IPSec VPN的配置了
R1上配置IPSec VPN的感兴趣流
R1(config)#access-list 101 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.$
R3上配置IPSec VPN的感兴趣流
R3(config)#access-list 101 permit ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.$
R1的第一阶段配置
R1(config)#crypto isakmp keepalive 5
R1(config)#crypto isakmp policy 1
R1(isakmp-policy)#authentication pre-share
R1(isakmp-policy)#authentication pre-share //认证方式采用与共享密钥
R1(isakmp-policy)#encryptio 3des //加密方式设置为3des
R1(isakmp-policy)#ex
R1(config)#crypto isakmp key 0 ruijie address 23.1.1.3
R1的第二阶段配置
R1(config)#crypto ipsec transform-set myset esp-des esp-md5-hmac
R1(cfg-crypto-trans)#ex
R1(config)#crypto map mymap 5 ipsec-isakmp
R1(config-crypto-map)#set peer 23.1.1.3
R1(config-crypto-map)#set transform-set myset
R1(config-crypto-map)#match address 101
调用在R1的公网出接口上
R1(config)#int g0/1
R1(config-if-GigabitEthernet 0/1)#crypto map mymap
R3的第一阶段配置
R3(config)#crypto isakmp keepalive 5
R3(config)#crypto isakmp policy 1
R3(isakmp-policy)#authentication pre-share
R3(isakmp-policy)#encryption 3des
R3(isakmp-policy)#ex
R3(config)#crypto isakmp key 0 ruijie address 12.1.1.1
R3的第二阶段配置
R3(config)#crypto ipsec transform-set myset esp-des esp-md5-hmac
R3(config)#crypto map mymap 5 ipsec-isakmp
R3(config-crypto-map)#set peer 12.1.1.1
R3(config-crypto-map)#set transform-set myset
R3(config-crypto-map)#match address 101
调用在R3的公网出接口处
R3(config)#int g0/0
R3(config-if-GigabitEthernet 0/0)#crypto map mymap
PC4去pingPC5,查看是否能够正常通信
在R1上查看IPSec SA协商状态
R1(config)#show crypto ipsec sa