5.4 工作任务四 VPN互联解决方案
主要内容

【任务分析】
本工作任务的目标是综合运用多种VPN技术,将Leader职业学院的老校区与威海校区、老校区与青岛校区通过广域网互联起来。
使用VPN技术组建广域网,用户只需要使用局域网中常用的交换机、防火墙等设备就可以。因为大多数的VPN技术对设备接口的数据链路层协议没有限制,既可以使用以太网接口,也可以使用串行接口。本工作任务将在老校区与青岛校区各自的核心交换机上部署MPLS L2 VPN,在老校区与威海校区各自的局域网出口防火墙上部署GRE over IPSec VPN。
【任务要求】
任务名称 | VPN互联解决方案 |
任务目标 | 了解MPLS VPN的作用。掌握GRE VPN、IPSec VPN的原理和配置。 |
学习方式与工具 | Cisco 2811或2911路由器、硬件防火墙、计算机、Packet Tracer、GNS3、Internet搜索、资料查阅。 |
相关知识 | Cisco Packet Tracer的使用方法,GNS3模拟器的使用方法。 |
工作任务 | (1)了解MPLS L2 VPN、MPLS L3 VPN的作用和基本组网方式; (2)掌握GRE VPN的工作原理和配置; (3)掌握IPSec VPN的工作原理和配置; (4)掌握GRE over IPSec的工作原理和配置; (5)使用多种VPN技术实现老校区与威海校区、青岛校区的广域网互联。 |
完成任务和成果 | 使用VPN技术将老校区与威海校区、青岛校区互联起来。归纳配置过程中出现过的问题,总结VPN的知识结构。 |
5.4.1 MPLS VPN技术及配置
主要内容

1.MPLS VPN技术
MPLS(Multi-Protocol Label Switching,多协议标签交换)是用一个短而定长的标签封装网络层数据包,并将封装后的报文转发到支持MPLS技术的交换机或路由器,交换机或路由器根据标签值转发报文。普通的IP网络,只要将路由器升级能支持MPLS技术,就成为MPLS网络。MPLS网络可以与普通IP网络共存,报文可以在IP网络和MPLS网络之间转发。
1)MPLS VPN网络中路由器的角色
MPLS网络中的路由器分为两种角色:LSR(Label Switch g Router,标签交换路由器)和LER(Label Switching Edge Router,标签交换边缘路由器),如图5-25所示。LSR是MPLS网络的核心交换机或者路由器,不与非MPLS网络相连,提供标签交换和标签分发功能;LER位于MPLS网络的边缘,与非MPLS网络(如IP网络)相连,LER提供标签映射、移除和标签分发等功能。
1.1拓扑设计

图5-25 MPLS网络组成
(2)MPLS VPN隧道
MPLS VPN是一种由运营商负责维护VPN隧道的VPN方案
MPLS VPN隧道建立在PE设备之间,由服务提供商向用户提供VPN服务,用户感觉不到公共网络的存在,就好像拥有独立的网络资源一样。P路由器也不需要知道有VPN的存在,仅负责骨干网内部的数据传输,但其必须能够支持MPLS协议。所有VPN的构建、连接和管理工作都是在PE上进行的。
MPLS VPN的特点:用户网络配置简单,可以直接利用现有路由协议而无需任何改动,具有良好的可扩展性,可实现具有QOS和TE的VPN。
MPLS VPN分为MPLS L3 VPN和MPLS L2 VPN两种,分别承载三层业务和二层业务。
1.1拓扑设计

图5-26 MPLS VPN—由运营商负责维护的VPN隧道
(3)MPLS L3 VPN
MPLS L3 VPN是一种基于PE的三层VPN技术,它使用BGP路由协议在服务提供商骨干网上发布VPN路由,使用MPLS在服务提供商骨干网上转发VPN报文。从业务承载模式的角度来看,MPLS L3 VPN属于路由模式的MPLS VPN。从用户的角度来看,MPLS L3 VPN所呈现的形式就像是一台路由器。
两个用户同时在运营商办理了MPLS L3 VPN业务,用户1的设备为路由器CE1和CE3,用户2的设备为路由器CE2和CE4。运营商使用MPLS L3 VPN为两个用户建立了两个VPN隧道,VPN1和VPN2。
对于每个用户来说,他们眼中的MPLS L3 VPN就像是一台路由器,实现用户的两个局域网之间的互联。运营商路由器需要参与用户的私网路由,包括OSPF等动态路由协议。
1.1拓扑设计
![]() | ![]() |
| 图5-27 用户视角的MPLS L3 VPN | 图5-28 用户视角的MPLS L2 VPN-VPWS |
(4)MPLS L2 VPN
MPLS L2 VPN提供基于MPLS网络的二层VPN服务,使运营商可以在统一的MPLS网络上提供基于不同数据链路层的二层VPN,包括Ethernet、PPP、HDLC、帧中继等。简单来说,MPLS L2 VPN就是在MPLS网络上透明传输用户的二层数据。从业务承载模式的角度来看,MPLS L2 VPN属于管道模式的MPLS VPN;从用户的角度来看,MPLS L2 VPN网络是一个二层交换网络,可以在不同的节点之间建立二层连接。
MPLS L2VPN包括VPWS和VPLS两种方式。
①VPWS(Virtual Private Wire Service,虚拟私有线路服务):是指在MPLS VPN网络中尽可能真实地模仿ATM、帧中继、以太网、低速TDM电路和SONET/SDH等业务的基本行为和特征的一种二层业务承载技术。本质上,VPWS技术是一种点到点的虚拟专线技术,能够支持几乎所有的链路层协议。
如图5-28所示,两个用户同时在运营商办理了VPWS方式的MPLS L2 VPN业务,用户1的设备为路由器CE1和CE3,用户2的设备为路由器CE2和CE4。运营商使用VPWS方式的MPLS L2 VPN为两个用户建立了两个VPN隧道,VPN1和VPN2。
对于每个用户来说,VPWS方式的MPLS L2 VPN所呈现的形式就像是一条线路,既可以是以太网线路,也可以是串行线路等其他线路。
② VPLS(Virtual Private LAN Service,虚拟专用局域网服务):是通过MPLS VPN网络连接多个以太网LAN网段,使它们像一个LAN那样工作。VPLS也称为透明局域网服务(TLS Transparent LAN Service)或虚拟专用交换网服务。利用VPLS技术,服务提供商可以通过MPLS骨干网向用户提供基于以太网的多点业务。VPLS仅支持Ethernet二层协议。
如图5-29所示,用户1在运营商办理了VPLS 方式的MPLS L2 VPN业务,用户1的设备为路由器CE1、CE2、CE3和CE4。运营商使用VPLS 方式的MPLS L2 VPN为两个用户建立了VPN隧道VPN1。
对于用户1来说,他们眼中的VPLS 方式的MPLS L2 VPN就像是一台交换机,实现用户的四个局域网之间的互联。
与MPLS L3 VPN相比,MPLS L2 VPN有以下优点:
可扩展性强:MPLS L2 VPN只建立二层连接关系,不引入、也不管理用户的路由信息。这大大减轻了PE,甚至整个服务提供商网络的负担,使服务提供商能够支持更多的VPN接入和更多的用户。
可靠性和安全性强:由于不引入用户的路由信息,MPLS L2 VPN不能获得和处理用户路由,保护了用户网络的安全。
1.1 拓扑设计

图5-29用户视角的MPLS L2VPN – VPLS方式
MPLS L2 VPN互联老校区和青岛校区
(1)MPLS L2 VPN互联设计
本任务的目标是将老校区和青岛校区校园网通过MPLS L2 VPN互联,通过分析MPLS L2 VPN技术特征,无论是VPWS方式还是VPLS方式,都可以支持以太网链路,因此两个校区的MPLS VPN接入设备既可以是以太网交换机,也可以是配备以太网接口的路由器。对于校园网来说,将局域网的核心交换机作为MPLS VPN的接入设备是较好的选择。
老校区的核心交换机Core和青岛校区的核心交换机Qingdao是MPLS L2 VPN两端的接入设备,交换机Core使用FastEthernet1/2接口接入MPLS VPN线路,交换机Qingdao使用FastEthernet1/15接口接入MPLS VPN线路。由于运营商提供的MPLS L2 VPN在用户看来就像是一条网线,所以可以在两个核心交换机之间规划一个网段172.31.0.20/30,用于老校区和青岛校区之间的广域网互联。
(2)使用MPLS L2 VPN互联两个校区网络的配置
配置老校区核心交换机:
Core(config)# interface FastEthernet1/2
Core(config-if)#no shutdown
Core(config-if)# no switchport
Core(config-if)# ip address 172.31.0.21 255.255.255.252
配置青岛校区核心交换机
Qingdao(config)# interface FastEthernet1/15
Qingdao(config-if)#no shutdown
Qingdao(config-if)# no switchport
Qingdao(config-if)# ip address 172.31.0.22 255.255.255.252
使用ping测试两个校区之间的连通性,并测试文件传输、视频点播等常见应用的网络速率。
提示:与DDN、SDH、帧中继、ATM等传统专线技术相比,MPLS VPN技术具有设备投资少、线路租用费较低、带宽高、拓扑灵活、可扩展性好、维护管理方便等优点。MPLS VPN非常适合数目众多的那些对价格较为敏感,但对带宽也有一定需求的用户。
5.4.2 GRE VPN技术及配置
主要内容

项目导入
GRE本身是一种封装方法,而不是指VPN。GRE是由Cisco公司开发的轻量级隧道协议,能够在任意一种网络协议上传送任意另一种网络协议的封装方法。将GRE称作轻量级隧道协议的原因是GRE的头部较小,封装效率高,但是GRE没有任何安全防护机制,因此在5.4.4节会介绍GRE over IPSec VPN,使用IPSec保护GRE隧道。

(1)GRE协议
GRE是一种三层隧道封装技术,其封装格式如图5-30所示。原始IP数据包包括IP头部、TCP(或UDP)头部和应用层数据,GRE协议将原始数据包封装在新数据包的内部。GRE在内层IP头部之间添加一个GRE头部,并在GRE头部之前再添加一个新的外层IP头部。经过GRE封装后的新的IP数据包前面添加数据链路层头部,并在链路上进行传输。被封装的内层IP数据包为载荷协议,GRE为封装协议,而封装后的新的外层IP头部为承载协议。GRE对载荷协议(内层IP数据包)不提供任何安全防护,在后面的GRE配置案例中,可以使用Wireshark数据包分析工具获取GRE传送的原始数据
(2)GRE VPN技术
与MPLS VPN不同,GRE VPN和IPSec VPN都是由用户自己搭建、维护隧道的VPN。GRE VPN、IPSec VPN也称为CPE-Based VPN,CPE(Customer Premise Equipment,用户前端设备)是指放置在用户侧,并直接连接到Internet的网络设备,通常为硬件防火墙、专用VPN网关或路由器。在CPE-Based VPN中,CPE必须支持VPN功能,负责发起VPN连接,通过隧道连接到另一个CPE设备。用户需要自己购买支持VPN功能的CPE设备,并且自行在设备上配置VPN隧道。
1.1 拓扑设计
如图5-31所示,CPE-Based VPN隧道建立在用户的CE设备之间。VPN隧道的建立、维护由用户自己来完成,有时也可以委托运营商或第三方进行配置和管理。

图5-31用户负责维护的VPN隧道
(3)IP over IP的GRE VPN隧道
如图5-32所示的GRE VPN地址空间和路由规划图,用户局域网A的Internet出口设备是路由器R1,R1通过Fa 0/0接口连接内部局域网,通过Fa 0/1接口连接Internet。用户局域网B的Internet出口设备是路由器R2,R2通过Fa 0/0接口连接内部局域网,通过Fa 0/1接口连接Internet。用户局域网内部使用私有地址,通过NAT技术,在出口设备上将私有地址转换为公有地址,使内部用户能够访问Internet。路由器R1和R2的Fa 0/0接口配置了私有IP地址,属于私网路由域,而路由器R1和R2的Fa 0/1接口配置了公有IP地址,属于公网路由域。由于运营商的IP公网不允许路由使用私有IP地址标识的数据包,所以局域网A和局域网B的私网路由域是不能互相访问的。要使私网路由域互通,可以使用GRE VPN技术。
要使GRE VPN正常运作,前提是公网必须联通。路由器R1和R2的Fa0/1接口都连接到Internet,服务提供商必须保证路由器R1和R2能够各自访问到对方的Fa 0/1接口所配置的公网IP地址。
要配置GRE VPN,需要在路由器上创建隧道接口(Tunnel)。隧道接口是为实现报文的封装而提供的一种点到点类型的虚拟接口,隧道接口是一种逻辑接口。GRE VPN直接使用GRE建立GRE隧道接口,在公网上传送私有数据,即IP同时作为载荷协议和承载协议。其中私有IP数据为载荷协议,公共IP网络为承载协议网络,又称为IP over IP的GRE封装。
在隧道接口上需要指定隧道的实际物理出接口(或隧道的源IP地址)和隧道的目的IP地址,隧道接口依赖物理接口进行实际的通信。在隧道接口上需要配置私有IP地址,因此隧道接口也属于私网路由域。通过隧道接口,用户的两个私网路由域就可以互通了。
企业在两个局域网之间部署GRE VPN,通过IP公网传送内部局域网的数据,从而实现网络层的站点到站点VPN。
1.1 拓扑设计
使用GRE VPN的目的是搭建站点到站点VPN,即将用户的两个或多个局域网使用现有的Internet出口,通过Internet搭建广域网。图5-32是

图5-32 GRE VPN地址空间和路由规划
2.GRE VPN典型配置案例
(1)配置设备物理接口IP地址
按照拓扑图中的地址规划,为路由器R1、R2、Internet的物理接口配置IP地址。为PC1和PC2配置IP地址、子网掩码和默认网关
(2)配置公网路由
GRE VPN隧道的连通性取决于实际物理网络的公网连通性。。
配置路由器R1的公网路由
R1(config)#ip route 0.0.0.0 0.0.0.0 60.135.1.1
配置路由器R2的公网路由
R2(config)#ip route 0.0.0.0 0.0.0.0 222.5.7.1
配置路由器Internet的公网路由
因为路由器Internet的路由表中已经有本拓扑中的所有公网地址段,所以不需要为它配置任何静态路由或动态路由协议。
测试公网连通性
使用ping测试路由器R1与R2之间的公网地址连通性。
1.1拓扑设计
假设一个企业的总部和分支机构之间要通过GRE VPN实现广域网互联,如图5-33所示。路由器R1为总部的Internet出口设备,路由器R2为分支机构的Internet出口设备,路由器Internet用来模拟整个国际互联网。在路由器R1和R2上创建GRE隧道接口,并分别使用静态路由和OSPF动态路由协议实现内部网络互联。

(3)配置GRE隧道
配置路由器R1的GRE隧道
R1(config)#interface tunnel 0 !创建隧道接口,该接口只要求本地唯一
R1(config-if)#tunnel mode gre ip !指定隧道的封装为GRE(默认封装)
R1(config-if)#tunnel source fastEthernet 0/1 !指定隧道的实际物理出接口(隧道源)
R1(config-if)#tunnel destination 222.5.7.2 !指定隧道的目的IP地址
*Mar 1 00:19:18.699: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to up
配置了隧道目的IP地址后,只要隧道的物理出接口(Fa 0/1)up,隧道口的数据链路层协议状态即为up。
R1(config-if)#ip address 192.168.0.1 255.255.255.252
R1(config-if)#keepalive !允许路由器探测隧道的实际工作情况
*Mar 1 00:21:17.939: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to down
由于隧道的对端路由器R2还没有配置GRE隧道,所以在启用隧道接口的Keepalive(保持激活)特性后,隧道的数据链路层协议down了。
配置路由器R2的GRE隧道
R2(config)#interface tunnel 0
R2(config-if)#tunnel source fastEthernet 0/1
R2(config-if)#tunnel destination 60.135.1.2
R2(config-if)#ip address 192.168.0.2 255.255.255.252
R2(config-if)#keepalive
将路由器R2的GRE隧道配置好后,路由器R1的隧道口链路层协议就转变为up了。
测试GRE隧道的连通性
(4)配置私网路由——使用静态路由
将GRE隧道建立好以后,总部和分支机构之间的私网数据就可以通过隧道接口传输了。首先,使用静态路由实现内部网络互通。
配置路由器R1的私网路由
R1(config)#ip route 192.168.2.0 255.255.255.0 tunnel 0
配置路由器R2的私网路由
R2(config)#ip route 192.168.1.0 255.255.255.0 192.168.0.1
因为隧道口的数据流量最终要通过物理接口向外发送,所以在配置静态路由时,使用本地出接口或下一跳IP地址这两种方式都是可以的。
(5)配置私网路由——使用OSPF
GRE隧道既支持传输单播数据,也支持传输组播数据,因此可以使用OSPF这样的动态路由协议,通过GRE隧道互联两个局域网。
删除路由器R1和R2的静态路由
R1(config)#no ip route 192.168.2.0 255.255.255.0
R2(config)#no ip route 192.168.1.0 255.255.255.0
配置路由器R1的私网路由
R1(config)#router ospf 1
R1(config-router)#network 192.168.1.0 0.0.0.255 area 0
R1(config-router)#network 192.168.0.0 0.0.0.255 area 0
配置路由器R2的私网路由
R2(config)#router ospf 1
R2(config-router)#network 192.168.0.0 0.0.0.255 area 0
R2(config-router)#network 192.168.2.0 0.0.0.255 area 0
*Mar 1 00:45:45.195: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.1 on Tunnel0 from LOADING to FULL, Loading Done
路由器R2通过Tunnel 0接口与路由器R1建立了OSPF邻接关系。
(7)测试GRE VPN网络连通性并进行数据包分析
测试网络连通性:从PC1来ping PC2,测试GRE VPN网络的连通性。
VPCS[1]> ping 192.168.2.2
192.168.2.2 icmp_seq=1 ttl=62 time=109.200 ms
(省略其他输出内容)
使用Wireshark进行数据包分析:首先分析从PC1发送到路由器R1的数据包。在数据包的IP头部中,Protocol字段为ICMP(协议号为1),表示IP数据包的内部是ICMP协议数据。数据包的源IP地址为192.168.1.2,目的IP地址为192.168.2.2。这是一个使用私有地址编址的IP数据包,不能直接在公网上传输。

然后分析从路由器R1发送到路由器Internet的数据包,如图5-35所示。原始IP数据包被封装在GRE里面,然后又被封装在使用公有IP地址标识的外层IP数据包中。在GRE头部中,Protocol Type字段为IP(编号为0x0800),表示被GRE封装的内部数据为IP数据包。在外层IP头部中,Protocol字段为GRE(协议号为47),表示外层IP数据包的内部是由GRE封装的数据。外层IP数据包的源IP地址为60.135.1.2,目的IP地址为222.5.7.2,分别为GRE隧道配置中的隧道源(本案例为出接口)IP地址和隧道目的IP地址。
提示:配置GRE VPN时,要注意公网路由域和私网路由域是分开的,公网路由与私网路由的配置要分别进行,互不影响。但是GRE隧道的连通与否取决于公网路由的连通性,因此必须先配置公网路由域,后配置GRE隧道和通过GRE隧道连通的私网路由域。

图5-35从路由器R1发送到路由器Internet的数据包分析
3.GRE隧道的工作流程
GRE VPN隧道的工作流程为:隧道起点路由查找,加封装,承载协议路由转发,中途转发,解封装,隧道终点路由查找。在图5-36中,以GRE VPN典型配置为例简要说明了数据通过GRE隧道进行发送的工作流程。

图5-36 GRE VPN隧道的工作流程
1.1校园网拓扑设计与技术选择

隧道起点路由查找:位于总部私有网络的PC向分支机构发送数据,数据包的源、目的IP地址为私有地址。数据包被发送到局域网的出口设备R1,路由器R1查看IP路由表,发现匹配目的地址的路由条目的出接口为Tunnel 0,于是将数据包从Tunnel 0接口向外发送。
加封装:Tunnel 0接口是一个虚拟的接口,不能直接发送数据,所有数据必须经过实际物理接口转发。Tunnel 0接口的封装模式为GRE over IP,也就是使用GRE将原始数据包封装在IP数据包中,因此在转发之前,需要为使用私有地址标识的IP数据包添加GRE封装头部,并添加使用外层地址标识的IP头部。外层IP地址的源地址为路由器R1向路由器R2发送数据的出接口,也就是Fa 0/1接口的IP地址。外层IP地址的目的地址为GRE隧道配置中的目的地址。通过对比配置命令可以知道,外层IP头部的源地址为60.135.1.2,目的地址为222.5.7.2,他们都是公有地址。
承载协议路由转发:路由器R1查看外层IP头部的目的地址,通过查找IP路由表确定真正的物理出接口为Fa 0/1接口。
中途转发:使用公有IP地址标识的数据包从路由器R1的Fa 0/1接口发送出去,通过整个Internet最终传送到路由器R2。IP公网中的路由器只会查看数据包的外层IP地址,不会看到GRE封装,也不会看到内层的私网IP数据包。
解封装:路由器R2从Tunnel 0接口接收到数据包,检查外层IP头部中的Protocol字段,发现上层协议为GRE,表示外层IP头部里面还有一层GRE封装。路由器R2解开外层的IP头部和GRE头部,得到内层的私网IP数据包。
隧道终点路由查找:路由器R2得到最终的私网IP数据包,处理方法与从普通接口接收到的IP数据包相同,即查找路由表,最终把数据包转发到分支机构的私有网络中。
GRE VPN的优点是配置简单、容易理解、支持IP组播和动态路由协议、支持多种网络协议,但是GRE VPN也有缺乏安全性、布署复杂连接关系时工作量巨大的缺点。
5.4.3 IPSec VPN技术及配置
主要内容

项目导入

IPsec由两大部分组成,一是建立安全数据传输的密钥交换协议,二是保护数据包的封装协议。前者为Internet密钥交换(IKE)协议,后者包括封装安全载荷协议(ESP)和报文头验证协议(AH)。
(1)IPSec
IPSec(Internet Protocol Security,IP协议安全性)是通过对IP数据包进行加密和认证来保护IP协议的网络协议框架。IPSec通过验证算法和加密算法防止数据遭受篡改和窃听等安全威胁,大大提高了安全性。
IPSec是一种网络层安全保障机制,可以实现数据的机密性、完整性和源验证。IPSec实现于网络层,因此上层的TCP、UDP以及各种应用层协议均可以受到IPSec的保护。IPSec并不是一个单独的协议,而是由封装协议、密钥协商协议和多种开放标准的加密、校验、验证算法构成的协议框架。如图5-37所示,IPSec是一个可扩展的体系,它并不受限于任何一种特定的协议和算法。
(2)IPSec VPN
IPSec VPN是利用IPSec隧道实现的三层VPN。IPSec对IP数据包的封装、加密和验证能力使其可以被用来建立安全的VPN隧道,跨越公共网络传送私有IP数据包。IPSec VPN 利用封装和加密机制来实现数据的机密性,使用哈希算法来确保数据的完整性,使用密码或数字证书来验证网络另一端的身份。IPSec VPN可以部署在安全网关(如防火墙)之间、主机与安全网关之间以及主机与主机之间。
IPSec VPN也具有配置复杂、消耗CPU资源较多、增加网络延迟、不利于语音视频等实时性要求强的应用、不支持IP组播和动态路由协议等缺点。
(3)IPSec VPN使用的数据加密和校验算法
加密算法是一个数学函数,它将明文消息与密钥合并,得到无法解读的密文。。由于IPSec VPN使用的都是公开的加密算法,数据加密的关键就是通信双方必须预先协商好加密密钥。IPSec VPN可以使用的数据加密算法包括DES、3DES和AES,另外,IPSec VPN还可以使用RSA进行数字签名方式的身份验证,并使用DH(Diffie&Hellman)进行密钥交换。
校验算法可以验证数据的完整性,也叫做哈希(Hash)算法。同一种哈希算法,不管输入的数据长度是多少,结果都是定长的。因此,哈希算法具有单向性、不可逆性。
HMAC(Hash Message Authentication Code)进一步提高了安全性,HMAC对单输入哈希算法进行了改进,收发双方共享一个MAC密钥,计算摘要时不仅输入原始数据,还要输入MAC密钥
IPSec VPN可以使用两种数据校验算法:HMAC-MD5 Message Digest,消息摘要算法第五版)和HMAC-SHA-1(Secure Hash Algorithm,安全散列算法)。
(1)IPSec安全协议
IPSec通过AH和ESP两个安全协议对原始数据进行封装,实现数据在网络上传输的机密性、完整性和真实性。
①AH(Authentication Header,报文头验证协议):主要提供的功能有数据源验证、数据完整性校验和防报文重放功能。AH协议不能加密数据报文。当网络不要求或不允许有机密性时,可以使用AH协议。AH的协议号为51。
②ESP(Encapsulating Security Payload,封装安全载荷协议):除提供AH协议的所有功能外,还可提供对IP报文的加密功能。ESP协议通过加密IP数据包提供机密性。ESP的协议号为50。
由于ESP协议能提供数据加密功能,所以比AH协议使用更广泛。另外,还可以将AH协议与ESP协议结合使用,但由于开销较大,因而不推荐使用。
(2)IPSec工作模式
无论是AH,还是ESP,都有两种工作模式:传输模式和隧道模式。下面以ESP协议为例讲解这两种工作模式的特点和区别。
①传输模式(Transport Mode):通常用于保护端到端主机之间的安全性。图5-38为IPSec传输模式的封装示意图,IPSec使用加密算法将原始数据包中的TCP(或UDP)头部、应用层数据、ESP尾部与加密密钥结合计算为密文,并使用校验算法将ESP头部、密文与校验密钥结合计算为ESP验证数据。IPSec传输模式将ESP头部放在密文的前面,将ESP验证数据放在密文的后面,并将原始IP数据包的头部拿出来放在ESP头部的前面。传输模式的IPSec封装会保留原始的IP数据包头部信息,原始IP数据包头部不参与运算。

图5-38 IPSec传输模式封装示意图
在图5-39中,PC与Server位于同一个内部网络,他们之间是全局可路由的。在这里,使用IPSec传输模式的目的是为PC与Server之间的数据流量进行安全保护。PC向Server发出不加密的原始数据,数据在从路由器R1向外发出时,原始数据被加密。当加密数据到达路由器R2时,数据被解密并发送到Server。

图5-39 IPSec传输模式隧道化过程
在图中,数据的加密由路由器实现,相当于两台路由器在内部网络中建立了一个数据的加密隧道,这就是IPSec VPN的传输模式。使用传输模式的前提是数据的收发双方必须是全局可路由的。另外,数据的加密、解密也可以在PC和Server的操作系统中实现,即主机与主机之间的IPSec传输模式。
②隧道模式(Tunnel Mode):隧道模式通常用于保护站点到站点之间的安全性。图为IPSec隧道模式的封装示意图,IPSec使用加密算法将原始数据包中的IP头部、TCP(或UDP)头部、应用层数据、ESP尾部与加密密钥结合计算为密文,并使用校验算法将ESP头部、密文与校验密钥结合计算为ESP验证数据。IPSec隧道模式将ESP头部放在密文的前面,将ESP验证数据放在密文的后面,并将新的IP头部放在ESP头部的前面。使用隧道模式的IPSec封装,将不会保留原始的IP数据包头部。用户的整个IP数据包被用来计算ESP头部,且被加密。

IPSec隧道模式通常用来搭建站点到站点IPSec VPN。在图5-41中,PC与Server分别位于两个距离较远的局域网内部,均配置了私有地址。两个局域网分别以路由器R1和R2作为Internet出口设备,通过NAT技术,将内部私有地址转换为公有地址,从而访问Interent。使用隧道模式的IPSec VPN,可以像GRE VPN一样在公共网络上建立用户私有的VPN隧道。但是与GRE VPN不同的是,IPSec VPN可以对数据进行加密、校验和身份验证。由于数据的通信双方PC与Server的私有IP地址在Internet上不可路由,所以使用隧道模式的IPSec VPN,会将用户的原始数据全部加密,放在VPN隧道中传输,并为数据包封装使用公有地址标识的新IP头部。隧道模式的IPSec封装的外层IP头部在Internet中是全局可路由的。
1.1拓扑设计

图5-41 IPSec隧道模式隧道化过程
IPSec传输模式的目的是直接保护端到端的数据通信,而IPSec隧道模式的目的是建立站点到站点的VPN隧道,保护局域网之间的特定或全部数据。想要搭建站点到站点的IPSec VPN,只能使用隧道模式。而如果使用IPSec保护GRE隧道的数据,即搭建站点到站点的GRE over IPSec VPN,则既可以使用隧道模式,也可以使用传输模式。隧道模式由于隐藏了原始IP头部,因而安全性更好。但隧道模式有一个额外的IP头部,因此隧道模式比传输模式占用更多的带宽。具体选择哪种封装模式,需要在性能和安全之间权衡。
主要内容

(3)IPSec SA
安全关联(Security Association,SA)是构成IPSec的基础。SA是两个通信实体经协商建立起来的一种协定,比如使用哪种封装安全协议、工作模式、加密算法、密钥以及密钥的生存周期等。通信的双方只要符合SA约定的内容,就可以建立SA,进而对数据进行保护。SA由三元组来唯一标识,包括安全参数索引(SPI)、目的IP地址、安全协议标识符。
SA是单向的,想要在两个实体之间进行双向通信,最少需要in和out两个SA来分别对两个方向的数据流进行安全保护。SA又是与协议相关的,两台路由器之间可以建立AH协议的SA,也可以建立ESP协议的SA,如果同时使用了AH和ESP,则每台路由器都会针对每一种协议来建立一个独立的SA。
一个SA包括以下安全参数:
加密算法、校验算法、密钥长度和其他加密参数;
校验算法所使用的会话密钥(HMAC);
应用SA的网络流量描述(ACL);
IPSec封装协议(AH或ESP);
IPSec工作模式(隧道模式或传输模式)。
IPSec SA可以由手工或IKE自动协商两种方式创建。使用手工方式创建的SA会一直有效,除非手工删除。IKE自动协商方式创建的SA既可手工删除,也可以以时间或数据流量为周期自动更新或删除。
3.IKE基本原理
(1)IKE概述
要在两台路由器之间建立IPSec VPN,就必须选择使用哪种封装协议、工作模式、加密算法、校验算法以及加密和校验过程中所需的密钥。这些参数就是IPSec SA,建立IPSec SA有两种方式:手工或通过IKE自动协商。其中,手工方式建立SA的配置较为繁琐,而且难以定时更新SA和密钥,因此在实际工程中建议使用IKE自动协商,建立IPSec SA。
IKE(Internet Key Exchange,Internet 密钥交换协议)为IPSec提供了自动协商交换密钥、建立安全关联的服务,使用IKE能够简化IPSec的配置和管理。IKE协议属于一种混合型协议,建立在由ISAKMP(Internet Security Association Key Management Protocol,Internet安全关联和密钥管理协议)定义的一个框架上。
IKE提供身份验证功能,中小型企业常使用预共享密钥(Pre-Shared Key)验证,大型企业可使用RSA数字签名验证。IKE具有一套自保护机制,可以在不安全的网络上安全地分发密钥、验证身份、建立IPSec SA。IKE的精髓在于它永远不在不安全的网络上直接传送密钥,而是通过一系列数据的交换,使得通信双方最终计算出共享密钥,即使第三方(黑客)截获了双方用于计算密钥的所有交换数据,也不足以计算出真正的密钥。
IKE的核心技术是DH(Diffie Hellman)密钥交换技术。DH密钥交换是一种公共密钥加密系统。利用DH交换技术,可以在一个不受保护的通信信道上,在交换双方建立一个安全的共享密钥会话。IKE使用Diffie Hellman算法进行密钥交换,工作在为ISAKMP协议指定的UDP端口500上。
(2)IKE在IPSec协议中的作用
IKE在IPSec协议的作用如下:
IKE可以降低手工布署IPSec VPN的复杂度;
IKE使用Diffie-Hellman交换,在不安全的网络上安全地分发密钥,验证身份;
IKE定时更新SA和密钥,而且各SA所使用的密钥互不相关,从而为IPSec提供完善前向安全性(Perfect Forward Security,PFS);
IKE可以为IPSec自动重新建立SA,从而为IPSec提供抗重播服务。
首先协商好保护IKE协商本身的安全参数,即IKE SA。这一协商通过交换IKE的提议(Proposal)实现。IKE提议描述了期望在IKE协商过程中所使用的安全参数,包括加密算法、校验算法、身份验证方法、DH组以及IKE SA的生存时间等。因此在配置IPSec VPN时,需要为IKE和IPSec各配置一套加密和校验算法.
(3)IKE与IPSec的关系
IKE和IPSec的工作流程如下。
① 当数据准备从出接口向外发送时,需要进入IPSec隧道。路由器首先检查IPSec SA是否已经建立,如果IPSec SA已经建立,则直接将数据放入IPSec隧道发送出去。
②如果还没有建立IPSec SA,则路由器会检查IKE SA是否已经配置并建立,如果IKE SA已经建立,则路由器根据IKE策略所指定的内容协商建立IPSec SA。
③如果IKE SA还没有建立,路由器会使用预共享密钥或数字证书方式建立IKE SA,并进行密钥交换,最终建立IPSec SA,为数据包提供相应的安全服务。
1.1拓扑设计
图5-42描述了IKE与IPSec的关系。IKE为IPSec提供自动协商交换密钥、建立SA的服务,而IPSec安全协议负责提供实际的安全服务。

图5-42 IKE与IPSec的关系
4.IPSec VPN典型配置案例
本实验模拟了一个组织的总部和分支机构之间通过IPSec VPN实现广域网互联的典型案例。
在图5-43中,路由器R1为总部的Internet出口设备,路由器R2为分支机构的Internet出口设备,路由器Internet用来模拟整个国际互联网。
本案例将在路由器R1和R2上创建使用预共享密钥验证方式的IKE + IPSec VPN,采用ESP封装,对原始数据进行加密传输,工作模式为隧道模式,并使用静态路由实现内部网络互联。
1.1 拓扑设计

图5-43 IPSec VPN典型配置案例拓扑图
(1)配置设备物理接口IP地址
按照拓扑图中的地址规划,为路由器R1、R2、Internet的物理接口配置IP地址。为PC1和Server配置IP地址、子网掩码和默认网关。
(2)配置公网路由
IPSec VPN隧道是否连通取决于实际物理网络的公网连通性。在实际工程中,局域网的Internet出口设备上必须配置指向服务提供商的默认路由,本案例在路由器R1和R2上配置静态默认路由。
①配置路由器R1的公网路由
R1(config)#ip route 0.0.0.0 0.0.0.0 60.135.1.1
② 配置路由器R2的公网路由
R2(config)#ip route 0.0.0.0 0.0.0.0 222.5.7.1
③ 配置路由器Internet的公网路由:因为路由器Internet的路由表 中已经有本拓扑中的所有公网地址段,所以不需要为它配置任何 静态路由或动态路由协议。
(4)配置路由器R1的IPSec VPN
①配置安全ACL:创建一个扩展ACL,名称为IPSec-VPN。在ACL中添加一条编号为10的规则,用来定义IPSec VPN感兴趣的数据流量,即什么样的数据包要通过IPSec VPN隧道进行加密传输。在这里,只对从总部内部网络到分支内部网络的数据流量进行加密,其他流量不进行加密。
R1(config)#ip access-list extended IPSec-VPN
R1(config-ext-nacl)#10 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
R1(config-ext-nacl)#exit
提示:在VPN配置中的ACL的作用并不是过滤数据包。对于IPSec VPN中配置的ACL,规则为permit的语句表示匹配的数据包需要进入VPN隧道,而规则为deny的语句表示对匹配的数据包进行正常路由转发,不进入VPN隧道。
②配置IKE策略:创建一个优先级为10的ISAKMP策略,即IKE策略。ISAKMP策略可以有多个,编号越小,优先级越高。如果配置了多个ISAKMP策略,双方路由器将采用编号最小,参数相同的策略。
R1(config)#crypto isakmp policy 10
R1(config-isakmp)#authentication pre-share !配置IKE身份验证方式为预共享密钥
R1(config-isakmp)#encryption aes 256 !配置IKE协商时采用的加密算法为AES 256 bit
R1(config-isakmp)#hash sha !配置IKE协商时采用的校验算法为SHA-1
R1(config-isakmp)#group 5 ! 配置IKE采用的DH组为组5
R1(config-isakmp)#exit
路由器的配置中包含一个默认的IKE策略。默认的IKE策略所采用的的加密算法为DES、校验算法为SHA-1,DH组为组1,身份验证方式为RSA数字签名。
使用下面的命令,可以查看刚刚配置的IKE策略,以及系统中已经存在的默认策略。
R1#show crypto isakmp policy
Global IKE policy
Protection suite of priority 10
encryption algorithm: AES - Advanced Encryption Standard (256 bit keys).
hash algorithm: Secure Hash Standard
authentication method: Pre-Shared Key
Diffie-Hellman group: #5 (1536 bit)
lifetime: 86400 seconds, no volume limit
Default protection suite
encryption algorithm: DES - Data Encryption Standard (56 bit keys).
hash algorithm: Secure Hash Standard
authentication method: Rivest-Shamir-Adleman Signature
Diffie-Hellman group: #1 (768 bit)
lifetime: 86400 seconds, no volume limit
③配置IKE对等体的预共享密钥
R1(config)#crypto isakmp key 0 123456 address 222.5.7.2
!配置路由器R1的IKE对等体——路由器R2(IP地址为222.5.7.2)的预共享密钥为123456,用来进行身份验证。
④配置IPSec转换集
R1(config)#crypto ipsec transform-set IPSec-R2 esp-aes 256 esp-sha-hmac
!创建名称为IPSec-R2的IPSec转换集,用来对实际数据进行加密和校验,封装协议为ESP,加密算法为AES 256 bit,校验算法为HMAC-SHA-1。
R1(cfg-crypto-trans)#mode tunnel !配置IPSec隧道的工作模式为隧道模式(默认模式)
R1(cfg-crypto-trans)#exit
IPSec转换集可用的封装协议包括ESP、AH和AH+ESP三种方式,可用的加密算法包括DES、3DES和AES,可用的校验算法包括HMAC-MD5、HMAC-SHA-1。IPSec隧道的默认工作模式为隧道模式,因此在这里也可以不用配置mode tunnel命令。
⑤配置IPSec加密图:创建名称为Map-R2的IPSec加密图。因为一个接口只能应用一个IPSec加密图,所以如果需要为路由器配置到达多个分支的IPSec VPN,那么每个VPN就需要使用不同的编号。这里使用的编号是10,该编号只在本地有效。最后添加的ipsec-isakmp参数表示使用IKE进行密钥协商、建立IPSec SA。
R1(config)#crypto map Map-R2 10 ipsec-isakmp
% NOTE: This new crypto map will remain disabled until a peer
and a valid access list have been configured.
R1(config-crypto-map)#match address IPSec-VPN !配置IPSec VPN感兴趣的流量的ACL
R1(config-crypto-map)#set peer 222.5.7.2 ! 配置IPSec VPN对等体的IP地址
R1(config-crypto-map)#set transform-set IPSec-R2 !配置转换集,对感兴趣的流量进行保护
R1(config-crypto-map)#exit
⑥将IPSec加密图应用到出接口
R1(config)#interface fastEthernet 0/1
R1(config-if)#crypto map Map-R2
*Mar 1 00:56:49.503: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
R1(config-if)#exit
(5)配置路由器R2的IPSec VPN
R2(config)#ip access-list extended IPSec-VPN
R2(config-ext-nacl)#10 permit ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255
R2(config-ext-nacl)#exit
R2(config)#crypto isakmp policy 10
R2(config-isakmp)#authentication pre-share
R2(config-isakmp)#encryption aes 256
R2(config-isakmp)#hash sha
R2(config-isakmp)#group 5
R2(config-isakmp)#exit
R2(config)#crypto isakmp key 0 123456 address 60.135.1.2
R2(config)#crypto ipsec transform-set IPSec-R1 esp-aes 256 esp-sha-hmac
R2(cfg-crypto-trans)#exit
R2(config)#crypto map Map-R1 10 ipsec-isakmp
R2(config-crypto-map)#match address IPSec-VPN
R2(config-crypto-map)#set peer 60.135.1.2
R2(config-crypto-map)#set transform-set IPSec-R1
R2(config-crypto-map)#exit
R2(config)#interface fastEthernet 0/1
R2(config-if)#crypto map Map-R1
R2(config-if)#exit
注意,在路由器R2的IPSec VPN配置中,安全ACL的源IP地址范围和目的IP地址范围与路由器R1正好相反。路由器R2的其他配置命令要与路由器R1相对应。
(6)配置私网路由
在路由器R1和R2上分别配置指向对方内部局域网的静态路由。
R1(config)#ip route 192.168.2.0 255.255.255.0 60.135.1.1
R2(config)#ip route 192.168.1.0 255.255.255.0 222.5.7.1
对于本配置案例来说,不配置这两条静态路由也不影响实验结果,因为之前已经为路由器配置了指向相同下一跳IP地址的静态默认路由。在这里配置明细静态路由是为了明确IPSec VPN的私网路由配置方法。由于IPSec隧道只支持单播,不支持组播,所以通过IPSec隧道不能传输动态路由协议的信息。IPSec VPN的私网路由只能使用静态路由的方式来配置。
(7)验证IPSec VPN
在PC上打开命令行,使用ping命令测试与Server之间的连通性。由于IPSec VPN隧道只会在有感兴趣流量时才开始建立。在隧道建立之初,IKE协商会花费一点时间,所以第一个数据包会超时。当IPSec隧道最终建立后,所有的后续ping包就都可以通了。
PC与Server可以互相访问后,可以使用以下命令验证IPSec VPN的工作状态。
①查看IKE SA的状态
R1#show crypto isakmp sa
dst src state conn-id slot status
222.5.7.2 60.135.1.2 QM_IDLE 1 0 ACTIVE
②查看IPSec SA的状态
R1#show crypto ipsec sa
interface: FastEthernet0/1
Crypto map tag: Map-R2, local addr 60.135.1.2
!本端出接口应用的IPSec加密图为Map-R2,本端的IP地址为60.135.1.2。
protected vrf: (none)
local ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0)
remote ident (addr/mask/prot/port): (192.168.2.0/255.255.255.0/0/0)
!感兴趣的数据流为192.168.1.0/24到192.168.2.0/24。
current_peer 222.5.7.2 port 500
!远端对等体为222.5.7.2,使用的ISAKMP端口为UDP 500。
PERMIT, flags={origin_is_acl,}
#pkts encaps: 4, #pkts encrypt: 4, #pkts digest: 4
#pkts decaps: 4, #pkts decrypt: 4, #pkts verify: 4
!加密了4个数据包,解密了4个数据包。
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 1, #recv errors 0
!本端加密终结点为60.135.1.2,远端加密终结点为222.5.7.2。
local crypto endpt.: 60.135.1.2, remote crypto endpt.: 222.5.7.2
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/1
current outbound spi: 0xE8E4D49F(3907310751)
!以下为入方向的IPSec SA。
inbound esp sas:
spi: 0x54C4BF65(1422180197)
transform: esp-256-aes esp-sha-hmac ,
!IPSec转换集为esp-256-aes esp-sha-hmac,即使用ESP封装协议,加密算法为AES 256 bit,校验算法为HMAC-SHA-1。
in use settings ={Tunnel, }
! IPSec工作模式为隧道模式。
conn id: 2001, flow_id: SW:1, crypto map: Map-R2
sa timing: remaining key lifetime (k/sec): (4596481/2669)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE
inbound ah sas:
inbound pcp sas:
(出方向的SA省略)
③查看IPSec VPN摘要
R1#show crypto session
Crypto session current status
Interface: FastEthernet0/1
Session status: UP-ACTIVE
Peer: 222.5.7.2 port 500
IKE SA: local 60.135.1.2/500 remote 222.5.7.2/500 Active
IPSEC FLOW: permit ip 192.168.1.0/255.255.255.0 192.168.2.0/255.255.255.0
Active SAs: 2, origin: crypto map
(8)配置NAT与IPSec VPN兼容
在实际工程中,局域网的出口设备通常需要配置NAT,将内部私有地址转换为外部可路由的公有地址。假设路由器R1的NAT配置如下。
R1(config)#ip access-list standard NAT
R1(config-std-nacl)#10 permit 192.168.1.0 0.0.0.255
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip nat inside
R1(config)#interface fastEthernet 0/1
R1(config-if)#ip nat outside
R1(config)#ip nat inside source list NAT interface fastEthernet 0/1 overload
为路由器R1配置NAT后,从PC再次ping服务器,会提示“目标不可达”。原因在于路由器R1的接口FastEthernet 0/1既是NAT的出接口,也应用了IPSec加密图,是IPSec VPN的出接口。当数据包从这个接口向外发出之前,路由器的操作是“先做NAT,后进入VPN隧道”。在上面的配置中,所有源地址为192.168.1.0/24的数据包都会被转换为路由器R1的FastEthernet 0/1接口的IP地址,所以与IPSec VPN的配置冲突了。解决NAT与IPSec VPN配置冲突的办法是修改NAT的配置,对从192.168.1.0/24发送到192.168.2.0/24的数据流不进行地址转换。
R1(config)#no ip nat inside source list NAT interface fastEthernet 0/1 overload
R1(config)#no ip access-list standard NAT
R1(config)#ip access-list extended NAT
R1(config-ext-nacl)#5 deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
R1(config-ext-nacl)#10 permit ip 192.168.1.0 0.0.0.255 any
R1(config-ext-nacl)#exit
R1(config)#ip nat inside source list NAT interface fastEthernet 0/1 overload
(9)清除并重建VPN隧道
当路由器的IKE或IPSec策略、转换集、加密图等命令配置错误时,有可能会建立不正确的IKE SA和IPSec SA。这时,如果只是修改配置,并不能使网络正常工作。因为IKE SA和IPSec SA的默认生存时间比较长。使用以下clear命令可以清除已经建立的IKE SA和IPSec SA,使路由器以新的配置建立安全关联。
R1#clear crypto isakmp !清除IKE SA
R1#clear crypto sa ! 清除所有SA,包括IPSec SA
(10)IPSec VPN路由分析
在本配置案例的第6步,配置私网路由时,静态路由的目的网络为远端局域网内部私有地址,下一跳却指向服务提供商的公有地址。这里有一个有趣的问题,发往远端局域网的私有数据是否直接被发送到Internet了?Internet不是不能路由使用私有地址标识的数据包吗?事实上,使用私有地址标识的原始数据包是被ESP封装,加密发送出去的。
下面举一个例子,当PC向Server发数据包时,原始数据包的源IP地址为192.168.1.2,目的IP地址为192.168.2.2。下面分析这个数据包是怎样匹配路由并通过VPN隧道发送的。
①原始数据包被发送到路由器R1,路由器查看路由表,目的地址192.168.2.2匹配第6步配置的静态路由,因此路由器会根据这条路由的下一跳IP地址60.135.1.1判断出接口为FastEthernet 0/1。
②原始数据包尝试从FastEthernet 0/1接口离开路由器,但是这个接口上配置了crypto map,而加密图中感兴趣的数据流匹配该数据包,因此数据包整个被加密,并在ESP头部前面添加了外层IP头部,源IP地址为FastEthernet 0/1接口的IP地址60.135.1.2,目的IP地址为加密图中的对端IP地址222.5.7.2。
③原始数据包加密后产生了新的IP数据包,路由器R1需要再次查看路由表,新数据包的外层IP头部中的目的地址222.5.7.2匹配默认路由,因此应该通过FastEthernet 0/1接口向外发送。外层IP头部不匹配FastEthernet 0/1接口的加密图中的感兴趣数据流,因此被直接通过该接口发送出去。
5.4.4 GRE over IPSec VPN技术及配置
主要内容

项目导入
1.GRE over IPSec VPN技术
GRE是一种通用的封装协议,可以支持多种网络层协议。GRE VPN隧道的实现采用了虚拟的隧道(Tunnel)接口,可以支持IP单播、组播和广播。
因此GRE VPN可以支持各种动态路由协议。但是GRE VPN不能保证数据的机密性和完整性,也不能验证数据的来源。IPSec是针对IP数据包设计的,IPSec VPN可以实现数据的机密性、完整性和来源验证,但是IPSec VPN不支持组播,因而不支持动态路由协议,基于隧道嵌套的GRE over IPSec VPN可以解决这个问题。
(1)GRE over IPSec的封装过程
GRE over IPSec的封装过程如图5-44所示,原始IP数据包被封装在GRE隧道封装包中,GRE隧道封装包又被封装在IPSec隧道封装包中,并被发送到公网上。使用GRE over IPSec时,GRE隧道封装与IPSec隧道封装是同时进行又各自独立的。

图5-44 GRE over IPSec的封装过程
(2)GRE over IPSec的封装格式
由于IPSec的工作模式有传输模式和隧道模式两种,所以GRE over IPSec最终生成的数据包也有两种结构。如图5-45所示是隧道模式的GRE over IPSec封装示意图,内层的私网数据包被GRE封装为公网数据包,外层IP头部中的源IP地址和目的IP地址为公网地址。
该封装包又被IPSec加密封装,在ESP头部前面又添加了一个新的公网IP头部。通过分析GRE VPN和IPSec VPN的配置,可以了解到GRE封装包的外层IP头部与IPSec封装包的外层IP头部的源、目的IP地址是一致的。因此,隧道模式的GRE over IPSec封装实际上为每个数据包增加了20个字节的IP头部开销。

图5-45 GRE over IPSec隧道模式封装示意图
图5-46是传输模式的GRE over IPSec封装示意图。使用IPSec的传输模式,直接将GRE的外层IP头部拿出来作为新的IP数据包的头部信息来源。因为GRE外层IP头部的源、目的IP地址正好是IPSec隧道两端的公有地址,所以GRE over IPSec VPN的IPSec隧道是可以使用传输模式的。

图5-46 GRE over IPSec传输模式封装示意图
2.使用GRE over IPSec VPN互联老校区和威海校区
无论使用GRE VPN、IPSec VPN还是GRE over IPSec VPN,都是在局域网的Internet出口设备上进行部署,老校区的Internet出口设备为防火墙Firewall_1,威海校区的Internet出口设备为防火墙Firewall_2,下面将在这两台设备上部署GRE over IPSec VPN
(1)配置设备物理接口的IP地址
按照表5-3中的地址规划,为所有路由器、交换机配置IP地址。
(2)配置公网路由
在Firewall_1和Firewall_2上各自指向服务提供商的静态默认路由
Firewall_1(config)#ip route 0.0.0.0 0.0.0.0 219.1.2.1
Firewall_2(config)#ip route 0.0.0.0 0.0.0.0 61.1.2.1
路由器Internet只负责公网路由,因此只需要配置接口IP地址,有两条直连公网路由即可,不需要配置任何静态或动态路由协议
配置好公网路由后,测试Firewall_1与Firewall_2之间的公网地址连通性。
(3)配置GRE隧道
对于GRE over IPSec VPN来说,私有网络的原始数据包是先进入GRE隧道,后进入IPSec隧道的,因此应先配置GRE隧道。
①配置老校区防火墙Firewall_1的GRE隧道。
Firewall_1(config)#interface tunnel 0
Firewall_1(config-if)#ip address 172.31.0.17 255.255.255.252
Firewall_1(config-if)#tunnel source fastEthernet 0/1
Firewall_1(config-if)#tunnel destination 61.1.2.2
Firewall_1(config-if)#exit
②配置威海校区防火墙Firewall_2的GRE隧道。
Firewall_2(config)#interface tunnel 0
Firewall_2(config-if)#ip address 172.31.0.18 255.255.255.252
Firewall_2(config-if)#tunnel source fastEthernet 0/1
Firewall_2(config-if)#tunnel destination 219.1.2.2
Firewall_2(config-if)#exit
由于GRE隧道接口已经up up,所以在实验过程中,配置好GRE隧道后,就可以配置OSPF等路由协议了。但是在实际工程中,应先配置好外层的IPSec隧道,使用IPSec对GRE隧道中的任何数据包,包括OSPF数据包进行保护。将GRE over IPSec VPN隧道全部配置完后,再配置路由协议。
(4)配置IPSec隧道
① 配置老校区防火墙Firewall_1的IPSec隧道。
Firewall_1(config)#ip access-list extended VPN
Firewall_1(config-ext-nacl)#10 permit gre host 219.1.2.2 host 61.1.2.2
Firewall_1(config-ext-nacl)#exit
GRE隧道中传送的所有数据包都被封装为公网数据包,GRE外层的IP头部中,源IP地址为Tunnel 0接口配置中FastEthernet 0/1接口的IP地址219.1.2.2,目的IP地址为tunnel destination,即61.1.2.2。因此IPSec的感兴趣流量应为防火墙物理接口公网地址219.1.2.2和61.1.2.2之间的GRE数据流。
Firewall_1(config)#crypto isakmp policy 1 !配置IKE策略
Firewall_1(config-isakmp)#authentication pre-share
Firewall_1(config-isakmp)#encryption aes 256
Firewall_1(config-isakmp)#hash sha
Firewall_1(config-isakmp)#group 5
Firewall_1(config-isakmp)#exit
Firewall_1(config)#crypto isakmp key 0 123456 address 61.1.2.2
!针对隧道对端61.1.2.2配置IKE的预共享密钥为123456。
Firewall_1(config)#crypto ipsec transform-set IPSEC-WEIHAI esp-aes 256 esp-sha-hmac
Firewall_1(cfg-crypto-trans)#mode transport
Firewall_1(cfg-crypto-trans)#exit
!创建名称为IPSEC-WEIHAI的IPSec转换集,配置工作模式为传输模式。
Firewall_1(config)#crypto map MAP-WEIHAI 10 ipsec-isakmp
Firewall_1(config-crypto-map)#match address VPN
Firewall_1(config-crypto-map)#set peer 61.1.2.2
Firewall_1(config-crypto-map)#set transform-set IPSEC-WEIHAI
Firewall_1(config-crypto-map)#exit
!配置IPSec加密图,引用之前配置的安全ACL、IPSec转换集,并指定隧道对端的IP地址。
Firewall_1(config)#interface fastEthernet 0/1
Firewall_1(config-if)#crypto map MAP-WEIHAI
Firewall_1(config-if)#exit
!将IPSec策略应用到出接口。
② 配置威海区防火墙Firewall_2的IPSec隧道
Firewall_2(config)#ip access-list extended VPN
Firewall_2(config-ext-nacl)#10 permit gre host 61.1.2.2 host 219.1.2.2
Firewall_2(config-ext-nacl)#exit
!配置安全ACL,源、目的IP地址与Firewall_1对调。
Firewall_2(config)#crypto isakmp policy 1 !配置IKE策略
Firewall_2(config-isakmp)#authentication pre-share
Firewall_2(config-isakmp)#encryption aes 256
Firewall_2(config-isakmp)#hash sha
Firewall_2(config-isakmp)#group 5
Firewall_2(config-isakmp)#exit
Firewall_2(config)#crypto isakmp key 0 123456 address 219.1.2.2
!针对隧道对端219.1.2.2配置IKE的预共享密钥为123456。
Firewall_2(config)#crypto ipsec transform-set IPSEC-LAOXIAO esp-aes 256 esp-sha-hmac
Firewall_2(cfg-crypto-trans)#mode transport
Firewall_2(cfg-crypto-trans)#exit
!创建名称为IPSEC-LAOXIAO的IPSec转换集,配置工作模式为传输模式。
Firewall_2(config)#crypto map MAP-LAOXIAO 10 ipsec-isakmp
Firewall_2(config-crypto-map)#match address VPN
Firewall_2(config-crypto-map)#set peer 219.1.2.2
Firewall_2(config-crypto-map)#set transform-set IPSEC-LAOXIAO
Firewall_2(config-crypto-map)#exit
!配置IPSec加密图,引用之前配置的安全ACL、IPSec转换集,并指定隧道对端的IP地址。
Firewall_2(config)#interface fastEthernet 0/1
Firewall_2(config-if)#crypto map MAP-LAOXIAO
Firewall_2(config-if)#exit
! 将IPSec策略应用到出接口。
(5)验证GRE over IPSec隧道
①查看IKE SA:在Firewall_1和Firewall_2之间测试GRE隧道接口IP地址之间的连通性,由于GRE隧道中的所有流量都会进入IPSec隧道,所以防火墙会建立IKE SA和IPSec SA。
使用show crypto isakmp sa命令可以查看防火墙Firewall_1的IKE SA。使用show crypto ipsec sa命令可以查看防火墙Firewall_1的IPSec SA。
②使用Wireshark分析使用GRE over IPSec封装的数据包:在Firewall_1上测试GRE隧道的连通性,并使用Wireshark捕获防火墙Firewall_1与路由器Internet之间的数据包。
Firewall_1#ping 172.31.0.18
Sending 5, 100-byte ICMP Echos to 172.31.0.18, timeout is 2 seconds:
!!!!!
图5-47为Wireshark的数据包分析,被GRE封装的内部私有数据包被IPSec加密,无法看到原始内容。外层IP头部中的Protocol字段为ESP(协议号为50),表示外层IP数据包的内部是由ESP封装的数据。外层IP头部中的源IP地址和目的IP地址均为公有地址。

图5-47 GRE over IPSec数据包分析
(6)GRE over IPSec VPN与NAT的兼容性
如果单独使用IPSec VPN,则必须为NAT的ACL去掉内部私有网络之间的流量。但是如果使用GRE over IPSec,则不需要这样做。因为内部私有网络之间的流量都进入了GRE隧道,被封装为公有IP数据包,不会匹配NAT中ACL定义的流量,所以GRE over IPSec VPN与NAT互不影响。
这里是威海校区的Firewall_2的NAT配置。
Firewall_2(config)#ip access-list extended NAT
Firewall_2(config-ext-nacl)#10 permit ip 172.18.0.0 0.0.255.255 any
Firewall_2(config)#interface fastEthernet 0/0
Firewall_2(config-if)#ip nat inside
Firewall_2(config)#interface fastEthernet 0/1
Firewall_2(config-if)#ip nat outside
Firewall_2(config)#ip nat pool NAT-POOL 61.1.2.3 61.1.2.5 prefix-length 29
Firewall_2(config)#ip nat inside source list NAT pool NAT-POOL overload
启用NAT后,威海校区可以访问Internet中的公有地址,不会影响VPN的连通性。
5.4.5 使用OSPF路由协议互联 各个校区
主要内容

1.配置老校区核心交换机Core
到此为止,已经完成了老校区与新校区、青岛校区和威海校区的广域网部署。接下来,将在全网部署OSPF路由协议,实现各个校区的内部网络互通。
Core(config)#interface loopback 0
Core(config-if)#ip address 1.1.1.1 255.255.255.255
Core(config-if)#exit
!创建环回接口,用于OSPF的Router ID互联。
Core(config)#router ospf 1
Core(config-router)#router-id 1.1.1.1
Core(config-router)#network 1.1.1.1 0.0.0.0 area 0
Core(config-router)#network 172.31.0.0 0.0.0.3 area 0
Core(config-router)#network 172.31.0.8 0.0.0.3 area 0
Core(config-router)#network 172.31.0.20 0.0.0.3 area 0
Core(config-router)#exit
Core(config)#ip route 172.16.0.0 255.255.0.0 loopback 1
!配置一条静态路由,用来模拟指向老校区内部网络的静态路由。
Core(config)#router ospf 1
Core(config-router)#redistribute static
Core(config-router)#exit
!将Core中的所有静态路由重分发到OSPF中。
Core(config)#ip route 0.0.0.0 0.0.0.0 172.31.0.10
!配置静态默认路由,内部网络中所有的三层设备,包括三层交换机、路由器都需要配置指向Internet的默认路由。
2.配置老校区广域网路由器Laoxiao
Laoxiao(config)#interface loopback 0
Laoxiao(config-if)#ip address 2.2.2.2 255.255.255.255
Laoxiao(config-if)#exit
!创建环回接口,用于OSPF的Router ID互联。
Laoxiao(config)#router ospf 1
Laoxiao(config-router)#router-id 2.2.2.2
Laoxiao(config-router)#network 172.31.0.0 0.0.0.3 area 0
Laoxiao(config-router)#network 172.31.0.4 0.0.0.3 area 0
Laoxiao(config-router)#network 2.2.2.2 0.0.0.0 area 0
Laoxiao(config-router)#exit
3.配置新校区广域网路由器Xinxiao
Xinxiao(config)#router rip
Xinxiao(config-router)#version 2
Xinxiao(config-router)#no auto-summary
Xinxiao(config-router)#network 172.17.0.0
Xinxiao(config-router)#exit
!RIPv2基本配置。
Xinxiao(config)#interface loopback 0
Xinxiao(config-if)#ip address 3.3.3.3 255.255.255.255
Xinxiao(config-if)#exit
!创建环回接口,用于OSPF的Router ID互联。
Xinxiao(config)#router ospf 1
Xinxiao(config-router)#router-id 3.3.3.3
Xinxiao(config-router)#network 172.31.0.4 0.0.0.3 area 0
Xinxiao(config-router)#network 3.3.3.3 0.0.0.0 area 0
Xinxiao(config-router)#redistribute rip subnets
Xinxiao(config-router)#exit
!在OSPF路由协议配置中,将所有RIP路由(包括子网)重分发到OSPF中。
Xinxiao(config)#router rip
Xinxiao(config-router)#redistribute ospf 1 metric 5
Xinxiao(config-router)#exit
!将OSPF路由重分发到RIP中,配置种子度量值为5。
Xinxiao(config)#router ospf 1
Xinxiao(config-router)#summary-address 172.17.0.0 255.255.0.0
Xinxiao(config-router)#exit
!新校区的地址段为172.17.0.0/16,而路由器Xinxiao作为自治系统边界路由器,可以为OSPF配置ASBR外部路由汇总。
4.配置新校区核心交换机Core_1
Core_1(config)#router rip
Core_1(config-router)#version 2
Core_1(config-router)#no auto-summary
Core_1(config-router)#network 172.17.0.0
Core_1(config-router)#exit
5.配置新校区核心交换机Core_2
Core_2(config)#router rip
Core_2(config-router)#version 2
Core_2(config-router)#no auto-summary
Core_2(config-router)#network 172.17.0.0
Core_2(config-router)#exit
6.配置老校区出口防火墙Firewall_1
Firewall_1(config)#interface loopback 0
Firewall_1(config-if)#ip address 6.6.6.6 255.255.255.255
Firewall_1(config-if)#exit
!创建环回接口,用于OSPF的Router ID互联。
Firewall_1(config)#router ospf 1
Firewall_1(config-router)#router-id 6.6.6.6
Firewall_1(config-router)#network 172.31.0.8 0.0.0.3 area 0
Firewall_1(config-router)#network 172.31.0.16 0.0.0.3 area 0
Firewall_1(config-router)#network 6.6.6.6 0.0.0.0 area 0
Firewall_1(config-router)#exit
7.配置威海校区出口防火墙Firewall_2
Firewall_2(config)#interface loopback 0
Firewall_2(config-if)#ip address 7.7.7.7 255.255.255.255
Firewall_2(config-if)#exit
!创建环回接口,用于OSPF的Router ID互联。
Firewall_2(config)#router ospf 1
Firewall_2(config-router)#router-id 7.7.7.7
Firewall_2(config-router)#network 172.31.0.16 0.0.0.3 area 0
Firewall_2(config-router)#network 172.18.0.0 0.0.0.3 area 1
Firewall_2(config-router)#network 7.7.7.7 0.0.0.0 area 0
Firewall_2(config-router)#area 1 range 172.18.0.0 255.255.0.0
Firewall_2(config-router)#area 0 range 172.31.0.0 255.255.0.0
Firewall_2(config-router)#exit
! 防火墙Firewall_2是区域边界路由器,可以配置Area 0和Area 1的ABR路由汇总,其中威海校区属于Area 1,地址段为172.18.0.0/16。广域网属于Area 0,地址段为172.31.0.0/16。
8.配置威海校区核心交换机Weihai
Weihai(config)#interface loopback 0
Weihai(config-if)#ip address 8.8.8.8 255.255.255.255
Weihai(config-if)#exit
!创建环回接口,用于OSPF的Router ID互联。
Weihai(config)#router ospf 1
Weihai(config-router)#passive-interface loopback 1
Weihai(config-router)#passive-interface loopback 2
Weihai(config-router)#network 172.18.1.0 0.0.0.255 area 1
Weihai(config-router)#network 172.18.2.0 0.0.0.255 area 1
Weihai(config-router)#network 172.18.0.0 0.0.0.3 area 1
Weihai(config-router)#network 8.8.8.8 0.0.0.0 area 1
Weihai(config-router)#exit
!将模拟用户网段的Loopback 1和Loopback 2接口配置为被动接口
9.配置青岛校区核心交换机Qingdao
Qingdao(config)#interface loopback 0
Qingdao(config-if)#ip address 9.9.9.9 255.255.255.255
Qingdao(config-if)#exit
!创建环回接口,用于OSPF的Router ID互联。
Qingdao(config)#router ospf 1
Qingdao(config-router)#router-id 9.9.9.9
Qingdao(config-router)#network 172.31.0.20 0.0.0.3 area 0
Qingdao(config-router)#network 172.19.1.0 0.0.0.255 area 2
Qingdao(config-router)#network 172.19.2.0 0.0.0.255 area 2
Qingdao(config-router)#network 9.9.9.9 0.0.0.0 area 0
Qingdao(config-router)#passive-interface loopback 1
Qingdao(config-router)#passive-interface loopback 2
Qingdao(config-router)#area 2 range 172.19.0.0 255.255.0.0
Qingdao(config-router)#area 0 range 172.31.0.0 255.255.0.0
Qingdao(config-router)#exit
!将模拟用户网段的Loopback 1和Loopback 2接口配置为被动接口。路由器Qingdao是区域边界路由器,可以配置Area 0和Area 2的ABR路由汇总,其中青岛校区属于Area 2,地址段为172.19.0.0/16。
10.验证网络连通性
在每台设备上检查OSPF邻居表和IP路由表,并测试网络的连通性。
【任务归纳】
VPN技术分为站点到站点VPN和远程访问VPN。常见的站点到站点VPN包括MPLS VPN、GRE VPN、IPSec VPN。远程访问VPN包括SSL VPN、IPSec远程访问VPN和L2TP VPN。
MPLS VPN是由服务提供商负责搭建的VPN,用户只需购买服务提供商的VPN服务,不需要为VPN广域网购买单独的设备。用户不需要配置、管理VPN。对于新建的网络,只要用户的资金不太紧张,都推荐采用MPLS VPN技术方案。
GRE VPN利用用户现有的Internet连接建立广域网,GRE隧道的配置简单,但是GRE不提供任何的安全性。GRE隧道支持IP组播和动态路由协议,这是IPSec不能相比的
IPSec VPN也利用用户现有的Internet连接建立广域网,能够对用户数据进行加密、校验和身份验证等安全服务。IPSec隧道只支持单播数据流,如果企业需要在VPN广域网上运行动态路由协议,就不能单独使用IPSec VPN。



