1. 引言
随着全球化的快速推进,地理位置相隔的企业需要进行私密数据的通信。然而公网的环境十分复杂,并且不安全,一旦被第三方获取私密数据将对企业造成无法挽回的损失。VPN作为能够在公共网络中建立专用数据通道的一项技术,得到了广泛的使用。企业运用VPN技术,使得地理位置不再是传输内网数据的阻碍,因为可以在公网中建立一条隧道,达到直连的效果。隧道技术,就是数据报封装技术,将一种网络协议封装进另一种网络协议中然后再进行传输,隧道技术往往包含着加密、身份认证及访问控制等一系列的措施来保证数据的安全性 [1]。隧道技术是推动VPN技术发展的关键,也是保证数据安全性的关键。为了保证隧道的安全性,通常会使用隧道协议。常见的隧道协议有GRE、LT2P、IPSec等。IPSec作为最广泛、最经典的技术方案,一直备受关注 [2] [3]。IPSec是用于保障网络安全性的协议族,其内容是在密码学的基础上发展而来的。通过AH、ESP、IKE等一系列协议来保证报文的完整性和安全性,对私密数据的传输提供了安全性保障 [4]。
为了有效保障公司网络安全,使公司总部免受来自外部公网的攻击,也为了公司总部与分布之间建立安全的网络连接,本文提出了一种基于IPSec协议的点对点VPN网络。
2. 关键技术
2.1. 隧道技术
由于公用网络的环境十分复杂,并且安全性得不到保证。企业之间通过公网直接传输私密数据十分危险,可在公用网络中架设一条“隧道”来保证数据的安全性 [5]。数据包在通过隧道与离开隧道的这段网络中,外界无法查看数据包的具体内容,从而达到数据包加密的目的。隧道除了有加密这个功能,还有模拟隧道两端直连的效果。通过封装技术,在数据包的私有目标地址前封装公有网关地址,使这个数据包能够在公网上进行传输。当这个数据包传到对端的公网网关时,网关就会将这个数据包的公网地址解封装,读取真正的私有地址的数据包,然后将数据包传输给目标网络。
2.2. IPSec协议
IPSec作为常用的VPN加密协议,为分组在网络层的安全传输提供保障。在网络层为分组形成保密字段与鉴别字段给予助力。IPSec的工作方式有两种,众所周知,一种是隧道方式,另一种则是运输方式 [6]。隧道方式与运输方式在数据加密上有着很大的区别,运输方式是在运输层的有效数据前加上IPSec的头部和尾部,然后再加上IP的首地址。隧道方式是在网络层数据包的全部内容前加上IPSec的头部和尾部,然后再将这个IP数据包与一个新的IP首部连接在一起,形成新的数据包,这个首部地址往往是隧道的虚拟地址。当使用隧道方式时,这时候分组像通过一条隧道一样。AH协议是IPSec曾经常用的协议,该协议的功能是对发送方的身份进行识别,除此之外,还能对发送方的数据是否完整进行验证,鉴别首部协议的具体内容和插入位置,由于AH不提供保密性,所以IPSec后来又定义了一个类似的协议ESP,ESP提高发送方的鉴别、完整性和保密性 [7]。
2.3. DMVPN
大量实践证明,基于VPN的安全架构对于现代分布式基础设计的建设是非常有效的。由于网络需求的不断变化,通过介质将敏感数据在互联网上进行传输时难以保证安全性,DMVPN (Dynamic Multipoint VPN)动态多点VPN能够提高传统星型网络架构的扩展性,通过IPSec等动态功能特性对信息进行安全传输,可以降低网络延迟,提高带宽利用率 [8]。可扩展性从本质上来说能够帮助网络实现扩展能力,更好地发挥网络基础设计的潜力,为多站点之间流量交换提供更小的延迟和更优的性能。
3. 网络的拓扑设计
3.1. 拓扑图
图1为运用虚拟机与模拟器实现的网络的拓扑图 [9]。研究的目的是实现点对点的VPN网络的数据加密,所以在此模拟出了三个部分的网络,分别是分公司网络、总公司网络与运营商网络。在总公司与分公司的内网中使用OSPF协议实现网络互通,运营商使用EIGRP协议进行通信。为了对比加密效果,总公司只与一个分公司的通信中采用了IPSec加密方式。
3.2. IP规划
企业网内部采用的是普通的TCP/IP协议,总公司采用的网段是10.1.0.0/16,运营商网段是172.16.0.0/16,分公司A的网段是20.1.0.0/16,分公司B的网段是30.1.0.0/16,它们的掩码均为24位。主要设备之间的IP分配如表1和表2所示。
Table 1. The IP address and type of devices
表1. 各个设备的IP地址与设备类型
Table 2. IP address assignment of VLAN
表2. VLAN IP地址分配
4. 路由器与交换机的配置
4.1. 接口参数配置
无论是路由器还是PC机,想要在网络上通信的前提是自身必须拥有IP地址,这个IP地址可以使固定的IP地址,由工作人员配置。也可以是DHCP动态获得IP地址,不失一般性,本拓扑的所有IP地址都是手动配置,如下所示:
Router(config)#int e0/0 //进入接口
Router(config-if)#no sh //开启接口
Router(config-if)#ip address 10.1.1.1 255.255.255.0//配置ip地址
Router(config-if)#exit
Router(config)#int e0/1
Router(config-if)#no sh
Router(config-if)#ip address 10.1.3.1 255.255.255.0
Router(config-if)#exi
4.2. 封装trunk和划分VLAN
对于每一个交换机而言想要进行数据的传输都需要进行VLAN的划分和trunk的封装,其配置如下所示:
Switch(config)#int e0/1
Switch(config-if)# switchport trunk encapsulation dot1q
//将接口封装成IEEE 802.1Q
Switch(config-if)# switchport mode trunk //将接口变为trunk 模式
Switch(config-if)# switchport nonegotiate //本接口不发送协商信息
Switch(config-if)#exi
Switch(config)#int e0/0
Switch(config-if)# switchport access vlan 10//将e0/0接口划入VLAN10下
Switch(config-if)# switchport mode access //将接口变为接入模式
Switch(config-if)#exi
4.3. NAT配置
对于每一个企业来说,它的内部网络地址是不可能出现在公网上的,常常需要用到NAT技术,将内部网络地址转换成一个公网的地址,这样才能够去外界实现通信。NAT的主要原理是用ACL访问控制链表来抓取内部网段,再将内部网段转换成一个公网地址。配置如下:
Router(config)#int e0/0
Router(config-if)#ip nat inside //进入接口后打上接口为nat内部的标记
Router(config-if)#int e0/3
Router(config-if)#ip nat outside //进入接口后打上接口为nat外部的标记
Router(config-if)#exi
Router(config)#access-list 1 permit 10.1.0.0 0.0.255.255
//用ACL来抓取内部网段
Router(config)#ip nat inside source list 1 interface Ethernet0/3 overload
//将这条内部网段用nat外部接口的地址(公网地址)来覆盖
4.4. 路由协议的配置
在网络中,路由分为两种:静态路由和动态路由。静态路由不会自动更新,需要工作人员手动配置路由条目,相对复杂。但是,由于静态路由相对于动态路由很稳定,适用于路由条目较少的情况,常常被用在银行等对稳定性需求高的机构。动态路由是基于路由协议的路由,这类路由在配置完协议后可以自动更新,无需工作人员进行操作,但是稳定性不如静态路由。在IGP路由协议中,RIP由于不适用于较大规模的网络而逐渐淘汰,而EIGRP作为思科专有路由协议,只能在思科的设备上配置,也没有得到很好的应用。OSPF协议作为各大厂商的设备广泛使用的协议受到了人们的青睐。本研究中,公司内网采用的就是OSPF协议,拓扑中的公网采用EIGRP协议来实现网络互通。其各自的配置如下:
Router(config)#router ospf 1
//进入ospf协议,ospf的进程号为1
Router(config-router)# router-id 1.1.1.1//建立邻居,唯一标识OSPF区域的路由器
Router(config-router)# network 10.1.1.1 0.0.0.0 area 0
//将接口地址宣告进OSPF协议中,区域号为0
Router(config-router)# network 10.1.3.1 0.0.0.0 area 0
Router(config-router)# network 10.1.4.1 0.0.0.0 area 0
Router(config-router)# exit
Router(config)#router eigrp 1//进入EIGRP协议,进程号为1
Router(config-router)# network 172.16.1.8 0.0.0.0//宣告地址进EIGRP (反掩码)协议
Router(config-router)# network 172.16.3.8 0.0.0.0
Router(config-router)# network 172.16.4.8 0.0.0.0
Router(config-router)# network 172.16.8.8 0.0.0.0:
Router(config-router)# exit
4.5. VPN的配置
VPN技术,就是运用公网来假设专线的技术。在本拓扑中的R2与R15采用GRE隧道技术来实现VPN技术。其具体配置如下:
Router(config)#interface Tunnel0 //创建一条隧道,虚拟直连链路,两端的编号可不同
Router(config-if)# ip address 192.168.2.1 255.255.255.0
//为该隧道配置地址,由于虚拟直连链路,所以两端的地址要保证在同一网段
Router(config-if)# tunnel source Ethernet0/2
//指定隧道的源地址,通常为本路由器的公网地址
Router(config-if)# tunnel destination 172.16.6.13
//隧道的终点地址,通常为对端路由器的公网地址
Router(config-if)#exi
4.6. DMVPN的配置
DMVPN又称为动态多点VPN。相较于普通VPN来言,在增加新的分支站点时不用添加新的配置,分支站点无需再建立VPN就能通信等好处。从某种意义上来说,DMVPN是升级版的点对点 VPN。本拓扑中的R1、R11、R12采用DMVPN进行通信。其具体配置如下:
在中心站点HUB端:
Router(config)#interface Tunnel 0
Router(config-if)# ip address 192.168.1.1 255.255.255.0
Router(config-if)# no ip redirects //关闭重定向功能
Router(config-if)# ip nhrp network-id 100//标识下一跳解析协议的进程号
Router(config-if)# ip nhrp redirect
Router(config-if)# tunnel source Ethernet0/3
Router(config-if)# tunnel mode gre multipoint //将隧道的模式定义为GRE,并且允许多点接入
Router(config-if)#exi
在分支站点SPOKE端:
Router(config)#interface Tunnel0
Router(config-if)# ip address 192.168.1.3 255.255.255.0
//配置隧道的IP地址,要保证与中心站点在同一网段
Router(config-if)# no ip redirects
Router(config-if)# ip nhrp map 192.168.1.1 172.16.1.1 //下一跳解析协议
Router(config-if)# ip nhrp map multicast 172.16.1.1 //NHRP映射广播到公用网络接口
Router(config-if)# ip nhrp network-id 100 //标识解析协议,必须与HUB端保持一样
Router(config-if)# ip nhrp nhs 192.168.1.1 //配置隧道的下一跳地址
Router(config-if)# tunnel source Ethernet0/0
Router(config-if)# tunnel mode gre multipoint
4.7. IPSEC的配置
在本拓扑中的R1与R11和R12的DMVPN采用了IPSec数据加密,保证数据通信的安全性,在R2与R13没有数据加密。目的是用wireshark抓包时比较二者数据包的区别。IPSec的配置如下:
Router(config)#crypto isakmp policy 10//设置主要IKE加密,加密配置的优先级
Router(config-isakmp)# encr aes //运用对称加密aes
Router(config-isakmp)# hash md5 //哈希算法
Router(config-isakmp)# authentication pre-share //共享认证
Router(config-isakmp)# group 2//霍夫曼算法组2
Router(config-isakmp)# lifetime 10800 //生存期为10800s
Router(config-isakmp)#crypto isakmp key ycit address 0.0.0.0//设置DMVPN的调用密码
Router(config)#crypto IPSec transform-set AAA ah-md5-hmac esp-aes
//进行双重加密,对数据的传输进行摘要加密,防止篡改,加密方式的名字将为AAA
Router(cfg-crypto-trans)# mode tunnel //将模式改为隧道模式
Router(cfg-crypto-trans)#crypto IPSec profile DMVPN//将IKE加密的文件名命名为DMVPN
Router(config)#interface Tunnel0
Router(config-if)# tunnel protection IPSec profile DMVPN//在隧道下调用IKE文件
5. Wireshark抓包分析
本节将Wireshark与EVE仿真软件相关联,抓取通过IPSec加密的数据包与没有通过IPSec加密的VPN数据包,比较二者区别。
如图2所示。在网络拓扑中,R1为DMVPN的中心站点和总公司内网的网关。R11与R12作为DMVPN的分支站点和各自内网的网关。在R1、R11和R12上配置IPSec数据加密协议,并调用在隧道上。PC1位于总公司的内网中,当PC1向分公司B中的PC3发送PING包时,经过了各自的网关。由于在R1和R11上配置了NAT网络地址转化,使得各自的源目IP地址是各自的公网网关地址。数据包被ESP封装,看不到原始的源地址与目的地址,这也就是在抓取的数据包中源地址为172.16.1.1和172.16.8.11的原因。在Protocol那一栏,看到有ESP协议字段,表明该数据包经过了ESP封装和加密。进入具体数据包查看,结果如图3所示,在ESP这一栏发现有一个SPI字段。SPI字段是用来保证加密的正常进行。ESP的序列号为116,在上图的数据包中无法看到更多的相关信息,并且数据部分查看不了,表明数据包已经被IPSec加密了。
Figure 3. The contents of encrypted packets
图3. 加密数据包的具体内容
R2与R13建立的是普通的GRE隧道,并没有使用IPSec数据加密协议,单纯的虚拟出一条直连链路。当位于总公司的PC1去PING分公司A的PC2时,期间由于OSPF协议路由优先级的问题,数据包并不没有通过R2与R13建立的隧道,需要对R2隧道中的OSPF优先级进行增加,降低OSPF的cost值,使得PING包能够通过隧道。在图4中可以看到,数据包的源地址为10.1.100.1,目的地址是20.1.100.1。
图5是将通过R1与R11的数据包展开的结果,可以看出显示的内容比ESP加密的数据包要多。能清楚的看到数据占了56比特,以及因特网控制信息协议的版本号等许多信息,说明了数据没有被IPSec加密。数据包没有ESP加密,能看到原始的IP地址。回包的协议是ICMP,在过滤器中输入ICMP筛选数据包,在图片的中间位置可以看到两个源地址与目的地址。其中一对是PC实际的IP地址,另一对则是隧道的网关地址。
Figure 5. The contents of unencrypted packets
图5. 未加密数据包的详细内容
通过对以上数据包的分析,发现经过ESP加密的数据包不仅隐藏了实际的IP地址,只能看到公网的IP地址。而且数据内容被加密了,达到了预期的效果。
6. 结语
本文提出了一种基于IPSec协议的点对点VPN网络,并用虚拟机与模拟器实现了网络的拓扑设计。文中对网络的各种配置进行了详细说明。通过Wireshark抓包分析,发现经过ESP加密的数据包只能看到公网的IP地址,不仅隐藏了实际的IP地址,而且对数据内容也进行了加密。这种采用IPSec协议的VPN网络可有效避免来自公网的攻击,从而可以为公司总部与公司分部之间的数据传输建立安全保密的传输通道。