Cisco GRE (隧道協議)

唯一交流羣:41405569
概述    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的連通性:
唯一交流羣:41405569

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章