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成長之路 --- 梅利