孙光懿
(天津音乐学院 图书信息中心, 天津 300171)
进入21世纪后,互联网技术飞速发展,越来越多的企业使用VPN(Virtual Private Network,虚拟专用网络)技术把公司总部与分布在世界各地分支机构的网络互连起来,以便进行资源共享和实时数据交换,最大限度地提高工作效率。相比传统的远程专线连接方式,VPN技术以常见的公用网络为基础,结合使用多种网络安全技术(如隧道、加密、访问控制列表等)来传输私有网络数据,具有接入灵活、易于安装、扩展性强、低成本等优势,深受各企业青睐。目前有多种技术支持建立站点到站点的三层VPN网络,其中以GRE(Generic Routing Encapsulation,通用路由协议封装)和IPSec VPN最为常见,但是这两种技术自身均存在一定的局限性。GRE技术虽然能对多种网络层协议的数据报文进行封装,但是对其封装的数据报文不提供任何安全保护机制,因此在传输过程中极易被黑客截获篡改。而IPSec VPN虽能对TCP/IP通信提供更多的安全保障,但是也存在一些不尽如人意的地方,例如难以对通信点之间的流量进行控制、感兴趣流有可能存在过多、无法让各自站点的动态路由协议实现互通等。因此在实际应用环境中GRE和IPSec多联合使用,即先利用GRE协议建立逻辑隧道,而后通过IPSec协议对封装后的数据进行加密,从而满足企业与各分支机构之间高安全性的通信需求。
GRE工作在OSI参考模型中的网络层[1-3],是一种应用及其广泛的轻量级三层隧道协议,由美国思科公司开发并在1994年提交给IETF,主要用来建立GRE隧道从而使一种网络协议封装另一种网络协议。GRE支持单播、组播、多播等多种网络层协议(如IP、IPX、RIP、OSPF、EIGRP协议等)并允许将这些协议的数据报文进行封装处理,封装处理后的数据报文可以在另一个网络层协议中传输,但是无法进行流量控制。通过应用GRE技术不仅可以实现使用互联网保留地址进行网络互连,还可以实现使用IP网络连接企业内部协议网络。当IP数据报文需要从GRE隧道接口发出时,就需要对IP数据报文进行GRE封装处理。如果使用IPV4协议进行封装,首先在需要封装的IP数据报文前加上一个GRE头部(GRE头部目前没有统一固定的格式)使其成为GRE报文,然后在GRE头部前加上一个长度为20字节、协议号为47的新IP头部,这样就完成了GRE对原始数据报文的封装。新IP头部所定义的源地址和目的地址即为隧道的起始地址和目的地址。封装的数据报文传输到隧道目的地址后,目的地址设备第一步先去掉新IP头部,第二步去掉GRE头部,最终取出的原始数据包根据三层路由到达目的地址。GRE协议封装结构如图1所示。
外层IP头部GRE头部内层IP头部内层实际传输的数据
图1 GRE协议封装结构
IPSec协议属于三层隧道加密协议[4-6],工作在OSI参考模型中的网络层,它的出现使在互联网上传输的数据有了可靠的安全保证。需要注意的一点是IPSec协议并不是一个单个协议,而是由IETF起草制定的一套用于保护IP层数据安全的体系框架构成,主要包括网络认证AH协议、封装安全载荷ESP协议、密钥管理IKE协议和一些用于加密、认证的算法。加密和认证是IPSec协议拥有的两种安全防范机制,用来保证数据的安全性。加密机制主要是采用对数据进行加密的方式,来防止黑客对传输中的数据进行窃听。认证机制不仅可以确认数据在传输过程中是否被黑客篡改,而且还可以使数据接收一方对数据发送方的真实身份进行确认。IPSec协议中的ESP协议提供加密、数据源认证、数据完整性保护等功能,不足的一点是ESP协议只负责对负载数据提供安全保护,而对原始IP头部不提供任何安全保护。IPSec协议中的AH协议只提供数据源认证和完整性校验功能,不能有效防止黑客对数据的监听,因此多用于非机密性数据传输。
IPSec协议存在隧道和传输两种封装模式,现实中两个通信站点的IP,在其间的网络是否可路由决定了使用哪种封装模式。如可路由既可以使用传输封装模式又可以使用隧道封装模式,如不可路由则必需使用隧道封装模式,否则封装后的数据包传输到ISP边界路由器后,会被直接丢弃。传输封装模式应用起来相对简单,只需将ESP头插入在原始IP头和TCP头部之间,并在IP负载尾部加上ESP尾部和ESP验证数据即可。由此可见,传输封装模式只是对原始IP数据包负载进行封装,并保留原始IP头。而隧道封装模式则是由新的IP数据包对原始IP数据包进行封装,并在原始IP头前插入新的IP头和ESP头,从而对其进行加密和验证处理。IPSec协议封装结构如图2所示。
IP头部IPSec头部传输层头部应用层头部应用层数据
图2 IPSec协议封装结构
公司总部和分公司分别位于不同城市,其各自内部网络均使用私有IP地址访问互联网资源。其中C1为公司总部内网所属终端计算机,C2为分公司内网所属终端计算机。路由器R1为公司总部出口路由器,路由器R2为分公司出口路由器,路由器R1、R2分别与中国电信边缘路由器R3、R4互联。为了满足公司总部与分公司内网各用户之间不仅能够进行实时数据交换,而且各内网用户还可以正常访问互连网资源的需求,我们在公司总部与分公司出口路由器上应用路由策略的同时,在两者之间之间建立起一个高安全性的点到点的GRE OVER IPSec VPN网络,以便让双方用户可以直接使用各自私有IP地址进行实时数据交换。即通过在R1与R2之间建立一个GRE隧道,使二者在逻辑上连接在一起,而后在双方内部网络及隧道网络上运行OSPF协议宣告各自网段[7-8],使其均可以学习到对方内网路由信息,最后再利用IPSec协议对在隧道中传输的所有数据包进行加密,最大限度地保证隧道中所传数据包的安全。
经过封装后的原始数据包,加上了新的IP头部(源地址与目的地址为封装设备间公网地址)即公司总部与分公司向ISP提供商申请的固定公网地址,并且它们之间是可路由的,因此公司总部和分公司内网用户之间可以直接使用私有IP地址进行通信,无需进行NAT地址转换。应用路由策略主要是为了实现公司总部和分公司内网用户访问互联网资源的数据包与二者内网用户之间通信的数据包(去往隧道的数据包)分流,我们以公司总部内网用户为例,当与分公司内网用户通信时,数据包去往VPN隧道;当访问互联网资源时,数据包不再去往VPN隧道,而是在出口路由器R1上进行NAT地址转换后,直接转发到中国电信边缘路由器R3,从而实现对互联网资源的正常访问。仿真实验拓扑如图3所示。
图3 仿真实验拓扑
在中国电信边缘路由器R3、R4上分别建立LOOPBACK接口,用来模拟公网目的服务器地址,公司总部出口路由器R1和分公司出口路由器R2的s1/0接口分别与中国电信边缘路由器R3、R4互联,公司总部所属终端计算机C1与路由器R1的f2/0接口相连,分公司所属终端计算机C2与路由器R2的f2/0接口相连,路由器R1与路由器R2之间建立虚拟GRE隧道Tunnel1,Tunnel1的网段地址为173.15.1.0/24。各网络设备接口及IP地址规划如表1所示。
表1 各网络设备接口及IP地址规划
路由器R3、R4接口配置与路由器R1、R2接口配置类似,故不在文中详细阐述。
(1)配置路由器R1
R1(config)#int s1/0 //进入接口s1/0
R1(config-if)#ip add 202.97.95.62 255.255.255.0 //设置此接口地址用于与中国电信边界路由器R3互连
R1(config-if)#ip nat outside
R1(config)#int f2/0
R1(config-if)#ip add 192.168.50.1 255.255.255.0 //此地址为终端计算机C1网关地址
R1(config-if)#ip nat inside
(2)配置路由器 R2
R2(config)#int s1/0 //进入接口s1/0
R2(config-if)#ip add 219.140.33.22 255.255.255.0 //设置此接口地址用于与中国电信边界路由器R4互连
R2(config-if)#ip nat outside
R2(config)#int f2/0
R2(config-if)#ip add 192.168.60.1 255.255.255.0 //此地址为终端计算机C2网关地址
R1(config-if)#ip nat inside
公司总部及分公司内部用户对外访问任何资源,数据包都会先转发到与其互联的ISP边缘路由器(现实中,ISP边缘路由器路由表中只有与之相连的直连路由信息,没有各内部站点的路由信息),因此必需配置出口路由器R1至边缘路由器R3和出口路由器R2至边缘路由器R4的路由,否则对外访问的数据包在路由表中将不会找到相关的路由信息,最终被路由器丢弃。
R1(config)#ip route 0.0.0.0 0.0.0.0 202.97.95.61
R2(config)#ip route 0.0.0.0 0.0.0.0 219.140.33.21
R3(config)#ip route 219.140.33.0 255.255.255.0 221.239.16.2
R3(config)#ip route 218.150.32.0 255.255.255.0 221.239.16.2
R4(config)#ip route 202.97.95.0 255.255.255.0 221.239.16.1
R4(config)#ip route 203.99.96.0 255.255.255.0 221.239.16.1
通过在路由器R1与路由器R2之间建立GRE隧道,并且在隧道接口应用NAT、ACL等技术,不仅可以把两站点虚拟的连接起来,而且还可以实现对两站点之间数据包流量的控制。另外,原始数据包经过GRE封装以后,会加上一个全新的外层IP头,此时出口路由器R1和R2的s1/0接口地址即为新IP头的源地址和目的地址。封装后的数据包在到达路由器R2后会被解封装,解封后的数据包的源地址和目的地址再次呈现为公司总部与分公司内部用户的私有IP地址。GRE隧道配置起来简单便捷,其最主要的问题就是对所封装的数据不提供任何安全保护措施。因此,一些重要的数据不能通过GRE隧道直接在互联网上传输。
R1(config)#int tunnel 1
R1(config-if)#ip add 173.15.1.1 255.255.255.0 //配置隧道接口地址
R1(config-if)#tunnel source 202.97.95.62 //设置隧道源地址
R1(config-if)#tunnel destin 219.140.33.22 //设置隧道目的地址
R2(config)#int tunnel 1
R2(config-if)#ip add 173.15.1.2 255.255.255.0
R2(config-if)#tunnel source 219.140.33.22 //设置隧道源地址
R2(config-if)#tunnel destin 202.97.95.62 //设置隧道目的地址
在公司总部和分公司内部网络和GRE隧道网络上配置动态路由协议OSPF(OSPF的流量也会被封装在GRE隧道内),以便让两个站点均能学习到对方内网路由信息,从而使各自内网用户间可以使用私有IP地址互相通信。
R1(config)#router ospf 1
R1(config)#network 173.15.1.0 0.0.0.255 area 0 //宣告隧道网络
R1(config)#network 192.168.50 0.0.0.255 area 0 //宣告公司总部内部网络
R2(config)#router ospf 1
R2(config)#network 173.15.1.0 0.0.0.255 area 0 //宣告隧道网络
R2(config)#network 192.168.60 0.0.0.255 area 0 //宣告分公司内部网络
3.6.1 配置IKE第一阶段
配置IKE协商[9]的主要目的就是为了最大限度的保护隧道内数据包的传输安全,其协商过程共分为两个阶段。第一阶段协商的主要任务是协商IKE安全关联,为第二阶段的IPSec关联提供安全保证。通常采用主模式或主动模式来完成对通信双方的身份认证和鉴别工作,从而确保建立IPSec VPN的双方是合法的Peer。当通信双方采用预共享密钥的方式进行身份认证时,应采用3个包交换的主动模式来完成第一阶段的协商。当通信双方采用证书的方式进行身份认证时,则采用6个包交换的主模式来完成第一阶段的协商。第一阶段协商完成后,不仅通信双方建立了互相信任的关系,而且一个双向的IKE SA也被随之建立。
R1(config)#crypto isakmp policy 20
R1(config-isakmp)#encryption 3des //指定加密算法为三重数据加密算法
R1(config-isakmp)#authentication pre-share //通信双方采用预共享密钥的方式进行身份认证
R1(config-isakmp)#hash md5 //数据完整性校验采用md5算法
R1(config-isakmp)#group 2 //设置密钥交换参数
R1(config-isakmp)#lifetime 3000 //设置SA的生存周期
R1(config)#crypto isakmp key sgy168 address 219.140.33.22 //通信双方的共享密钥设置为sgy168
R2(config)#crypto isakmp enable
R2(config)#crypto isakmp policy 20
R2(config-isakmp)#encryption 3des
R2(config-isakmp)#authentication pre-share
R2(config-isakmp)#hash md5
R2(config-isakmp)#group 2
R2(config-isakmp)#lifetime 3000
R2(config)#crypto isakmp key sgy168 address 202.97.95.62
3.6.2 配置IKE第二阶段
第二阶段协商的主要任务是协商相应的流量策略并对感兴趣的流量进行加密,通常采用3个包交换的快速模式来完成。在整个协商的过程中,3个数据包都得到了很好的安全保护,协商完成后IPSec SA也随即产生。
R1(config)#crypto isakmp enable //启用isakmp协议,此协议为IKE的核心协议
R1(config)#crypto ipsec transform-se sgy esp-3des esp-sha-hmac //定义名为sgy的转换集
R1(cfg-crypto-trans)#mode transport //使用传输模式对数据进行封装
R1(config)#access-list 101 permit ip host 202.97.95.62 host 219.140.33.22 //用扩展访问控制列表定义感兴趣流量
R1(config)#crypto map lzz 20 ipsec-isakmp //建立一个名为lzz的加密图
R1(config-cryto-map)#set peer 219.140.33.22 //设置对等体IP地址
R1(config-cryto-map)#set transform-set sgy
R1(config-cryto-map)#match add 101
R1(config)#int s1/0
R1(config-if)#crypto map lzz //在公司总部出口路由器R1的s1/0接口上应用加密图
R2(config)#crypto ipsec transform-se sgy esp-3des esp-sha-hmac
R2(cfg-crypto-trans)#mode transport
R2(config)#access-list 101 permit ip host 219.140.33.22 host 202.97.95.62
R2(config)#crypto map lzz 20 ipsec-isakmp
R2(config-cryto-map)#set peer 202.97.95.62
R2(config-cryto-map)#set transform-set sgy
R2(config-cryto-map)#match add 101
R2(config)#int s1/0
R2(config-if)#crypto map lzz //在分公司出口路由器R2的s1/0接口上应用加密图
在公司总部和分公司出口路由器上配置NAT,使其各自内网用户脱离VPN,实现对互联网资源的正常访问。
(1)在公司总部出口路由器R1上配置NAT。
R1(config)#access list 109 deny ip 192.168.50.0 0.0.0.255 192.168.60.0 0.0.0.255 //禁止公司总部内网用户访问分公司内网用户
R1(config)#access list 109 permit ip 192.168.50.0 0.0.0.255 any //公司总部内网用户可以访问任何地址
R1(config)#route-map zb permit 10 //建立名为zb的路由图
R1(config-route-map)#match ip address 109
R1(config)# ip nat inside source route-map zb interface s1/0 overload
(2)在分公司出口路由器R2上配置NAT。
R2(config)#access list 108 deny ip 192.168.60.0 0.0.0.255 192.168.50.0 0.0.0.255
R2(config)#access list 108 permit ip 192.168.60.0 0.0.0.255 any
R2(config)#route-map fgs permit 10 //建立名为zb的路由图
R2(config-route-map)#match ip address 108
R2(config)# ip nat inside source route-map fgs interface s1/0 overload
在这里我们用ping命令测试,公司总部终端计算机C1访问公网服务器目的地址203.99.96.67与分公司终端计算机C2的的连通性;用show crypto session命令查看路由器R1和R2的IPSec会话情况。
(1)测试终端计算机C1访问公网服务器目的地址203.99.96.67的连通性。
VPCS[1]>sh ip
NAME:VPCS[1]
IP/MASK:192.168.50.2/24
GATAWAY:192.168.50.1
MAC:00:50:79:66:68:00
LPORT:20000
VPCS[1]> ping 203.99.96.67
203.99.96.67 icmp_seq=1 ttl=254 time=140.401 ms
203.99.96.67 icmp_seq=2 ttl=254 time=93.601 ms
203.99.96.67 icmp_seq=3 ttl=254 time=46.800 ms
(2)测试终端计算机C1访问分公司终端计算机C2的连通性。
VPCS[1]> ping 192.168.60.2
192.168.60.2 icmp_seq=1 ttl=254 time=131.001 ms
192.168.60.2 icmp_seq=2 ttl=254 time=73.201 ms
192.168.60.2 icmp_seq=3 ttl=254 time=40.500 ms
(3)使用show crypto session 命令查看公司总部出口路由器R1的IPSec会话。
R1#sh crypto session
Crypto session current status
Interface: Tunnel1
Session status: UP-ACTIVE
Peer: 219.140.33.22 port 500
IKE SA: local 202.97.95.62/500 remote 219.140.33.22/500 Active
IPSEC FLOW: permit host 192.168.50.2 host 192.168.60.2
(4)使用show crypto session 命令查看分公司出口路由器R2的IPSec会话。
R2#sh crypto session
Crypto session current status
Interface: Tunnel1
Session status: UP-ACTIVE
Peer: 202.97.95.62 port 500
IKE SA: local 219.140.33.22/500 remote 202.97.95.62/500 Active
IPSEC FLOW: permit host 192.168.60.2 host 192.168.50.2
(5)使用show ip route命令查看公司总部出口路由器R1的路由表,如图4所示。
图4 路由器R1路由表
测试后发现:终端计算机C1不仅能对公网服务器进行正常访问,而且利用GRE over IPSec VPN技术还可以直接使用私有地址与分公司内网终端计算机C2正常通信;公司总部出口路由器R1和分公司出口路由器R2不仅可以学习到各自内网网段的路由信息,而且它们之间的IPSec会话也被成功建立,因而各自所属终端计算机互相访问的数据流也会得到有效保护。
本文提出的结合GRE和IPSec 建设高安全性VPN的方案,由于在公司总部与分公司出口路由器上应用了路由策略,使得去往VPN隧道的流量与访问Internet的流量成功分离。应用该方案不仅实现了公司总部与分公司各用户之间可以直接使用私有IP地址进行安全互访,而且也实现了双方用户脱离VPN隧道对互联网资源的正常访问。满足了公司总部与分公司各用户之间不仅能够进行实时数据交换,而且各用户还可以正常访问互连网资源的需求。
[参考文献]
[1] DOYLE J,CARROLL J.TCP/IP路由技术[M].北京:人民邮电出版社,2009.
[2] NEDELTCHEV P.远程接入网络疑难解析[M].北京:人民邮电出版社,2009:431-502.
[3] 陈英,马洪涛.NAT技术的研究与应用[J].实验室研究与探索,2007,26(8):56-59.
[4] 曹腾飞,孟永伟,黄建强.西部高校计算机网络实验[J].实验室研究与探索,2015,34(4):129-131.
[5] 李红升.基于隧道技术的VPN技术应用[J].电脑知识与技术,2012,8(4):3239-3241.
[6] 彭辉.基于VPN的硅酸钙板生产线远程监控与诊断系统[J].陕西理工大学学报(自然科学版),2017,33(6):39-44.
[7] 何亚辉.基于SSL协议的VPN技术研究及在校园网中的应用[J].重庆理工大学学报(自然科学),2011,25(2):86-90.
[8] 唐灯平.基于Packet Tracer的GRE隧道配置实验教学设计[J].实验室研究与探索,2010,29(11):378-381.
[9] 肖洁芩.基于PKI与GRE的IPSec VPN系统的设计与实现[D].南京:南京信息工程大学,2011.