項(xiàng)目背景
IPv6的部署大致要經(jīng)歷一個(gè)漸進(jìn)的過(guò)程,在初始階段,IPv4的網(wǎng)絡(luò)海洋中會(huì)出現(xiàn)若干局部零散的IPv6孤島,為了保持通信,這些孤島通過(guò)跨越IPv4的隧道彼此連接;隨著IPv6規(guī)模的應(yīng)用,原來(lái)的孤島逐漸聚合成為了骨干的IPv6 Internet網(wǎng)絡(luò),形成于IPv4骨干網(wǎng)并存的局面,在IPv6骨干上可以引入了大量的新業(yè)務(wù),同時(shí)可以充分發(fā)揮IPv6的諸多優(yōu)勢(shì)。為了實(shí)現(xiàn)IPv6和IPv4網(wǎng)絡(luò)資源的互訪(fǎng),還需要轉(zhuǎn)換服務(wù)器以實(shí)現(xiàn)v6和v4的互通;最后,IPv4骨干網(wǎng)逐步萎縮成局部的孤島,通過(guò)隧道連接,IPv6占據(jù)了主導(dǎo)地位,具備全球范圍的連通性。
IPv6提供很多過(guò)渡技術(shù)來(lái)實(shí)現(xiàn)上述這樣一個(gè)演進(jìn)過(guò)程。這些過(guò)渡技術(shù)圍繞兩類(lèi)問(wèn)題解決:
IPv6孤島互通技術(shù):實(shí)現(xiàn)IPv6網(wǎng)絡(luò)和IPv6網(wǎng)絡(luò)的互通
IPv6和IPv4互通技術(shù):實(shí)現(xiàn)兩個(gè)不同網(wǎng)絡(luò)之間互相訪(fǎng)問(wèn)資源
目前,解決上述問(wèn)題的基本過(guò)渡技術(shù)有兩種:雙棧和隧道。
雙棧:即設(shè)備升級(jí)到IPv6的同時(shí)保留IPv4支持,可以同時(shí)訪(fǎng)問(wèn)IPv6和IPv4設(shè)備,包含雙協(xié)議棧支持,應(yīng)用程序依靠DNS地址解析返回的地址類(lèi)型,來(lái)決定使用何種協(xié)議棧。
隧道:通過(guò)在一種協(xié)議中承載另一種協(xié)議,實(shí)現(xiàn)跨越不同域的互通,具體可以是IPv6-in-IPv4,IPv6-in-MPLS,IPv4-in-IPv6等隧道類(lèi)型。
GRE隧道(VPN)
GRE與IP in IP、IPX over IP等封裝形式很相似,但比他們更通用。在GRE的處理中,很多協(xié)議的席位差異都被忽略,這使得GRE不限于某個(gè)特定的“X over Y”應(yīng)用,而是一種最基本的封裝形式。
在最簡(jiǎn)單的情況下,路由器接收到一個(gè)需要封裝和路由的原始數(shù)據(jù)報(bào)文(Payload),這個(gè)報(bào)文首先被GRE封裝而成GRE報(bào)文,接著被封裝在IP協(xié)議中,然后完全由IP層負(fù)責(zé)此報(bào)文的轉(zhuǎn)發(fā)。原始報(bào)文的協(xié)議被稱(chēng)之為乘客協(xié)議,GRE被稱(chēng)之為封裝協(xié)議,而負(fù)責(zé)轉(zhuǎn)發(fā)的IP協(xié)議被稱(chēng)之為傳遞(Delivery)協(xié)議或傳輸(Transport)協(xié)議。注意到在以上的流程中不用關(guān)心乘客協(xié)議的具體格式或內(nèi)容,整個(gè)被封裝的報(bào)文格式:
-------------------------------
| Delivery Header |
| (Transport Protocol) |
-------------------------------
| GRE Header |
| (Encapsulation Protocol |
-------------------------------
| Payload Packet |
| (Passenger Protocol) |
-------------------------------
GRE報(bào)頭的格式如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|C|R|K|S|s|Recur| Flags | Ver | Protocol Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum (optional) | Offset (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Routing (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
GRE隧道原理:
1、封裝
Ingress PE從連接X(jué)協(xié)議的接口接收到X協(xié)議報(bào)文后,首先交由X協(xié)議處理。
X協(xié)議根據(jù)報(bào)文頭中的目的地址在路由表或轉(zhuǎn)發(fā)表中查找出接口,確定如何轉(zhuǎn)發(fā)此報(bào)文。如果發(fā)現(xiàn)出接口是GRE Tunnel接口,則對(duì)報(bào)文進(jìn)行GRE封裝,即添加GRE頭。
根據(jù)骨干網(wǎng)傳輸協(xié)議為IP,給報(bào)文加上IP頭。IP頭的源地址就是隧道源地址,目的地址就是隧道目的地址。
根據(jù)該IP頭的目的地址(即隧道目的地址),在骨干網(wǎng)路由表中查找相應(yīng)的出接口并發(fā)送報(bào)文。之后,封裝后的報(bào)文將在該骨干網(wǎng)中傳輸。
2、解封裝
解封裝過(guò)程和封裝過(guò)程相反。
Egress PE從GRE Tunnel接口收到該報(bào)文,分析IP頭發(fā)現(xiàn)報(bào)文的目的地址為本設(shè)備,則Egress PE去掉IP頭后交給GRE協(xié)議處理。GRE協(xié)議剝掉GRE報(bào)頭,獲取X協(xié)議,再交由X協(xié)議對(duì)此數(shù)據(jù)報(bào)文進(jìn)行后續(xù)的轉(zhuǎn)發(fā)處理。
配置
左邊為R3,右邊為R4
R3:
配置公網(wǎng)IP:
interface GE0/3/4
ip address 34.0.0.3/24
no shutdown
!
配置私網(wǎng)IP:
interface GE0/1/3
ip address 13.0.0.3/24
no shutdown
!
配置GRE Tunnel:
interface tunnel100
tunnel mode gre
tunnel source 34.0.0.3
tunnel destination 34.0.0.4
ip address 192.168.100.3/24 //和對(duì)方Tunnel IP在同一網(wǎng)段
no shutdown
!
配置路由:
ip route 0.0.0.0/0 34.0.0.4 //到公網(wǎng)默認(rèn)路由
ip route 24.0.0.0/24 tunnel100 //到對(duì)方私網(wǎng)路由通過(guò)Tunnel 100訪(fǎng)問(wèn)
!
R4:
配置公網(wǎng)IP:
interface GE0/3/4
ip address 34.0.0.4/24
no shutdown
!
配置私網(wǎng)IP:
interface GE0/2/4
ip address 24.0.0.4/24
no shutdown
!
配置GRE Tunnel:
interface tunnel100
tunnel mode gre
tunnel source 34.0.0.4
tunnel destination 34.0.0.3
ip address 192.168.100.4/24 //和對(duì)方Tunnel IP在同一網(wǎng)段
no shutdown
!
配置路由:
ip route 0.0.0.0/0 34.0.0.3 //到公網(wǎng)默認(rèn)路由
ip route 13.0.0.0/24 tunnel100 //到對(duì)方私網(wǎng)路由通過(guò)Tunnel 100訪(fǎng)問(wèn)
!
在R4上ping R3的私網(wǎng)地址13.0.0.3,抓包如下:
GRE報(bào)文解析
GRE頭各字段解釋?zhuān)?/strong>
C 校驗(yàn)和驗(yàn)證位。1-GRE頭插入了校驗(yàn)和(Checksum)字段。0-GRE頭不包含校驗(yàn)和字段。
K 關(guān)鍵字位。1-GRE頭插入了關(guān)鍵字(Key)字段。0-GRE頭不包含關(guān)鍵字字段。
Recursion GRE報(bào)文被封裝的層數(shù)。一次GRE封裝后將該字段加1。如果封裝層數(shù)大于3,則丟棄該報(bào)文。該字段的作用是防止報(bào)文被無(wú)限次的封裝。RFC1701規(guī)定該字段默認(rèn)值為0。RFC2784規(guī)定當(dāng)發(fā)送和接受端該字段不一致時(shí)不會(huì)引起異常,且接收端必須忽略該字段。設(shè)備實(shí)現(xiàn)時(shí)該字段僅在加封裝報(bào)文時(shí)用作標(biāo)記隧道嵌套層數(shù),GRE解封裝報(bào)文時(shí)不感知該字段,不會(huì)影響報(bào)文的處理。
Flags 預(yù)留字段。當(dāng)前必須置為0。
Version 版本字段。必須置為0。
Protocol 標(biāo)識(shí)乘客協(xié)議的協(xié)議類(lèi)型。常見(jiàn)的乘客協(xié)議為IPv4協(xié)議,協(xié)議代碼為0800。
Checksum 對(duì)GRE頭及其負(fù)載的校驗(yàn)和字段。
Key 關(guān)鍵字字段,隧道接收端用于對(duì)收到的報(bào)文進(jìn)行驗(yàn)證。
目前實(shí)現(xiàn)的GRE頭不包含源路由字段,所以Bit 1、Bit 3和Bit 4都置為0。
GRE安全機(jī)制
GRE本身提供兩種基本的安全機(jī)制:校驗(yàn)和驗(yàn)證,識(shí)別關(guān)鍵字。
1、校驗(yàn)和驗(yàn)證
校驗(yàn)和驗(yàn)證是指對(duì)封裝的報(bào)文進(jìn)行端到端校驗(yàn)。
若GRE報(bào)文頭中的C位標(biāo)識(shí)位置1,則校驗(yàn)和有效。發(fā)送方將根據(jù)GRE頭及Payload信息計(jì)算校驗(yàn)和,并將包含校驗(yàn)和的報(bào)文發(fā)送給對(duì)端。接收方對(duì)接收到的報(bào)文計(jì)算校驗(yàn)和,并與報(bào)文中的校驗(yàn)和比較,如果一致則對(duì)報(bào)文進(jìn)一步處理,否則丟棄。
隧道兩端可以根據(jù)實(shí)際應(yīng)用的需要決定配置校驗(yàn)和或禁止校驗(yàn)和。如果本端配置了校驗(yàn)和而對(duì)端沒(méi)有配置,則本端將不會(huì)對(duì)接收到的報(bào)文進(jìn)行校驗(yàn)和檢查,但對(duì)發(fā)送的報(bào)文計(jì)算校驗(yàn)和;相反,如果本端沒(méi)有配置校驗(yàn)和而對(duì)端已配置,則本端將對(duì)從對(duì)端發(fā)來(lái)的報(bào)文進(jìn)行校驗(yàn)和檢查,但對(duì)發(fā)送的報(bào)文不計(jì)算校驗(yàn)和。
2、識(shí)別關(guān)鍵字
識(shí)別關(guān)鍵字(Key)驗(yàn)證是指對(duì)Tunnel接口進(jìn)行校驗(yàn)。通過(guò)這種弱安全機(jī)制,可以防止錯(cuò)誤識(shí)別、接收其它地方來(lái)的報(bào)文。
RFC1701中規(guī)定:若GRE報(bào)文頭中的K位為1,則在GRE頭中插入一個(gè)四字節(jié)長(zhǎng)關(guān)鍵字字段,收發(fā)雙方將進(jìn)行識(shí)別關(guān)鍵字的驗(yàn)證。
關(guān)鍵字的作用是標(biāo)志隧道中的流量,屬于同一流量的報(bào)文使用相同的關(guān)鍵字。在報(bào)文解封裝時(shí),GRE將基于關(guān)鍵字來(lái)識(shí)別屬于相同流量的數(shù)據(jù)報(bào)文。只有Tunnel兩端設(shè)置的識(shí)別關(guān)鍵字完全一致時(shí)才能通過(guò)驗(yàn)證,否則將報(bào)文丟棄。這里的“完全一致”是指兩端都不設(shè)置識(shí)別關(guān)鍵字,或者兩端都設(shè)置相同的關(guān)鍵字。
GRE的Keepalive檢測(cè)
由于GRE協(xié)議并不具備檢測(cè)鏈路狀態(tài)的功能,如果對(duì)端接口不可達(dá),隧道并不能及時(shí)關(guān)閉該Tunnel連接,這樣會(huì)造成源端會(huì)不斷的向?qū)Χ宿D(zhuǎn)發(fā)數(shù)據(jù),而對(duì)端卻因隧道不通接收不到報(bào)文,由此就會(huì)形成數(shù)據(jù)空洞。
GRE的Keepalive檢測(cè)功能可以檢測(cè)隧道狀態(tài),即檢測(cè)隧道對(duì)端是否可達(dá)。如果對(duì)端不可達(dá),隧道連接就會(huì)及時(shí)關(guān)閉,避免因?qū)Χ瞬豢蛇_(dá)而造成的數(shù)據(jù)丟失,有效防止數(shù)據(jù)空洞,保證數(shù)據(jù)傳輸?shù)目煽啃浴?br />
Keepalive檢測(cè)功能的實(shí)現(xiàn)過(guò)程如下:
當(dāng)GRE隧道的源端使能Keepalive檢測(cè)功能后,就創(chuàng)建一個(gè)定時(shí)器,周期地發(fā)送Keepalive探測(cè)報(bào)文,同時(shí)通過(guò)計(jì)數(shù)器進(jìn)行不可達(dá)計(jì)數(shù)。每發(fā)送一個(gè)探測(cè)報(bào)文,不可達(dá)計(jì)數(shù)加1。
對(duì)端每收到一個(gè)探測(cè)報(bào)文,就給源端發(fā)送一個(gè)回應(yīng)報(bào)文。
如果源端的計(jì)數(shù)器值未達(dá)到預(yù)先設(shè)置的值就收到回應(yīng)報(bào)文,就表明對(duì)端可達(dá)。如果源端的計(jì)數(shù)器值到達(dá)預(yù)先設(shè)置的值——重試次數(shù)(Retry Times)時(shí),還沒(méi)收到回送報(bào)文,就認(rèn)為對(duì)端不可達(dá)。此時(shí),源端將關(guān)閉隧道連接。但是源端口仍會(huì)繼續(xù)發(fā)送Keepalive報(bào)文,若對(duì)端Up,則源端口也會(huì)Up,建立隧道鏈接。
對(duì)于設(shè)備實(shí)現(xiàn)的GRE Keepalive檢測(cè)功能,只要在隧道一端配置Keepalive,該端就具備Keepalive功能,而不要求隧道對(duì)端也具備該功能。隧道對(duì)端收到報(bào)文,如果是Keepalive探測(cè)報(bào)文,無(wú)論是否配置Keepalive,都會(huì)給源端發(fā)送一個(gè)回應(yīng)報(bào)文。
GRE具有如下的優(yōu)點(diǎn):
多協(xié)議的本地網(wǎng)可以通過(guò)單一協(xié)議的骨干網(wǎng)實(shí)現(xiàn)傳輸;
將一些不能連續(xù)的子網(wǎng)連接起來(lái),用于組建VPN;
擴(kuò)大了網(wǎng)絡(luò)的工作范圍,包括那些路由網(wǎng)管有限的協(xié)議。如IPX包最多可以轉(zhuǎn)發(fā)16次(即經(jīng)過(guò)16個(gè)路由器),而在一個(gè)Tunnel連接中看上去只經(jīng)過(guò)一個(gè)路由器。
由于GRE是將一個(gè)數(shù)據(jù)包封裝到另一個(gè)數(shù)據(jù)包中,因此可能會(huì)遇到GRE的數(shù)據(jù)報(bào)大于網(wǎng)絡(luò)接口所設(shè)定的數(shù)據(jù)包最大尺寸的情況。解決這種問(wèn)題的方法是在隧道接口上配置ip tcp adjust-mss 1436。另外,雖然GRE并不支持加密,但是可以通過(guò)Tunnel key命令在隧道的兩頭各設(shè)置一個(gè)密鑰。這個(gè)密鑰其實(shí)就是一個(gè)明文的密碼。由于GRE隧道沒(méi)有狀態(tài)控制,可能隧道的一端已經(jīng)關(guān)閉,而另一端仍然開(kāi)啟。這一問(wèn)題的解決方案就是在隧道兩端開(kāi)啟keepalive數(shù)據(jù)包,它可以讓隧道一端定時(shí)向另一端發(fā)送keepalive數(shù)據(jù),確認(rèn)端口保持開(kāi)啟狀態(tài)。如果隧道的某一端沒(méi)有按時(shí)收到keepalive數(shù)據(jù),那么這一側(cè)的隧道端口也會(huì)關(guān)閉。
IPSec(VPN)
IPSec(IP Security)是一組開(kāi)放協(xié)議的總稱(chēng),特定的通信方之間的IP層通過(guò)加密與數(shù)據(jù)源驗(yàn)證,以保證數(shù)據(jù)包在Internet網(wǎng)上傳輸時(shí)的私有性、完整性和真實(shí)性。IPSec通過(guò)AH(Authentication Header)和ESP(Encapsulating Security Payload)這兩個(gè)安全協(xié)議來(lái)實(shí)現(xiàn)。
AH在IP包中的位置(隧道方式):
------------------- ------------------------------
| IP | TCP | Data | ----------> | IP2 | AH | IP | TCP | Data |
------------------- ------------------------------
1
2
3
ESP將需要保護(hù)的用戶(hù)數(shù)據(jù)進(jìn)行加密后再封裝到IP包中,ESP可以保證數(shù)據(jù)的完整性、真實(shí)性和私有性。
ESP頭在IP包中的位置(隧道方式):
------------------- ------------------------------------------------
| IP | TCP | Data | ----------> | IP2 | ESP | IP | TCP | Data | Trailer | Auth |
------------------- ------------------------------------------------
###IPv6 over IPv4隧道
在IPv4網(wǎng)絡(luò)向IPv6網(wǎng)絡(luò)過(guò)渡的初期,IPv4網(wǎng)絡(luò)已被大量部署,而IPv6網(wǎng)絡(luò)只是散布在世界各地的一些孤島。利用隧道技術(shù)可以在IPv4網(wǎng)絡(luò)上創(chuàng)建隧道,從而實(shí)現(xiàn)IPv6孤島之間的互連。在IPv4網(wǎng)絡(luò)上用于連接IPv6孤島的隧道成為IPv6 over IPv4隧道。為了實(shí)現(xiàn)IPv6 over IPv4隧道,需要在IPv4孤島的隧道稱(chēng)為IPv6 over IPv4隧道。為了實(shí)現(xiàn)IPv6 over IPv4隧道,需要在IPv4網(wǎng)絡(luò)與IPv6網(wǎng)絡(luò)交界的邊界路由設(shè)備商啟動(dòng)IPv4/IPv6雙協(xié)議棧。
IPv6 over IPv4隧道技術(shù)的原理:
邊界路由設(shè)備啟動(dòng)IPv4/IPv6雙協(xié)議棧,并配置IPv6 over IPv4隧道。
邊界路由設(shè)備在收到從IPv6網(wǎng)絡(luò)側(cè)發(fā)來(lái)的報(bào)文后,如果報(bào)文的目的地址不是自身且下一跳出接口為T(mén)unnel接口,就要把收到的IPv6報(bào)文作為負(fù)載,加上Ipv4報(bào)文頭,封裝成IPv4報(bào)文。
在IPv4網(wǎng)絡(luò)中,封裝后的報(bào)文被傳遞到對(duì)端的邊界路由設(shè)備。
對(duì)端邊界路由設(shè)備對(duì)報(bào)文解封裝,去掉IPv4報(bào)文頭,然后將封裝后的IPv6報(bào)文發(fā)送到對(duì)端的IPv6網(wǎng)絡(luò)中。
其他隧道原理類(lèi)似。
IPv4 over IPv6隧道
在IPv4 Internet向IPv6 Internet過(guò)渡后期,IPv6網(wǎng)絡(luò)被大量部署后,而IPv4網(wǎng)絡(luò)只是散布在世界各地的一些孤島。利用隧道技術(shù)可以在IPv6網(wǎng)絡(luò)上創(chuàng)建隧道,從而實(shí)現(xiàn)IPv4孤島的互聯(lián),IPv4孤島能通過(guò)IPv6公網(wǎng)訪(fǎng)問(wèn)其他IPv4網(wǎng)絡(luò)。
http://www.alotcer.com/index.php?c=product&a=type&tid=1