GRE tunnel(通用路由封装)
GRE tunnel通用路由封闭协议
Ip in ip
啥意思,就是将一个IP的包,再次封闭在一个IP包里,乱吗?
别乱,看看倒底是怎么回事儿,
其实这东西就是一个VPN的原型,啥叫VPN?用于连接两个或多个站点的技术,实现双向局域网通信,当然VPN的种类还是蛮多的呢~
后面面学习的时候要一一见到,ipsec, ssl dm easyvpn Mpls...
大概意思明白了,为什么还要把IP再将封装到IP中呢?
其实这一点也很好理解,首先,私有地址是无法在公网上跑的,这毋庸置疑,那如何实现两个节点之间的互联呢?也许你会想到BGP? 别闹,啥企业上来就玩儿BGP啊,不要钱啊?
当需要实现两个节点互通,且不想投入过多时,这个时候就要考虑VPN,(纯个人理解)而GREtunnel,就是VPN的原型,只不过是GRE是裸奔的,没有加密,
其意思就是将局域网的IP,封闭到GRE的tunnel隧道里,到达对端以后再将外层的封装拆除,实现“和内网访问一样”的效果
看个实例吧 ,R1(内网192.168.1.0/24) R3(内网172.16.1.0/24)外网为12.0.0.0/24 和23.0.0.0
R1,R3分别下联着两个分支,R2仿internet,
如何实现两个节点之点的互通呢?使用tunnel
现条件:
NAT是肯定要有的,对吧,企业网关出去肯定要转成公网IP的,
然后就是tunnel的配置了,
1 先要建立 tunnl 口,配置ip地址,这里的IP可以随意配置,因为只是源目的关系,其它人并不知道
2 指定隧道源和目的,建立隧道,
3 为隧道注入路由,(对端内网网段)
就这样实现互通了
NAT的部份咱们直接跳过了啊~
老生长谈了
直接上GRE部份
R1(config)#inte tunnel 1 //建立 tunnel 编号1 R1(config-if)#ip add 100.1.1.1 255.255.255.0 //配置一个IP地址, R1(config-if)#tunnel source f0/0 //隧道源的IP(接口) R1(config-if)#tunnel destination 23.0.0.3 //隧道目的IP R1(config)#ip route 172.16.1.0 255.255.255.0 tunnel 1 //和对端做静态,从tunnel 口出去 R3(config)#inter tunnel 1 R3(config-if)#ip add 100.1.1.2 255.255.255.0 R3(config-if)#tunnel source f0/0 R3(config-if)#tunnel destination 12.0.0.1 R3(config)#ip route 192.168.1.0 255.255.255.0 tun 1
至此GRE完成,
先来看看两边的局域网能否通信~
通是可以通的,但是它是怎么走的呢
Trace一下
先到达自己的网关,
然后到达下一跳为tunnel口的对端 IP
再到对端 局域网内。
等于是数据又经过了一次封装,
GRE的封装过程
可以直接从一个包来分析一下
由下至上,ICMP协议,ping包,
Ipv4 sip 172.16.1.10 ,dip 192.168.1.10 (用pc2ping的pc1)
GRE
Ipv4 sip 23.0.0.3 , dip 12.0.0.1
里层数据,IPV4,源172.16.1.10 目的ip 192.168.1.10
传到路由器时,查看路由,需要从tunnel口出去,
由进行GRE的封装,
然后再加上新的IP,这里的新IP头部就是我们配置的 tunnel source 以及tunnel destination
IPV4 源23.0.0.3 目的IP 12.0.0.1
这时不禁会想到一个问题
我们配置了tunnel 的ip地址,好像在抓包中也没有看到啊~封装在哪里了呢?
其实配置tunnel 口IP主要目的有两点,
1,使静态路由生效
2,做为数据转发的下一跳
最后,请问,tunnel 的ip 两端可以不一样吗?
R3(config)#inter tunnel 1 R3(config-if)#ip add 200.3.3.3 255.255.255.0
可以看到,就算是两端的tunnel ip 不一样,也没有问题
因为这里起到决定因素的不是这个IP ,
而是tunnel source 以及tunnel destination 的指定。
----------------------------------------------
CCIE成长之路 --- 梅利