Cisco GRE (隧道协议)

简介:
概述    GRE (Generic Routing Encapsulation)
GRE 是一种最传统的隧道协议,其根本功能就是要实现隧道功能,通过隧道连接的两个远程网络就如同直连,GRE在两个远程网络之间模拟出直连链路,从而使网络间 达到直连的效果,为此,GRE需要完成多次封装,总共有3次,换句话说,就是在GRE隧道中传输的数据包都有3个爆头,因为只谈IP协议,所以GRE中的 IP数据包是一层套一层,总共有3个IP地址,GRE在实现隧道时,需要创建虚拟直连链路,GRE实现的虚拟链路可以认为是隧道,隧道是模拟链路,所以隧 道两端也有IP地址,但隧道需要在公网中找到起点和重点,所以隧道的源和终点分别都以公网IP地址结尾,该链路是通过GRE协议来完成的,隧道传递数据包 的过程分为3步:
1、接收原始IP数据包当作乘客协议,原始数据包包头的IP地址为私有IP地址。
2、将原始IP数据包封装进GRE协议,GRE协议成为封装协议(Encapsulation Protocol),封装的包头IP地址为虚拟直连链路两端的IP地址。
3、将整个GRE数据包当作数据,在外层封装公网的IP包头,也就是隧道的起源和终点,从而路由到隧道终点。
GRE隧道中传输的数据包格式如下:

注:
         1、其中公网IP包头部分也成为传输协议(Transport Protocol)
2、GRE会在原始IP数据包之外,额外多封装24个字节或28个字节,具体视GRE模式而定。
下图为GRE传输数据过程:

         GRE要在远程路由器之间创建虚拟直连链路,也就是隧道(Tunnel),如果没有该隧道,GRE不能完成隧道功能,隧道是GRE最基本的功能,也是 GRE所有功能;上图环境中,当上海分公司R2将数据包IP地址封装为192.168.1.4发往武汉时,GRE操作过程如下:
 
1、假设R1与R3的GRE虚拟直连链路(隧道)已经简历,隧道链路两端的地址分别为1.1.1.1和1.1.1.2,隧道两端的起源和终点分别为202.1.1.1和61.1.1.1.
2、R1收到目标IP为192.168.1.4的数据包后,将原始数据包当作乘客数据包封装进GRE协议中,并且添加GRE包头,包头中源IP为隧道本端地址1.1.1.1,包头中目标IP为隧道对端地址1.1.1.2,从而完成GRE数据包的分装。
3、在封装了GRE隧道地址的数据包外面分装GRE隧道起源IP地址,该IP地址为公网地址,即源IP为100.1.1.1,目标IP为隧道终点200.1.1.1,最后将数据包发出去。
         数 据包被发送到internet之后,所有路由器只根据数据包最外面的公网IP进行转发,也就是只根据公网IP地址61.1.1.1来转发,直到数据包到达 公网IP的真正目的地后,即到达R3(IP:61.1.1.1)之后,公网IP包头才会被剥开,当R3剥开数据包的公网IP包头后,发现GRE包头,发现 目标IP地址为1.1.1.2,从而得知自己就是GRE隧道的终点,所以继续将GRE包头剥开,最后发现目标IP地址为192.168.1.4,然后将数 据包发往192.168.1.4(路由器R4)。
通过以上GRE过程,上海分公司R2直接通过私有IP地址192.168.1.4,最终成功与武汉分公司R4通信。
 
 
          配置GRE
         在远程路由器之间配置GRE,总共分为三步:
1、创建虚拟链路(隧道)接口,号码任意,两端不可相同。
2、配置虚拟链路(隧道)接口地址,该地址是在GRE包头中被封装的地址。
3、定义虚拟链路(隧道)的源和目的,因为数据包最终要在公网中传递,所以该地址就是在公网中指导路由器转发数据包的可路由公网IP,也是建立隧道两端路由器的真实公网IP。
注:
1、GRE Tunnel 只支持路由器,不支持集中器和PIX以及ASA。
2、GRE支持的协议有IP,Decnet,IPX,Appletalk。
3、GRE可分为Point-to-Point GRE 和Multipoint GRE (mGRE)两种。
4、Point-to-Point GRE只能在两台路由器之间建立。
5、Multipoint GRE (mGRE)也可以在两台以上的路由器之间建立。
6、Point-to-Point GRE 支持IP单播,组播,以及IGP动态路由协议和非IP协议。
7、Multipoint GRE (mGRE)只支持单播,组播以及动态IGP路由协议,不支持非IP协议。
 
         GRE隧道接口没有OSI一层协议做检测,只要本地源地址有效,并且隧道终点地址有路由可达,那么GRE隧道接口就会UP,而无论隧道对端是否已经配置隧道接口,如果GRE隧道的接口状态为down,只要达到如下3中情况任意一个即可:
1、没有向往隧道终点地址的路由。
2、去往隧道终点地址的路由指向了隧道接口自己。
3、隧道起源地址的接口状态为down。
 
以下面的图为例,配置GRE:

说明:图中Internet 使用路由器R2来模拟!
配置R1
Router>en
Router#conf t
Router(config)#no ip do lo
Router(config)#lin con 0
Router(config-line)#no exec-t
Router(config-line)#logg s
Router(config-line)#exit
Router(config)#ho CHENYI-R1
CHENYI-R1 (config)#int f0/0
CHENYI-R1 (config-if)#ip add 10.1.1.1 255.255.255.0
CHENYI-R1 (config-if)#no sh
CHENYI-R1 (config-if)#int f1/0
CHENYI-R1 (config-if)#ip add 202.1.1.1 255.255.255.0
CHENYI-R1 (config-if)#no sh
CHENYI-R1 (config-if)#ip route 0.0.0.0 0.0.0.0 202.1.1.10
 
          说明:配置R1的接口地址,并写默认路由指向Internet(路由器R2),地址为202.1.1.10。
 
配置R3
Router>en
Router#conf  t
Router(config)# no ip do lo
Router(config)#lin con 0
Router(config-line)#no exec-t
Router(config-line)#logg s
Router(config-line)#exit
Router(config)#ho CHENYI-R3
CHENYI-R3(config)#int f0/0
CHENYI-R3(config-if)#ip add 61.1.1.1 255.255.255.0
CHENYI-R3(config-if)#no sh
CHENYI-R3(config-if)#int f1/0 
CHENYI-R3(config-if)#ip add 192.168.1.3 255.255.255.0
CHENYI-R3(config-if)#no sh
CHENYI-R3(config-if)#ip route 0.0.0.0 0.0.0.0 61.1.1.10
配置R2
Router>en
Router#conf  t
Router(config)#no ip do lo
Router(config)#lin con 0
Router(config-line)#no exec-t
Router(config-line)#logg s
Router(config-line)#exit
Router(config)#HO CHENYI-R2
CHENYI-R2(config)#int f0/0
CHENYI-R2(config-if)#ip add 202.1.1.10 255.255.255.0
CHENYI-R2(config-if)#no sh
CHENYI-R2(config-if)#ip add 61.1.1.10 255.255.255.0 
CHENYI-R2(config-if)#no sh
配置GRE
CHENYI-R1 (config)#interface tunnel 1
CHENYI-R1 (config-if)#ip add 1.1.1.1 255.255.255.0
CHENYI-R1 (config-if)#tunnel source 202.1.1.1
CHENYI-R1 (config-if)#tunnel destination 61.1.1.1
查看R1 上GRE 的状态
CHENYI-R1 (config)#do sh int tunnel 1
Tunnel1 is up, line protocol is up 
  Hardware is Tunnel
  Internet address is 1.1.1.1/24
  MTU 1514 bytes, BW 9 Kbit, DLY 500000 usec, 
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation TUNNEL, loopback not set
  Keepalive not set
  Tunnel source 202.1.1.1, destination 61.1.1.1
  Tunnel protocol/transport GRE/IP
    Key disabled, sequencing disabled
    Checksumming of packets disabled
  Tunnel TTL 255
  Fast tunneling enabled
  Tunnel transmit bandwidth 8000 (kbps)
  Tunnel receive bandwidth 8000 (kbps)
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/0 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     0 packets input, 0 bytes, 0 no buffer
     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     0 packets output, 0 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 output buffer failures, 0 output buffers swapped out
说明:可以看出,在R1创建GRE隧道之后,隧道接口状态便已经up,这是因为默认情况下,GRE隧道接口没有OSI一层协议做检测,只要本端源地址有效,并且隧道终点地址有路由可达,那么GRE隧道接口就会up,而无论隧道对端是否已经配置隧道接口。
在武汉公司的路由器R3上配置连接到上海分公司路由器R1的GRE隧道:
CHENYI-R3(config)#int tunnel 3
CHENYI-R3(config-if)#ip add 1.1.1.2 255.255.255.0
CHENYI-R3(config-if)#tunnel source 61.1.1.1 
CHENYI-R3(config-if)#tun dest 202.1.1.1 
CHENYI-R3(config-if)#exit
说明:在R3 上创建GRE虚拟链路(隧道)接口,号码为3,两端号码可不相同,隧道接口地址为1.1.1.2/24,隧道的起源为61.1.1.1.隧道的终点为202.1.1.1。
CHENYI-R3(config-if)#do sh int tun 3
Tunnel3 is up, line protocol is up 
  Hardware is Tunnel
  Internet address is 1.1.1.2/24
  MTU 1514 bytes, BW 9 Kbit, DLY 500000 usec, 
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation TUNNEL, loopback not set
  Keepalive not set
  Tunnel source 61.1.1.1, destination 202.1.1.1
  Tunnel protocol/transport GRE/IP
    Key disabled, sequencing disabled
    Checksumming of packets disabled
  Tunnel TTL 255
  Fast tunneling enabled
  Tunnel transmit bandwidth 8000 (kbps)
  Tunnel receive bandwidth 8000 (kbps)
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/0 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     0 packets input, 0 bytes, 0 no buffer
     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     0 packets output, 0 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 output buffer failures, 0 output buffers swapped out
说明:R3上的GRE隧道状态也已经up。
此时可以测试GRE隧道了。使用R1 ping R3 那么是没有问题的
         但是ping 上海分公司 R1直接使用私有地址192.168.1.4到上海分公司R3的连通性是不通的。
         因为北京分公司的路由器R1在收到去往192.168.1.4后,因为默认路由从真实接口F1/0出去,结果数据包被发到Internet中的路由器 R2,由于Internet路由器R2只有公网路由,没有用户的私有网段,所以武汉分公司R1直接使用私有地址192.168.1.4上海分公司R4无法 通信。
要解决此问题,必须让流量从GRE 隧道中传输。
在创建GRE隧道的路由器双方将去往对方私有网段的数据包引入GRE隧道中传输。
R1:
	CHENYI-R1(config)# ip route 192.168.1.0 255.255.255.0 tunnel 1
 
R3:
	CHENYI-R3(config-if)#ip route 10.1.1.0 255.255.255.0 tunnel 3
此时测试武汉分公司PC直接使用私有地址192.168.1.4到上海分公司PC的连通性:









本文转自 lgpqdwjh 51CTO博客,原文链接:http://blog.51cto.com/itchenyi/1137143,如需转载请自行联系原作者
目录
相关文章
|
11月前
|
安全 容灾 网络安全
深度用云——释放企业潜能 | 网络先行——阿里云网络卓越架构白皮书正式发布
深度用云——释放企业潜能 | 网络先行——阿里云网络卓越架构白皮书正式发布
546 3
|
人工智能 自然语言处理 前端开发
从文案到设计,我用通义版Artifacts生成了365张灵感日历
本文介绍了如何利用通义AI的“代码模式”功能,轻松制作个性化日历。作者通过实例展示了从设计日历样式、推荐每日生活小事到赋予小事新解的过程,强调了AI在创意实现上的强大助力。此外,还探讨了AI代码生成技术对未来创造力的影响,以及通义AI代码模式如何降低创作门槛,提高效率,让每个人都能成为应用开发者。
|
设计模式 容器
34 QT - 聊天案例
34 QT - 聊天案例
327 0
|
监控 网络安全 网络虚拟化
在 Cisco 设备上配置 GRE 隧道
【8月更文挑战第31天】
1132 0
在 Cisco 设备上配置 GRE 隧道
|
网络协议 网络性能优化
第十二问:TCP慢起动详细解释
TCP的慢启动是其拥塞控制的一部分,旨在防止网络拥塞。在连接建立初期,TCP逐步增加发送的数据量,通过接收方的ACK确认来调整拥塞窗口(cwnd)。初始阶段cwnd较小,每收到一个ACK,cwnd增加1个MSS,发送速率大致翻倍。当cwnd达到慢启动阈值(ssthresh)时,进入拥塞避免阶段,cwnd改为线性增长。若发生数据丢失或网络拥塞,TCP会减小cwnd,重新进入慢启动。慢启动通过动态调整发送速率,确保网络不被瞬时大流量压垮。
|
存储 Java 索引
【JAVA】HashMap的put()方法执行流程
【JAVA】HashMap的put()方法执行流程
|
数据库
ER图总结
ER图总结
632 0
|
Docker 容器
『GitLab』在Docker中快速部署GitLab私有代码托管平台
📣读完这篇文章里你能收获到 - 在Docker中快速部署Gitlab
673 0
『GitLab』在Docker中快速部署GitLab私有代码托管平台
|
监控 网络架构 负载均衡