天天看點

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隧道中傳輸的資料包格式如下:

<a href="http://www.itchenyi.com/wp-content/uploads/2013/02/ciscogre.jpg"></a>

注:

         1、其中公網IP標頭部分也成為傳輸協定(Transport Protocol)

2、GRE會在原始IP資料包之外,額外多封裝24個位元組或28個位元組,具體視GRE模式而定。

下圖為GRE傳輸資料過程:

<a href="http://www.itchenyi.com/wp-content/uploads/2013/02/ciscogre1.jpg"></a>

         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資料包的分裝。

         數 據包被發送到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:

<a href="http://www.itchenyi.com/wp-content/uploads/2013/02/ciscogre3.jpg"></a>

說明:圖中Internet 使用路由器R2來模拟!

配置R1:

         說明:配置R1的接口位址,并寫預設路由指向Internet(路由器R2),位址為202.1.1.10。

配置R3:

配置R2

配置GRE

檢視R1上GRE的狀态

說明:可以看出,在R1建立GRE隧道之後,隧道接口狀态便已經up,這是因為預設情況下,GRE隧道接口沒有OSI一層協定做檢測,隻要本端源位址有效,并且隧道終點位址有路由可達,那麼GRE隧道接口就會up,而無論隧道對端是否已經配置隧道接口。

在武漢公司的路由器R3上配置連接配接到上海分公司路由器R1的GRE隧道:

說明:在R3 上建立GRE虛拟鍊路(隧道)接口,号碼為3,兩端号碼可不相同,隧道接口位址為1.1.1.2/24,隧道的起源為61.1.1.1.隧道的終點為202.1.1.1。

說明: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隧道中傳輸。

本文轉自 lgpqdwjh 51CTO部落格,原文連結:http://blog.51cto.com/itchenyi/1137143,如需轉載請自行聯系原作者