GRE通用路由封装

GRE

        一些大型企业通常设有总部和分部,企业分部经常需要访问总部的公共资源,例如版本服务器,员工之间通信,企业内部网站等。企业总部、分支内部都使用的是私网IP地址,都需要通过因特网互相通信,用户使用的时候感觉不到因特网的存在,就像是在同一个私有局域网里面。

VPN(虚拟专用网络)

依靠ISP或者其他公用网络基础设施上构建专用的安全数据通信网络。只不过这个专用网络是逻辑而非物理的

虚拟:用户不在需要拥有实际的长途数据线缆,而是使用公共网络资源建立自己的专用网络。

专用:可以定制最符合自身需求的网络。

核心技术:封装技术

GRE(通用路由封装)

  • GRE技术可以将企业报文进行封装,外面再套上一层公网IP地址,这样带有私网IP地址的报文可以在因特网上转发,到达目标之后再剥掉GRE外壳,还原成原始的IP报文。

  • GRE协议只负责封装外壳,不关注里面的内容,里面可以是IP、IPX或者其他类型的报文,还可以是单播、组播、广播报文。GRE报文没有经过加密,抓包可以看到私网报文的具体信息。

  • 封装的新IP头部是两个私网边界设备的出接口IP,原始IP头部是两个私网IP。

GRE的配置

[r1]interface Tunnel 0/0/0 ---- 创建隧道接口
[r1-Tunnel0/0/0]ip address 192.168.3.1 24 ---- 配置IP,此时协议层面还是down
[r1-Tunnel0/0/0]tunnel-protocol gre ---- 配置隧道协议,定义封装方式
[r1-Tunnel0/0/0]source 12.0.0.1 ---- 配置隧道的接口的源IP地址,注意是真实物理IP。定义封装内容,该IP必须为真实的公网出口IP
[r1-Tunnel0/0/0]destination 23.0.0.3 ---- 隧道添加的目的IP。对方的物理地址IP注意目标源的配置命令
​
注意,两端都要配置,并且源和目的端口IP要换一下位置。

配置完成后,需要在本地补上通往目的私网网段的路由信息

GRE封装和解封装过程

GRE报文格式

  • 传输协议:根据网络类型不同而变化。以太网,所以现在是IP协议。

  • 封装协议/运载协议:GRE头部信息

  • 乘客协议:最开始构造的IP数据包,即真实的数据包。

封装过程

  • 设备从连接私网的接口接收到数据包后,检查报文头部中的目的IP地址字段,在路由表中查找出接口,如果发现出接口为隧道接口,则将报文发送给隧道模块进行处理。如果IP报文里面封装的是GRE,IP头部的Protocol字段值是47,标识里面是GRE协议。

  • 隧道模块接收到报文后,首先根据乘客协议的类型和当前GRE隧道配置的校验和参数,对报文进行GRE封装。

  • 然后,设备给报文添加新的传输协议,该协议的源IP就是隧道源地址,目的IP为隧道目的地址,指的是隧道配置的IP。

  • 最后,设备根据新条件的IP报文头部中的目的地址,在路由表中查找对应的出接口并发送报文。

解封装过程

  • 接收端设备从连接公网的接口收到报文后,首先分析IP报文头部信息(不会经行解封装。),如果发现协议字段类型值为47(GRE协议号),表示数据部分由GRE模块进行处理。

    • GRE模块去除掉IP报文头部和GRE报文头部,并根据GRE报文头部中的协议类型字段来判断乘客协议内容。从而交给对应模块处理。

Keepalive检测机制

GRE隧道没有确认机制,如果隧道故障,双方都感知不到,但是数据还会往对方发,形成数据空洞。GRE使用keepalive进行实时探测,如果对端不可达,隧道连接就会及时关闭。双方定时交互keepalive报文。

为什么只配置一端??

只配置R1,配置的R1一端是通过隧道改造并发送,通过GRE封装报文;对端R2接收处理是GRE模块处理,但是发送数据是通过物理接口发送的,但是另一端R2仍然可以回复Keepalive包。因为点到点网络要求稳定,如果在一端R1配置好Keepalive,R1开始发送Keepalive数据包,再另一端R2没有配置完全之前就发送了三个及其以上的Keepalive数据包了,这样R1就会判断隧道故障,从而断开。所以只需要配置一端就可以了,另一端无条件回复。

配置

进入隧道配置
[r1-Tunnel0/0/1]keepalive ---- 默认情况下keepalive是关闭的,通过命令开启。
[r1-Tunnel0/0/0]keepalive period 2 retry-times 5 ----- 设置发送周期为2S;设置重传次数为5次

MGRE(多点GRE)

普通GRE缺点

  • 多个局域网若使用普通的GRE来进行互通,建立形成一个整体网络时,tunnel数量成指数上升,路由表将变大,且不易管理;

  • 普通的GRE为点到点网络类型;若将多个节点使用普通GRE连接起来,将配置大量的网段和路由信息,且所有节点为固定IP地址;

MGRE特点:只有单播数据,没有广播和组播。所以“近似于”NBMA

NHRP(下一跳解析协议)

Hub-spoke架构:以MGRE搭建的结构,被称为Hub-spoke架构。它是从中心(NHS,下一跳服务器)到节点架构。

  • 中心节点的IP地址必须固定。

  • 中心建立成功后,所有节点之间的通信都依靠中心通

DSVPN(动态智能VPN)

传统的MGRE技术存在的问题。即分部之间无法直接通讯(源分支无法获取目的分支的公网地址,也就无法建立VPN隧道),导致所有的分支之间的通讯数据只能通过总部HUB设备进行中转。并且由于消耗总部设备资源,导致设备延时增大。但是由于IPSec是以组播发送的,所以不能在Hub-spoke架构中使用。DSVPN可以看作是由MGRE + NHRP组成的。

MGRE

不支持Keepalive检测机制

  • MGRE:点到多点的GRE技术,还是点到点,只不过是以近似NBMA的方式构建的网络。

  • MGRE隧道:指的是两个接口建立的逻辑隧道

    • 隧道源地址

    • 目的(通过NHRP获得的)

    • 隧道接口IP

  • MGRE隧道接口:用于链接mGRE的环境的接口

NHRP映射表

  • 静态表项

    • 由网络管理员手工配置。

    • spoke(分支)与hub建立静态的MGRE隧道。

  • 动态表项

    • 是由NHRP协议动态生成

    • hub节点被动获取到spoke节点发送来的注册信息

    • 各个spoke节点通过NHRP协议获取到对端的spoke节点的映射关系。

    • 老化时间是7200s

NHRP映射表的建立过程

1、建立spoke到hub之间的mgre隧道
  1. spoke向hub注册请求

  2. hub向spoke注册应答

2、分支间路由学习

DSVPN支持两种分支间路由学习方式:

  • 分之间互相学习路由 ---- 非shortcut方式

    • 每个分支需要学习到所有对端的路由数据,且下一跳为分支本身。分支路由汇聚到总部。

    • 这种情况下,Spoke会消耗大量的CPU和内存资源,对其路由表容量和性能有较高的要求。而实际应用中,Spoke的性能往往较低,能存放的路由数量有限。因此,这种路由学习方式只适用于网络节点较少、路由信息量小的中小型网络。

  • 分支路由汇聚到总部 ---- shortcut方式

    • 下一跳为hub设备。

    • 每人解决问题,给R1加配置,让他解决

非shortcut方式建立MGRE隧道

NHRP映射表

Hub的NHRP映射表

Tunnel地址公网IP地址
192.168.4.124.0.0.1
192.168.4.223.0.0.1

R3的NHRP映射表

Tunnel地址公网IP地址
192.168.4.312.0.0.1

R4的NHRP映射表

Tunnel地址公网IP地址
192.168.4.312.0.0.1
路由表

Hub的路由表表

目标网段下一跳IP地址
192.168.2.0192.168.4.2
192.168.1.0192.168.4.1

R3的路由表表

目标网段下一跳IP地址
192.168.1.0192.168.4.1
192.168.3.0192.168.4.3

R4的路由表

目标网段下一跳IP地址
192.168.2.0192.168.4.2
192.168.3.0192.168.4.3

当R4下的用户首次访问R3下的用户时,将触发R4与R3之间建立动态mGRE隧道,隧道建立过程如下:

  1. R4收到发往R2的数据包时:

    • 根据IP地址192.168.2.0查找下一条为192.168.4.2。然后去查NHRP映射表,但是没有前往192.168.2.0的对应的公网IP地址。

    • 但是R4知道Hub有所有人的通信隧道,所以默认发给Hub,让Hub帮忙转发ICMP报文。

    • 同时由于R4前往R3的行为绕路了,所以R4也会给Hub发送NHRP请求报文请求建立到R3的mGRE隧道。

  2. Hub接受到ICMP报文和NHRP之后,先通过查表转发给R3的ICMP报文,然后再转发NHRP请求报文转发给R3。

  3. R3收到ICMP报文和NHRP地址解析请求报文后:

    • R3处理先收到的NHRP报文,从NHRP地址解析请求报文中提取R4的Tunnel地址和公网地址。并添加到自己的映射表中。直接构建并向R4发送NHRP地址解析应答报文(携带R3的Tunnel地址192.168.4.3和公网地址12.0.0.1)

    • 直接向R4发送ICMP应答报文。

  4. R4收到NHRP地址解析应答报文后,从应答报文中提取R3的Tunnel地址和公网地址,更新到自己的NHRP映射表中。

当R4再次收到其下用户发送给R2的数据报文时,R4根据报文目的地址(192.168.2.0)在路由表中找到下一跳192.168.4.2,再根据192.168.4.2在NHRP映射表中找到公网地址12.0.0.1,即可按照公网地址12.0.0.1将此报文进行mGRE封装后直接发送给R3,不再经过总部Hub。

更新后的NHRP映射表

R3的NHRP映射表

Tunnel地址公网IP地址
192.168.4.312.0.0.1
192.168.4.124.0.0.1

此时R3本地映射表中会多一条本地的,这条信息就是本地构建并且发给R4的。

R4的NHRP映射表

Tunnel地址公网IP地址
192.168.4.312.0.0.1
192.168.4.223.0.0.1
非shortcut配置

Hub节点配置
先建立隧道接口
[r1]interface Tunnel 0/0/0
配置IP
[r1-Tunnel0/0/0]ip address 192.168.5.1 24
隧道封装模式 gre p2mp格式
[r1-Tunnel0/0/0]tunnel-protocol gre p2mp ----修改接口封装协议为GRE,且为点到多点模式
源配置
[r1-Tunnel0/0/0]source 出接口IP
[r1-Tunnel0/0/0]nhrp network-id id号 ---- 划分区域,相同区域的信息进行处理;不同区域的信息不处理。
配置路由走隧道,虚拟IP的路由
[r1]ip route-static 目标网段 子网掩码 虚拟IP

Spoke配置
建立隧道接口
[r2]interface Tunnel 0/0/0
配置IP
[r2-Tunnel0/0/0]ip address 192.168.5.2 24
隧道封装为gre p2mp格式
[r2-Tunnel0/0/0]tunnel-protocol gre p2mp 
源配置,由于IP变化。所以配置出接口。结果就是以目的接口配置的IP为源
[r2-Tunnel0/0/0]source GigabitEthernet 0/0/0 ---- 如果IP固定,可以写IP;如果不固定就写接口。
[r2-Tunnel0/0/0]nhrp entry 192.168.5.1 15.0.0.1 register
			nhrp entry 中心节点Tunne的IP 物理接口IP register(注册)
		  			 虚拟接口IP 物理接口IP
 
配置路由走隧道,虚拟IP的路由
[r1]display nhrp peer all ----查看nhrp映射表

shortcut方式建立MGRE隧道
NHRP映射表

Hub的NHRP映射表

Tunnel地址公网IP地址
192.168.4.124.0.0.1
192.168.4.223.0.0.1

R3的NHRP映射表

Tunnel地址公网IP地址
192.168.4.312.0.0.1

R4的NHRP映射表

Tunnel地址公网IP地址
192.168.4.312.0.0.1
路由表

Hub的路由表表

目标网段下一跳IP地址
192.168.2.0192.168.4.2
192.168.1.0192.168.4.1

R3的路由表表

目标网段下一跳IP地址
192.168.1.0192.168.4.1
192.168.3.0192.168.4.3

R4的路由表

目标网段下一跳IP地址
192.168.2.0192.168.4.2
192.168.3.0192.168.4.3

当R4下的用户首次访问R3下的用户时,将触发R4与R3之间建立动态mGRE隧道,隧道建立过程如下:

  1. R4收到其下用户发往R3下用户的数据报文后

    • 根据IP地址192.168.2.0查找下一条为192.168.4.2。然后去查NHRP映射表,但是没有前往192.168.2.0的对应的公网IP地址。所以默认发给Hub,让Hub帮忙转发这个ICMP报文。此时R4判断自己的行为没有出错,所以不去请求R3的NHRP映射表。

  2. Hub收到R4转发的数据报文后:

    • 将此ICMP报文通过Hub与R3间的mGRE隧道转发给R3。

    • Hub检查发现接收和发送数据报文的Tunnel接口属于同一个NHRP域,就构建并向R4发送NHRP重定向报文(仅携带Hub的Tunnel地址和公网地址)。

  3. R4收到NHRP重定向报文后,构建并向Hub发送NHRP地址解析请求报文(携带R4的Tunnel地址192.168.4.1和公网地址24.0.0.1,以及需要解析的数据报文的目的地址192.168.2.0)。

  4. Hub收到NHRP地址解析请求报文后转发给R3处理。

  5. R3此时收NHRP地址解析报文:

    • 先处理收到的ICMP报文,并查自己的路由表和NHRP映射表,(由于此时还未收到R4的NHRP地址请求报文,所以NHRP映射表没有更新)将其转发给Hub。

    • 从NHRP地址解析请求中提取R4的Tunnel地址和公网地址,并将该信息更新到自己的NHRP映射表中。

    • 构建并向R4发送NHRP地址解析应答报文(携带R3的子网地址192.168.2.0、R3的Tunnel地址192.168.4.2和公网地址23.0.0.1)。

  6. R4收到NHRP地址解析应答报文后,从应答报文中提取R3的子网地址和公网地址,更新到自己的NHRP映射表中,R4与R3之间的动态mGRE隧道随即建立。

当R4再次收到其下用户发送给R3的数据报文时,R4根据报文目的地址(192.168.2.0)查找NHRP映射表,找到R3的公网地址23.0.0.1,即可根据公网地址23.0.0.1将此报文进行mGRE封装后直接发送给R3,不再经过总部Hub。

更新后的NHRP映射表

R3的NHRP映射表

Tunnel地址公网IP地址
192.168.4.312.0.0.1
192.168.1.124.0.0.1

R4的NHRP映射表

Tunnel地址公网IP地址
192.168.4.312.0.0.1
192.168.2.123.0.0.1
shortcut配置

shortcut和非shortcut差不多,就是多增加了两条命令。

中心:
[r1-Tunnel0/0/0]nhrp redirect ----开启重定向功能。默认情况为未启动
分支:
[r4-Tunnel0/0/0]nhrp shortcut ----开启NHRP的shortcut功能
总结
  • 非shortcut工作方式:

    • spoke主动要对方信息,中心把要求要信息转发个对端,对端回复给spoke。双方都要进行这个过程

  • shortcut工作方式:

    • spoke不主动要,中心判断并主动回复要求spoke要信息,并且接收到之后转发给对方,对方直接通信。

建立spoke与spoke之间的mgre隧道

MGRE基于RIP

此时由于通信由于是基于虚拟的隧道通信,所以在RIP中宣告虚拟口

不能通信

1、分支没有获取到中心的路由信息

对R1来说:点到点连接,不用发组播信息。R1都是通过T0/0/0的一个接口发送更新包,所以判断出发给其他spoke的数据包属于”组播“报文形式。但是MGRE不支持组播和广播,所以判断不出先发给谁,所以都不发。对其他spoke来说,只知道Hub一个邻居,所以可以发给Hub更新报文。R1可以学到spoke的路由,但是spoke学不到中心的路由和其他spoke路由。

解决思路:开启伪广播功能。同一时刻发送多个单播报文,实质上还是单播行为。

在中心节点配置
[r1-Tunnel0/0/0]nhrp entry multicast dynamic ----开启伪广播功能

2、分支之间无法获取对方路由信息

但是spoke还是没有学习到其它spoke的路由信息,这是因为huawei设备默认开启RIP的水平分割防环。

关闭RIP的水平分割
[r1-Tunnel0/0/0]undo rip split-horizon ----关闭水平分割机制
也可以经路由汇总,二选一

但是此时查看NHRP映射表:spoke上没有其他spoke映射关系。是因为Hub没有配置重定向,spoke认为自己正确。

中心:
[r1-Tunnel0/0/0]nhrp redirect ----开启重定向功能。默认情况为未启动
分支:
[r4-Tunnel0/0/0]nhrp shortcut ----开启NHRP的shortcut功能

此时学到很多NHRP映射关系,这时候就不看路由表的下一跳。看NHRP映射表的下一跳

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值