GRE 出现的背景:

随着网络(公司)规模的增大,越来越多的公司需要在跨区域之间建设自己的分公司。但随之也就出现了这样的问题,考虑这样一个场景。公司 A 在北京和上海间开设了两家公司,由于业务的需要,需要实现两家公司间的数据通信。公司考虑到未来的发展,在北京和上海启动了 IPV6 作为网络层的传输协议。但由于使用的 ISP (供应商,比如联通)在公网提供的是 IPV4 的网络层协议,这时想要通信该怎么办呢?

GRE 就是为了解决这个问题而出现的,专业些说解决的就是异种网络的传输问题。

GRE 的原理

GRE 采用了 Tunnel 技术,进行异种网络的传输。

GRE 协议 - 和 ISP 用的协议不一样怎么办-LMLPHP

乘客协议(Passenger):想要实现通信的协议,如例子中的 IPV6 协议

封装协议:将乘客协议封装起来的协议,按照一定的规则,进行封装和解封装。

传输协议:ISP 认识的协议,如 IPV4 协议。

  • checksum:校验和,用于检测整个 GRE 数据包的准确性,包括图中黄色的部分。
  • Protocol Type:使用的协议,比如 Ox0800 表示 IP 协议,公网传输的协议。
  • Key:用于隧道的认证

GRE 的配置

这里假设 R2 为 ISP 提供的公网访问接口,R1 和 R3 使用的是公司内网地址。正常来说,内网地址是无法通过公网进行传递的。公网地址接受后会将其丢掉。

如果想实现通信,就可以使用 GRE 协议,目的仅仅是想让 ISP 将 R1 的数据包发送到 R3,就像在 R1 和 R3 中间建立起了一条直连的通道。

GRE 协议 - 和 ISP 用的协议不一样怎么办-LMLPHP

# STEP1: R1 config interface

# config default route for R2 because we need R1 to R3 to be reachable
Router(config)# ip route 0.0.0.0 0.0.0.0 12.1.1.2 # open tunnel interface
Router(config)#in tunnel 0
Router(config-if)#tunnel mode gre ip
Router(config-if)#ip 13.1.1.1 255.255.255.0
Router(config-if)#tunnel source 12.1.1.1
Router(config-if)#tunnel destination 23.1.1.2
Router#show running-config interface tunnel 0 # transfer network traffic to Tunnel0 Interface
Router(config)#ip route 192.168.2.0 255.255.255.0 Tunnel 0 # STEP2: R2 config interface # STEP3: R3 config interface # config default route for R2 because we need R3 to R1 to be reachable
Router(config)# ip route 0.0.0.0 0.0.0.0 23.1.1.1 # open tunnel interface
Router(config)#in tunnel 0
Router(config-if)#tunnel mode gre ip
Router(config-if)#ip 13.1.1.2 255.255.255.0
Router(config-if)#tunnel source 23.1.1.2
Router(config-if)#tunnel destination 12.1.1.1
Router#show running-config interface tunnel 0 # transfer network traffic to Tunnel0 Interface
Router(config)#ip route 192.168.1.0 255.255.255.0 Tunnel 0

这里从 Router1 的接口抓包:

GRE 协议 - 和 ISP 用的协议不一样怎么办-LMLPHP

05-27 12:16