二、GRE 虚拟专用网络概述
1、GRE 虚拟专用网络概述
GRE最初是一种封装方法的名称,不是指VPN。IETF首先在RFC1701中描述GRE,一个在任意一种网络协议上传送任意其它网络协议的封装方法。RFC1702描述了如何用GRE在IPv4网络上传送其它的网络协议。2000 年,Cisco 等公司又对 GRE协议进行了修订,称为GRE V2,标号为 RFC 2784。
GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX、)的数据报文进行封装,也可封装二层数据帧PPP、MPLS等,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。GRE采用了Tunnel(隧道)技术,是VPN(Virtual Private Network)的第三层隧道协议。
首先,GRE VPN部署多采用IP over IP模式,企业通过公用IP网络使用GRE VPN方式传送数据,实现点对点传输,可以通过IPv4网络传输也可以通过IPv4网络连接到IPv6网络中。
GRE VPN是第三层隧道协议,实际是直接使用GRE封装,对一些网络层协议(如IP和IPX)的数据报进行封装,构造Tunnel(隧道)的技术。根据传输协议的不同,可以分为GRE over IPv4 和GRE over IPv6 两种隧道模式。
GRE(通用路由封装协议)对于任何VPN体系都可以选择使用GRE封装,采用封装VRP体系的VPN隧道,GRE本身并没有对建立隧道、维护隧道、拆除隧道和数据安全的规范。
GRE的特点:支持多种协议和多播、能够用来创建弹性的VPN、支持多点隧道、能够实施QOS。
GRE的缺点:缺乏加密机制、隧道很消耗CPU、出现问题要进行DEBUG很困难、MTU和IP分片困难、没有标准的控制协议来保持GRE隧道。
2、GRE VPN封装
2.1、如何理解GRE VPN封装
一台PC终端将由应用层到传输层直到网络接口层的数据经过层层打包过程,就好似你自己炒的辣子鸡中国标准包裹经过快件公司的包装、然后贴上邮寄信息封签一样,要进入邮件运输公网行传递,然后通过经过一个又一个的中转站,最后到达目的地。
GRE VPN隧道是这个包裹要寄往国外,我们在填写邮寄信息使用的是中文,当到达进出口岸,得按照国际标准使用英文邮寄信息,并附检测报告。这就是使用一种国际标准进出口协议封装传送国内邮寄标准的协议的例子。收货人收到就不需要外层的英文邮寄信息,直接看中文的给某某人。
2.2、VPN封装格式
GRE规定在一种协议上封装并传送另一种协议的通用方法,为不同的协议分配不同的协议号。GRE 隧道不能配置二层信息,但可以配置 IP 地址。GRE 利用为隧道指定的实际物理接口完成转发。 上图中两个CPN之间通过协议A的网络传输,PCA设备发送B协议到对BCB,A协议称为承载协议,A的包称为承载包;B协议称为载荷协议,B的包称为载荷包。
因为隧道使用A协议不能直接传输B协议包,所以就以A协议方式来包裹B协议的包。怎么封装? 1、将载荷包封装在GRE包的中,添加一个GRE头; 2、B协议报头不变; 3、将封装好的承载协议包在承载协议网络上传送。
封装过程:
直接把原始 IP 报文装在新的 IP 报文的“净荷”里也是可以的,即“IP in IP 封装”,协议号是:4,在 RFC2003 中定义。这是另外一种封装方法,即另外一种隧道技术。
GRE 的封装过程: 1、当数据到达路由器时,报文的目的地址要经过Tunnel 才能到达,则设备将此报文发给相应的Tunnel接口; 2、Tunnel 口收到此报文后,在IP层对数据进行加封装处理。在封装IP 报文头后, 3、设备根据此IP 包的目的地址及路由表对报文进行转发,从相应的网络接口发送出去。
GRE 的解封装过程: 1、当接收路由器接收到IP 报文,检查目的地址; 2、如果发现目的地是本路由器,则RouterB 剥掉此报文的IP 报头,交给GRE 协议处理(进行检验密钥、检查校验和及报文的序列号等); 3、GRE 协议完成相应的处理后,剥掉GRE 报头,再交由X 协议对此数据报进行后续的转发处理。
2.2.1、标准GRE头格式
1、根据 RFC1701,GRE 数据报文的头部有下面的格式:
(1)、C、R、K、S、S:GRE 报文头部的最前5位,是一些标志位。有如下含义:
C(Checksum Present),值=0,Checksum 域无效;值=1,Checksum 域有效.
R(Routing Present),值=0,Offset、Routing 域无效;值=1,Offset、Routing 域有效。
K(Key Present),值=0,GRE头部无Key域;值=1,GRE头部出现Key域。
S(Sequence Number Present),值=0,GRE头部无Sequence Number域;值=1,GRE头部出现Sequence Number 域。
S(Strict Source Route),其他文档定义。
(2)、Recur:bits 5-7。Recur 域是记录允许的封装次数的计数器。GRE 提供了一种特定的机制来防止递归封装。如果路由器想对经过 GRE 封装的数据包作进一步封装,应在封装前检查这个域。如果 Recur 域为非 0,那么数据包还可以进行封装,新的 GRE 报头中的 Recur域取值将减 1;否则,如果 Recur 域的值已经是 0 了,那么这个包不可以再进行封装。
(3)、Flags:bits 8-12。GRE标志位字段。
(4)、Ver:bits 13-15。版本号。在 RFC1701 中,Ver 必须为 0。
(5)、Protocol Type:2 byte。Protocol Type 指出 GRE 报文净荷的协议类型。RFC1701定义的常见值如下:
- 0x0800:IP
- 0x0806:RFC 826 ARP
- 0x0808:Frame Relay ARP
- 0x8137:Novell IPX
(6)、Checksum:2 byte。Checksum 包括 GRE 头部和净荷的 IP 校验和。当 Checksum Present 位为1时,Checksum 域有效。
(7)、Offset:2 byte。Offset 域指出 Routing 域到净荷的字节偏移。
(8)、Key:4 byte。Key 域用来标识隧道内部单个的业务流。属于同一个业务流的数据报文使用同一个 Key 值来封装,隧道的拆封点根据 Key 域的值识别属于某个业务流的数据报文。当 Key Present 位为 1 时, KEY 域有效。
(9)、Sequence Number:4 byte。Sequence Number 域用来维持 GRE 隧道内数据报文的顺序。当 Sequence Number Present 位为 1 时,Sequence Number 域有效。
(10)、Routing:4 byte。Routing 域是可选的,当 Routing Present 位为 1 时,Routing 域有效。 报文截图
2、RFC 2784GRE标准头格式:
(1)、Checksum:2 byte。Checksum 包括 GRE 头部和净荷的 IP 校验和。当 ChecksumPresent 位为1时,Checksum 域有效。
(2)、Reserved0(bits 1-12):必须设置为0,并且接收方必须丢弃第1位至第5位设置的非0值的包。第六位至第12位为未来的用途保留,必须为0。
(3)、Ver(bits 13-15):版本号必须设置为0,表示标准GRE封装。
(4)、Protocol Type:2 byte。净荷的协议类型。还是使用RFC1701定义的常见值如下:
- 0x0800:IP
- 0x0806:RFC 826 ARP
- 0x0808:Frame Relay ARP
- 0x8137:Novell IPX
(5)、Checksum:2 byte。Checksum 包括 GRE 头部和净荷的 IP 校验和。计算时Checksum field值设置为0。
(6)、Reserved1:2 byte。为未来的用途保留。
2、RFC 2890GRE标准头格式: 2000年九月份,RFC2890中对RFC2784进行了更新说明。
- C(bit0):校验和存在位,置位1则表示Checksum存在且包含有效信息。如果C置位1,则表示Checksum和Offset都存在GRE报文中。
- K(bit2):key存在位,置位1则表示Key存在且包含有效信息。
- S(bit3):序列号存在位,置位1则表示Sequence Number存在且包含有效信息。
Key(4 byte) Key字段占四个字节,在转发时由发送端进行封装。“Key”字段用于标识隧道内的单个流量流。例如,可能需要根据报文头中不存在的信息来对数据包进行转发。Key字段提供了这个功能,并定义了发送端和接收端之间的逻辑通信流。
Sequence Number(4 byte) Sequence Number字段占四个字节,在转发时由发送端进行封装。序列号字段是一个四个字节的字段,当序列号显示位被设置时由封装器插入。接收方必须使用序列号来确定数据包从封装器传输到接收方的顺序。Sequence Field的预期用途是提供不可靠但有序的交付。如果设置了Key present位(第2位),则序列号针对Key字段所标识的流量。请注意,没有序列位集的数据包可以与序列位集的数据包交叉。
2.2.2、IP over IP的GRE封装
部署GRE后,企业分支机构之间通过公用IP网络进行内部IP网络的数据传输,这里一个内部IP网络,一个公用IP网,内部的IP网络作为载荷协议,外部的公用IP网络作为承载协议,外部公用IP网对内部的IP网络进行GRE封装,这种方式称为IP over IP的GRE封装或IP over IP模式。
1、公用IP网络的承载协议的GRE封装。IPv4报文的协议号是47,指GRE通用路由封装。 2、企业内网的IP作为载荷协议进行GRE封装。在GRE报文中,Protocol Type值为0x0800。 这种以IPv4同时作承载协议和载荷协议的GRE封装结构。称为IP over IP的GRE封装。
3、GRE隧道工作流程
3.1、隧道协议
隧道协议(Tunneling Protocol)是一类网络协议,它是一种数据包封装技术,它是将原始IP包(其报头包含原始发送者和最终目的地)封装在另一个数据包(称为封装的IP包)的数据净荷中进行传输。使用隧道的原因是在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。隧道协议通常(但并非总是)在一个比负载协议还高的层级,或同一层。
基于数据包的隧道协议有: (1) IPsec,互联网安全协议 (2) GRE,通用路由封装协议,支持多种网络层协议和多路技术 以下设置路由规则的 (3) IP in IP,比GRE更小的负载头,并且适合只有负载一个IP流的情况。 (4) L2TP,数据链接层隧道协议 (5) MPLS,多协议标签交换 (6) GTP,通用数据传输平台 (7) PPTP,点对点隧道协议 (8) PPPoE,基于以太网的点对点隧道 (9) PPPoA,基于ATM的点对点隧道 (10) IEEE 802.1Q,以太网VLANs (11) DLSw,SNA负载互联网协议 (12) XOT (13) IPv6穿隧:6to4、6in4、Teredo (14) Anything In Anything (AYIYA; e.g. IPv6 over UDP over IPv4, IPv4 over IPv6, IPv6 over TCP IPv4, etc.) (15) VPN
3.2、GRE隧道工作过程
隧道是一种封装技术,它利用一种网络协议来传输另一种网络协议,即利用一种网络传输协议,将其他协议产生的数据报文封装在它自己的报文中,然后在网络中传输。实际上隧道可以看作一个虚拟的点到点连接。例如,GRE 隧道仅支持点到点的业务接入。
GRE只是一种封装方法,没有对隧道进行任何规范。GRE VPN用GRE把网络层协议封装在另一个网络层协议里,因此属于L3 VPN技术。为了使点对点的GRE隧道像普通链路一样工作,路由器引入了一种称为Tunnel的逻辑接口。tunnel中文译为隧道。
点对点即企业方出口路由器,和分支机构的入口路由器,中间有许多运营商的路由器设备,但是隧道中涉及到出口路由器和入口路由器,对两个点的设备进行设置。
出口路由器、入口路由器分别建立一个虚拟接口Tunnel接口,物理接口和Tunnel接口功能不一样。
RA路由和RB路由物理接口E1/0,所包含物理接口的承载协议的地址和相关配置,为承载协议服务。
RA路由和RB路由Tunnel接口,Tunnel 1包含载荷协议的地址和相关配置,为载荷协议协议服务。
载荷协议—>GRE封装—>承载协议封装
上图的数据包传送过程: (1)、RA路由接收到企业内网数据包,查找路由表,根据目的IP地址,把数据包传输到物理接口E1/0出接口。
(2)、RA路由的GRE VPN的Tunnel 1接口,对于收到的内网IP数据包进行GRE封装,由原来到172.30.0.10地址,变成到202.18.18.10地址,私网地址—>RB路由公网地址,原私网包也变成公网IP包。
(3)、公网IP包经过RA路由物理接口E1/0,通过运营商的公共服务网络,到达RB路由的物理接口E1/0。
(4)、RB路由接收到公网IP包,对比路由表并确认为本地报文,根据IP协议号47,进行GRE协议栈进行解封装处理,得到私网IP包并交给RB的Tunnel 1接口进行第二次对比路由表,172.30.0网段是RB路由E0/0接口,将数据包发送到E0/0接口,并通过E0/0接口传送到企业内网的PCB终端上。
IP over Ip GRE VPN的步骤总结为以下: (1)、隧道起点路由查找; (2)、加封装; (3)、承载协议路由转发; (4)、公网转发; (5)、解封装; (6)、隧道终点路由查找。
3.3、GRE封装过程
Tunnel接口是虚拟接口,是不能直接发送数据包,实际发送数据包的是物理接口,路由器与公网连接,跨越公网需要通过公网IP作为源地址,目标地址也是公网IP。虚拟接口就需要将私网IP数据包封装在公网IP的数据包中。
GRE的封装准备,RA路由器需要从Tunnel 1接口的配置中获得以下参数: (1)、在配置Tunnel 1接口时,配置类型为GRE的封装格式。RA路由器通过接口配置获取需要配置的GRE的封装格式,对私网IP添加相应的GRE头部,并填充适当的字段。 (2)、RA路由器配置Tunnel 1接口时配置一个源IP地址和目标地址,这个是公网地址,是RA通过公网连接RB的公网地址。RA路由器将这两个地址封装在公网的IP报头里。
3.3、GRE解封装过程
RB路由器接收到公网IP包后,解封装过程: (1)、RB路由器检查IP地址,目标地址202.18.18.10为自己的接口地址。 (2)、RB路由器检查IP报头,协议号是47号,此载荷为GRE封装。 (3)、RB路由器解开公网IP头,检查GRE报头,校验错误,则解开GRE封装。 (4)、RB路由器,将得到的私网IP包,将得到的私网IP包提交给Tunnel 1接口。
最后Tunnel 1接口收到私网IP包,根据IP地址,将此包交给路由协议处理,匹配到路由,转发到目标IP地址。
4、配置GRE VPN的前提
4.1、路由配置
一个AS是一组共享相似的路由策略并在单一管理域中运行的路由器的集合。通过采用路由协议和AS自治系统编号,路由器就可以确定彼此问的路径和路由信息的交换方法。自治系统的编号范围是1到65535。
GRE VPN实现了企业内网通过公共网络的连接,与分支或者个人数据交换,从私网到公网再到私网,连接了不同的自治系统。对于连接公网和私网的路由器就会有不同AS的配置区别:
(1)、在私网中,连接到公网的路由器上,其连接到私网的接口和Tunnel接口属于私网路由的AS自治系统,使用的是一样的路由策略,即控制层面的行为,操作的对象是路由条目,匹配的是路由,具体是指目标网段、掩码、下一跳、度量值、Tag、Community等。
(2)、在公网中,连接到公网的路由器物理接口属于公网路由的AS自治系统,必须使用与公网一致路由策略。
企业内网通过连接公网边缘路由器的路由表,实现数据在公网上的传输。为在隧道两端为了双方互相学习对方站点的私网路由,须在私网转发数据的Tunnel接口使用静态路由或任意路由协议(OSPF、RIP、EIGRP)获得其连接的对方分支机构的私网信息。
静态路由配置:手工配置对方内网目的地址IP的路由条目。下一跳是对方的Tunnel接口的IP地址。Tunnel接口双方都要配置。如上图172.30.0.10/24。
动态路由配置:需将Tunnel接口和两端私网作为一个自治系统对待,在IP私服网接口和Tunnel接口上启动路由协议。
4.2、静态路由的隧道监测keepalive
GRE隧道本身不提供对隧道状态的监测和维护机机制。前面讲到对端在隧道配置静态路由或者动态路由方式来使用获取双方的私网路由。在配置静态路由时,无法监测隧道的工作状况。
比如我们配置了一个主隧道和一个备用隧道的网络。 在配置静态路由的情况下,在物理路径上也就是公网里出现链路断开故障,RA路由器和RB路由器状态依然是UP,而Tunnel 1接口的状态也保持着UP状态,RA路由器与RB路由器的路由信息没有变化,路由器RA向路由器RB还是通过主隧道发送数据包,但由于公网上物理路径断开,这些数据包无法到达路由器RB。
keepalive翻译过来就是保持活力活力的意思,Tunnel接口keepalive功能就是监测隧道接口的实际工作状况,并修改Tunnel接口的状态。keepalive功能就与路由协议里的 Hello报文一样,对端路由器双方从Tunnel接口周期性发送keepalive报文,对端路由器一旦连续3次收不到keepalive报文,即认为隧道中断,随之将Tunnel接口状态设置变Down。这样这条静态路由就会从路由表中清除,备份隧道的路由表项生效,启动备份隧道。
5、GRE 隧道配置
5.1、创建 Tunnel 接口
指定好 Tunnel 接口的编号就可以了。 [huawei] interface Tunnel 1/0/1 // 创建 Tunnel 接口
5.2、配置 Tunnel 接口的网络地址
[huawei-Tunnel1/0/1] ip address 192.168.0.2 255.255.255.0
5.3、配置 Tunnel 接口的源端地址和目的端地址
[huawei-Tunnel1/0/1] source 源端 IP 地址 // 配置 Tunnel 接口的源端地址 [huawei-Tunnel1/0/1] destination 目的端 IP 地址 // 配置 Tunnel 接口的目的端地址
5.4、配置 GRE 的安全选项
[huawei-Tunnel1/0/1] gre checksum // 设置 Tunnel 进行端到端校验 [huawei-Tunnel1/0/1] gre key key-number // 设置 Tunnel 接口的识别关键字
缺省情况下,隧道两端不进行端到端校验,不使用识别关键字。为了提高 GRE 隧道的安全性,我们要设置隧道进行端到端校验,并且设置隧道接口的识别关键字。
5.4、 Tunnel 的路由
在源端路由器和目的端路由器上,都必须存在经过 Tunnel 转发的路由。隧道路由可以配置静态路由或配置动态路由,这样,需要进行 GRE 封装的报文才能正确转发。 配置静态路由时,需要注意:目的地址不是 Tunnel 的目的端地址,而是未进行 GRE 封装的报文的目的地址,下一跳是对端 Tunnel 接口。 [huawei] ip route-static dest-ip-address { mask | mask-length } tunnel tunnel-number
6、配置GRE VPN案例
华为设备 R1基本配置
[Huawei]sysname R1
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip address 202.18.18.1 255.255.255.252
[R1-GigabitEthernet0/0/0]int g0/0/1
[R1-GigabitEthernet0/0/1]ip address 192.168.1.1 255.255.255.0
[R1]ip route-static 0.0.0.0 0.0.0.0 202.18.18.2
R2基本配置
[Huawei]sysname R2
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip add 220.16.2.2 255.255.255.252
[R2-GigabitEthernet0/0/0]int g0/0/1
[R2-GigabitEthernet0/0/1]ip add 192.168.2.1 255.255.255.0
[R2-GigabitEthernet0/0/1]quit
[R2]ip route-st 0.0.0.0 0.0.0.0 220.16.2.1
R1GRE配置
[R1]int tunnel0/0/0
[R1-Tunnel0/0/0]tunnel-protocol gre
[R1-Tunnel0/0/0]sou 202.18.18.1
[R1-Tunnel0/0/0]des 220.16.2.2
[R1-Tunnel0/0/0]ip add 192.168.0.241 30
R2GRE配置
[R2]int tunnel0/0/0
[R2-Tunnel0/0/0]tunnel-protocol gre
[R2-Tunnel0/0/0]source 220.16.2.2
[R2-Tunnel0/0/0]description 202.18.18.1
[R2-Tunnel0/0/0]ip address 192.168.0.242 30
[R1] display interface tunnel Tunnel0/0/0 current state : UP Line protocol current state : UP Last line protocol up time : 2022-03-14 16:28:57 UTC-08:00 Description:HUAWEI, AR Series, Tunnel0/0/0 Interface Route Port,The Maximum Transmit Unit is 1500 Internet Address is 192.168.0.241/30 Encapsulation is TUNNEL, loopback not set Tunnel source 202.18.18.1 (GigabitEthernet0/0/0), destination 220.16.2.2 Tunnel protocol/transport GRE/IP, key disabled keepalive disabled Checksumming of packets disabled Current system time: 2022-03-14 16:41:23-08:00 300 seconds input rate 0 bits/sec, 0 packets/sec 300 seconds output rate 8 bits/sec, 0 packets/sec 33 seconds input rate 0 bits/sec, 0 packets/sec 33 seconds output rate 0 bits/sec, 0 packets/sec 0 packets input, 0 bytes 0 input error 5 packets output, 540 bytes 0 output error Input bandwidth utilization : – Output bandwidth utilization : –
[R1] dis int brief Interface PHY Protocol InUti OutUti inErrors outErrors GigabitEthernet0/0/0 up up 0% 0% 0 0 GigabitEthernet0/0/1 up up 0% 0% 0 0 GigabitEthernet0/0/2 down down 0% 0% 0 0 NULL0 up up(s) 0% 0% 0 0 Tunnel0/0/0 up up – – 0 0
[R1] display ip routing-table 查看路由
|