GRE(Generic Routing Encapsulation)概述
GRE是一種最傳統(tǒng)的隧道協(xié)議铁坎,其根本功能就是要實現(xiàn)隧道功能漾肮,通過隧道連接的兩個遠(yuǎn)程網(wǎng)絡(luò)就如同直連犯祠,GRE在兩個遠(yuǎn)程網(wǎng)絡(luò)之間模擬出直連鏈路竿报,從而使網(wǎng)絡(luò)間達(dá)到直連的效果俄删,為此忆某,GRE需要完成多次封裝点待,總共有3次,換句話說弃舒,就是在GRE隧道中傳輸?shù)臄?shù)據(jù)包都有3個包頭癞埠,因為我們只談IP協(xié)議,所以GRE中的IP數(shù)據(jù)包是一層套一層聋呢,總共有3個IP地址苗踪。GRE在實現(xiàn)隧道時,需要創(chuàng)建虛擬直連鏈路坝冕,GRE實現(xiàn)的虛擬直連鏈路可以認(rèn)為是隧道徒探,隧道是模擬鏈路,所以隧道兩端也有IP地址喂窟,但隧道需要在公網(wǎng)中找到起點和終點测暗,所以隧道的源和終點分別都以公網(wǎng)IP地址結(jié)尾,該鏈路是通過GRE協(xié)議來完成的磨澡,隧道傳遞數(shù)據(jù)包的過程分為3步:
1.接收原始IP數(shù)據(jù)包當(dāng)作乘客協(xié)議碗啄,原始IP數(shù)據(jù)包包頭的IP地址為私有IP地址。
2.將原始IP數(shù)據(jù)包封裝進GRE協(xié)議稳摄,GRE協(xié)議稱為封裝協(xié)議(Encapsulation Protocol)稚字,封裝的包頭IP地址為虛擬直連鏈路兩端的IP地址。
3.將整個GRE數(shù)據(jù)包當(dāng)作數(shù)據(jù)厦酬,在外層封裝公網(wǎng)IP包頭胆描,也就是隧道的起源和終點,從而路由到隧道終點仗阅。
GRE隧道中傳輸?shù)臄?shù)據(jù)包格式如下:
注:
★其中公網(wǎng)IP包頭部分也稱為傳輸協(xié)議(Transport Protocol)
★GRE會在原始IP數(shù)據(jù)包之外昌讲,額外多封裝24字節(jié)或28字節(jié),具體視GRE模式而定减噪。 以下圖為例短绸,解釋GRE傳輸數(shù)據(jù)過程:
GRE要在遠(yuǎn)程路由器之間創(chuàng)建虛擬直連鏈路车吹,也就是隧道(Tunnel),如果沒有該隧道醋闭,GRE不能完成隧道功能窄驹,隧道是GRE最基本的功能,也是GRE所有功能证逻;上圖環(huán)境中乐埠,當(dāng)上海分公司R2將數(shù)據(jù)包IP地址封裝為192.168.1.4發(fā)往北京分公司的R4時,GRE操作過程如下:
1.假設(shè)R1與R3的GRE虛擬直連鏈路(隧道)已經(jīng)建立瑟曲,隧道鏈路兩端的地址分別為1.1.1.1和2.2.2.2饮戳,隧道兩端的起源和終點分別為100.1.1.1和200.1.1.1。
2.R1收到目標(biāo)IP為192.168.1.4的數(shù)據(jù)包后洞拨,將原始數(shù)據(jù)包當(dāng)作乘客數(shù)據(jù)包封裝進GRE協(xié)議中扯罐,并且添加GRE包頭,包頭中源IP為隧道本端地址1.1.1.1烦衣,包頭中目標(biāo)IP為隧道對端地址1.1.1.2歹河,從而完成GRE數(shù)據(jù)包的封裝。 3.在封裝了GRE隧道地址的數(shù)據(jù)包外面封裝GRE隧道起源IP地址花吟,該IP地址為公網(wǎng)地址秸歧,即源IP為100.1.1.1,目標(biāo)IP為隧道終點200.1.1.1衅澈,最后將數(shù)據(jù)包發(fā)出去键菱。
數(shù)據(jù)包被發(fā)到Internet之后,所有路由器只根據(jù)數(shù)據(jù)包最外面的公網(wǎng)IP進行轉(zhuǎn)發(fā)今布,也就是只根據(jù)公網(wǎng)目標(biāo)IP地址200.1.1.1來轉(zhuǎn)發(fā)经备,直到數(shù)據(jù)包到達(dá)公網(wǎng)IP的真正目的地后,即到達(dá)R3(IP:200.1.1.1)之后部默,公網(wǎng)IP包頭才會被剝開侵蒙,當(dāng)R3剝開數(shù)據(jù)包的公網(wǎng)IP包頭后,發(fā)現(xiàn)GRE包頭傅蹂,發(fā)現(xiàn)目標(biāo)IP為1.1.1.2纷闺,從而得知自己就是GRE隧道的終點,所以繼續(xù)將GRE包頭剝開份蝴,最后發(fā)現(xiàn)目標(biāo)IP地址為192.168.1.4犁功,然后將數(shù)據(jù)包發(fā)往192.168.1.4(路由器R4)。 通過以上GRE過程婚夫,上海分公司R2直接通過私有IP地址192.168.1.4波桩,最終成功與北京分公司R4通信。
GRE VPN配置實例
???示例1:
某個企業(yè)的2個站點请敦,都接入到Internet镐躲,現(xiàn)在希望2個站點能夠互通
GRE(Generic
Routing Encapsulation)
????GRE能夠?qū)⒁环N三層協(xié)議的報文封裝到另一種三層協(xié)議的報文中進行傳輸?
????GRE是一種隧道能力極強的技術(shù),但它的安全性較差侍筛,沒有對數(shù)據(jù)做加密(IPSec則可以加密)原理是將L3層部分當(dāng)成數(shù)據(jù)部分萤皂,在外層加上一層ip頭,數(shù)據(jù)到達(dá)PE1的隧道源端時匣椰,查找的目地IP(地址是PE2的隧道目地IP地址)裆熙,然后就會走tunel0發(fā)送給PE2,PE2收到后拆掉tunel的頭部后查看里面的L3層ip頭禽笑,發(fā)現(xiàn)目的地址是自己連接的客戶網(wǎng)絡(luò)site2入录,就會將數(shù)據(jù)包交給客戶網(wǎng)絡(luò)site2,從而實現(xiàn)site之間的通信佳镜。
R1為PE1僚稿,R2為P,R3為PE2蟀伸,兩端PC分別模擬客戶的兩個site蚀同,要求進行GREvpn通信
隧道源端配置:
PE1(config)#intface f0/0
PE1(config-if)#ip add 192.168.1.1 255.255.255.0
PE1(config)#intface f0/1
PE1(config-if)#ip add 12.1.1.1 255.255.255.0
router eigrp 1 ? ? ? ? ? ? ?ISP內(nèi)部IGP使用eigrp
network 12.0.0.0
no auto-summary
PE1(config)#int tunnel 0
PE1(config-if)#tunnel source 12.1.1.1
PE1(config-if)#tunnel destination 23.1.1.2
PE1(config-if)#ip add 10.0.0.1 255.255.255.0 ? ? 用于tunnel隧道接口之間通信,必須在一個網(wǎng)段
PE1(config)#ip route 172.16.1.0 255.255.255.0 tunnel 0 ? 告訴去往172.16.1.0/24的vpn數(shù)據(jù)包下一跳出接口走隧道
隧道目地端配置:
PE2(config)#intface f0/1
PE2(config-if)#ip add 172.16.1.1 255.255.255.0
PE2(config)#int tunnel 0
PE2(config-if)#tunnel source 23.1.1.2
PE2(config-if)#tunnel destination 12.1.1.1
PE2(config-if)#ip add 10.0.0.2 255.255.255.0
PE2(config)#ip route 192.168.1.0 255.255.255.0 tunnel 0
R1#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
23.0.0.0/24 is subnetted, 1 subnets
D ? ? ? 23.1.1.0 [90/307200] via 12.1.1.2, 01:40:37, FastEthernet0/1
172.16.0.0/24 is subnetted, 1 subnets
S ? ? ? 172.16.1.0 is directly connected, Tunnel0
10.0.0.0/24 is subnetted, 1 subnets
C ? ? ? 10.0.0.0 is directly connected, Tunnel0
12.0.0.0/24 is subnetted, 1 subnets
C ? ? ? 12.1.1.0 is directly connected, FastEthernet0/1
C ? ?192.168.1.0/24 is directly connected, FastEthernet0/0
PC1> show ip
NAME ? ? ? ?: PC1[1]
IP/MASK ? ? : 192.168.1.10/24
GATEWAY ? ? : 192.168.1.1
DNS ? ? ? ? :
MAC ? ? ? ? : 00:50:79:66:68:00
LPORT ? ? ? : 10000
RHOST:PORT ?: 172.17.17.243:10001
MTU: ? ? ? ?: 1500
PC1> ping 172.16.1.10
172.16.1.10 icmp_seq=1 timeout
172.16.1.10 icmp_seq=2 timeout
84 bytes from 172.16.1.10 icmp_seq=3 ttl=62 time=49.003 ms
84 bytes from 172.16.1.10 icmp_seq=4 ttl=62 time=49.003 ms
84 bytes from 172.16.1.10 icmp_seq=5 ttl=62 time=49.003 ms