陳 利
(蕪湖職業(yè)技術(shù)學(xué)院網(wǎng)絡(luò)工程學(xué)院,安徽蕪湖 241003)
關(guān)鍵字:IPv6隧道;封裝;抓包;分析;隧道中繼
現(xiàn)階段,絕大多數(shù)網(wǎng)絡(luò)仍然采用IPv4 協(xié)議,稱為IPv4 網(wǎng)絡(luò).IPv4 網(wǎng)絡(luò)本身固有的缺陷使得其被IPv6 網(wǎng)絡(luò)取代成為必然.但I(xiàn)Pv4 網(wǎng)絡(luò)要完全過渡到IPv6 網(wǎng)絡(luò)還需要相當(dāng)長(zhǎng)的一段時(shí)間[1].在IPv4 和IPv6 共存時(shí)期,諸如IPv4 網(wǎng)絡(luò)與IPv6 網(wǎng)絡(luò)能否互訪、如何互訪,IPv6 網(wǎng)絡(luò)如何跨越IPv4網(wǎng)絡(luò)實(shí)現(xiàn)通信等問題,是目前網(wǎng)絡(luò)通信中面臨的現(xiàn)實(shí)問題.
借助IPv6 過渡技術(shù)可以解決上述一系列問題.IPv6 過渡技術(shù)概括起來分為雙協(xié)議棧技術(shù)、隧道技術(shù)和網(wǎng)絡(luò)地址轉(zhuǎn)換及協(xié)議轉(zhuǎn)換技術(shù)[2].在網(wǎng)絡(luò)設(shè)備上同時(shí)啟用IPv4 協(xié)議棧和IPv6 協(xié)議棧,其與IPv4 網(wǎng)絡(luò)、IPv6 網(wǎng)絡(luò)通信時(shí)分別使用IPv4 協(xié)議、IPv6 協(xié)議即為雙協(xié)議棧技術(shù).該技術(shù)是應(yīng)用最廣泛、最基礎(chǔ)的IPv6 過渡技術(shù).
在網(wǎng)絡(luò)應(yīng)用系統(tǒng)中,隧道技術(shù)是將一種協(xié)議的報(bào)文封裝在另一種協(xié)議中后再進(jìn)行傳輸?shù)募夹g(shù),它實(shí)質(zhì)上是數(shù)據(jù)的多次封裝技術(shù)[3].IPv6 過渡技術(shù)中的隧道技術(shù)針對(duì)IPv6 報(bào)文再封裝IPv4 報(bào)頭,從而實(shí)現(xiàn)在IPv4 網(wǎng)絡(luò)中傳輸IPv6 數(shù)據(jù)的目的[4].通過IPv6 隧道技術(shù)可以實(shí)現(xiàn)IPv6 網(wǎng)絡(luò)跨IPv4 網(wǎng)絡(luò)互通的目的,從而解決當(dāng)前以IPv4 技術(shù)為主的網(wǎng)絡(luò)中的IPv6 孤島互連互通問題[5].
對(duì)于IPv4 網(wǎng)絡(luò)中的IPv6 隧道來說,在隧道的源端將IPv6 報(bào)文封裝IPv4 報(bào)頭,在隧道的終端解封裝IPv4 報(bào)頭后將IPv6 報(bào)文交由IPv6 網(wǎng)絡(luò)處理.隧道技術(shù)僅要求其兩端的設(shè)備能夠支持隧道及雙協(xié)議棧技術(shù),而網(wǎng)絡(luò)中的其他設(shè)備則無特別要求.因此,隧道技術(shù)實(shí)現(xiàn)方便,是當(dāng)前主流的IPv6 過渡技術(shù)之一[6].本文在GNS3 模擬器中完成了多種IPv6 隧道的配置,抓包分析了它們的封裝,并結(jié)合IPv6 隧道中繼實(shí)現(xiàn)了IPv6孤島的互聯(lián)互通.實(shí)驗(yàn)網(wǎng)絡(luò)拓?fù)淙鐖D1 所示.各設(shè)備按圖示配置網(wǎng)絡(luò)參數(shù)及路由協(xié)議,IPv4 網(wǎng)絡(luò)、IPv6 網(wǎng)絡(luò)已各自全網(wǎng)互通,路由器R1的F0/0口通過GNS3 中的網(wǎng)云橋接到IP 地址為172.18.165.249/24的win7 主機(jī)上.
圖1 實(shí)驗(yàn)網(wǎng)絡(luò)拓?fù)?/p>
作為IPv6過渡技術(shù)之一的IPv6隧道可以兩兩建立在設(shè)備、主機(jī)之間,依據(jù)隧道解封裝端的IPv4地址是從IPv6 地址中自動(dòng)獲取還是手工配置,可將IPv6隧道分為自動(dòng)隧道和手工隧道兩大類[7].下面先介紹配置、理解起來較為簡(jiǎn)單的手工隧道.
隧道終點(diǎn)的IPv4 地址需要手工配置的叫手工隧道,包括IPv6-over-IPv4 GRE 隧道(簡(jiǎn)稱GRE 隧道)和手動(dòng)隧道兩種.如果配置隧道時(shí)的模式選擇為GRE,則其為GRE隧道.其隧道模式的配置命令為tunnel mode gre ip.在GNS3 中的思科設(shè)備上,GRE 隧道是默認(rèn)的隧道技術(shù).如果配置時(shí)的模式選擇為IPv6-IPv4,則為手動(dòng)隧道.其隧道模式的配置命令為tunnel mode ipv6ip.手工隧道在配置時(shí)不僅要配置隧道的源,還要配置隧道的目的.手工隧道是點(diǎn)到點(diǎn)鏈路,通常是建立于路由器之間的穩(wěn)定連接,可以實(shí)現(xiàn)IPv6孤島跨IPv4網(wǎng)絡(luò)互通.但由于隧道兩端都需要配置源與目的,當(dāng)需要互連的IPv6 孤島較多時(shí),則隧道配置及管理的工作量巨大.
IPv6 自動(dòng)隧道是指隧道終點(diǎn)不需要專門配置,而是從IPv6 報(bào)頭特定格式的目的地址中自動(dòng)分離的一種隧道技術(shù).配置自動(dòng)隧道時(shí),不需要像配置手工隧道時(shí)那樣既指出隧道的源又指出隧道的目的,它只需要配置隧道的源即可實(shí)現(xiàn)跨IPv4網(wǎng)絡(luò)的IPv6 網(wǎng)絡(luò)的互通.此時(shí)隧道的目的可以根據(jù)一定的規(guī)則從IPv6 報(bào)文中自動(dòng)獲取.要實(shí)現(xiàn)從IPv6 報(bào)文的目的地址中自動(dòng)獲取IPv4 地址(即隧道的目的),一般通過將IPv4地址內(nèi)嵌到IPv6地址中的特殊形式實(shí)現(xiàn).常見的IPv6 自動(dòng)隧道可以細(xì)分為IPv4 兼容IPv6 自動(dòng)隧道、6to4 隧道、ISATAP隧道及6PE 隧道等幾種.6PE 隧道建立在MPLS/VPN網(wǎng)絡(luò)上,相對(duì)復(fù)雜,限于篇幅本文不做討論.
1.2.1 IPv4兼容IPv6自動(dòng)隧道
IPv4 兼容IPv6 自動(dòng)隧道也簡(jiǎn)稱為自動(dòng)隧道.隧道源端采用IPv4 兼容IPv6 地址::x.y.z.t/96 這一特殊地址格式,其中x.y.z.t 是IPv4 地址,配置時(shí)以16 進(jìn)制形式出現(xiàn).通過特殊的IPv6 地址中內(nèi)嵌IPv4 地址的方式實(shí)現(xiàn)了IPv6 隧道終端的自動(dòng)確定,隧道建立方便.由于此種IPv6 隧道必須借助IPv4 兼容IPv6 地址形式,本質(zhì)上仍依賴匱乏的IPv4 地址,使用時(shí)有很大的局限性.受限于IPv4 兼容IPv6 地址已被棄用[8],此種隧道目前已很少見.其隧道模式的配置命令為Tunnel mode ipv6ip auto-tunnel.
1.2.2 6to4隧道
6to4 隧道是指借助特定格式的6to4 地址形成的跨IPv4 網(wǎng)絡(luò)的IPv6 隧道,實(shí)現(xiàn)了跨IPv4 網(wǎng)絡(luò)的IPv6 孤島的互通.該隧道從特定格式的IPv6 報(bào)文的目的地址中自動(dòng)分離出隧道終點(diǎn)的IPv4 地址,實(shí)現(xiàn)了跨IPv4 網(wǎng)絡(luò)的IPv6 隧道的自動(dòng)建立.實(shí)現(xiàn)此功能特定格式的6to4 地址前綴規(guī)定為2002:x.y.z.t::/48.其中2002 是規(guī)定的IPv6 地址前綴,x.y.z.t表示該隧道對(duì)應(yīng)的32 位IPv4 地址,配置時(shí)以16 進(jìn)制形式出現(xiàn),如2.2.2.2 則應(yīng)該表現(xiàn)為202:202.這種在IPv6 地址中嵌入IPv4 地址的形式,實(shí)現(xiàn)了6to4 隧道的自動(dòng)建立,相對(duì)于手工隧道來說,該方式易于隧道的擴(kuò)展,簡(jiǎn)化了隧道的配置,方便了隧道的管理.除去特定的2002 先導(dǎo)及內(nèi)嵌的IPv4 地址,6to4隧道還可以自定義16位值,形成64位網(wǎng)絡(luò)前綴,而64 位的接口ID 可以手工配置,也可以自動(dòng)生成.該隧道模式的配置命令為tunnel mode ipv6ip 6to4.
1.2.3 ISATAP隧道
ISATAP 是Intra-Site Automatic Tunnel Addressing Protocol的簡(jiǎn)稱,中文意為站內(nèi)自動(dòng)隧道尋址協(xié)議.ISATAP協(xié)議不僅能實(shí)現(xiàn)自動(dòng)隧道,還能在隧道兩端設(shè)備之間運(yùn)行ND 協(xié)議,從而實(shí)現(xiàn)IPv4網(wǎng)絡(luò)中的設(shè)備自動(dòng)配置IPv6 地址的功能.與6to4隧道類似,ISATAP 隧道的地址也有特定格式,它的64 位接口ID 必須為0:5EFE:a.b.c.d.其中0:5EFE 為IANA 規(guī)定的固定值,a.b.c.d 是以16 進(jìn)制形式嵌入到IPv6 地址最后32 位的單播IPv4 地址.位于IPv4 網(wǎng)絡(luò)中的ISATAP 主機(jī)的64 位前綴可以通過向ISATAP 路由器發(fā)送ND 協(xié)議自動(dòng)獲得.該隧道模式的配置命令為tunnel mode ipv6ip isatap.
IPv6 隧道的配置,一般需要經(jīng)過四步:第一步,要?jiǎng)?chuàng)建并進(jìn)入隧道接口.在全局配置模式下使用命令interface tunnel XX進(jìn)行.其中XX為隧道編號(hào),本地有效.第二步,配置隧道的模式,在tunnel接口下使用命令tunnel mode 進(jìn)行.配置時(shí)可以根據(jù)實(shí)際需要選擇合適的模式.一般隧道較少且相對(duì)固定時(shí),其模式可以選擇手工隧道;如果隧道較多,且不固定時(shí),其模式可以選擇自動(dòng)隧道.不同類別的隧道需要選擇合適的隧道模式,并且需要保證隧道兩端使用的模式相同.否則,隧道可能因?yàn)榉庋b、解封裝失敗而不能正常建立.第三步,根據(jù)選擇的隧道模式,配置隧道的源,或者源與目的.由于隧道是跨IPv4 網(wǎng)絡(luò)的,因此隧道的源為IPv4地址(或源接口),用命令tunnel source XXXX 實(shí)現(xiàn).若需要配置隧道的目的,使用命令tunnel destination XXXX 實(shí)現(xiàn).不管是手工隧道,還是自動(dòng)隧道,隧道的源和目的必須IP 可達(dá).第四步,由于配置的是IPv6 隧道,因此需要使用IPv6 address 命令為隧道配置IPv6 地址.該地址要根據(jù)配置的隧道類別不同,采用不同的特定格式.
不同的IPv6 隧道外在差異表現(xiàn)在配置命令不同,本質(zhì)區(qū)別在于隧道的封裝上.基于圖1的網(wǎng)絡(luò)拓?fù)?,在GNS3中配置并抓包比較各種IPv6隧道的封裝,以加深對(duì)隧道技術(shù)的理解.實(shí)驗(yàn)中路由器設(shè)備的IOS為12.4版本.
不管是手工隧道還是自動(dòng)隧道,隧道的源必須配置.對(duì)于手工隧道還必須配置其目的.為方便起見,本文tunnel兩端的IPv6地址均配置為同一網(wǎng)段地址,避免了tunnel兩端地址不在同一網(wǎng)段需要配置轉(zhuǎn)發(fā)路由的問題.
2.1.1 IPv6 GRE隧道配置及抓包
GRE 是Generic Routing Encapsulation的 簡(jiǎn)稱,即通用路由封裝協(xié)議.該協(xié)議可以封裝多種網(wǎng)絡(luò)層協(xié)議報(bào)文,實(shí)現(xiàn)在IPv4 網(wǎng)絡(luò)中傳輸被封裝數(shù)據(jù)的目的[9].GRE 隧道是最傳統(tǒng)的隧道技術(shù),通過多次封裝GRE可以在兩個(gè)遠(yuǎn)程網(wǎng)絡(luò)之間模擬出直連鏈路,達(dá)到直連的效果.此時(shí),圖1 中R2 與R3 相當(dāng)于通過tunnel 直接互聯(lián),圖1的網(wǎng)絡(luò)拓?fù)淇珊?jiǎn)化為圖2 所示.為了使圖2的IPv6 網(wǎng)絡(luò)全網(wǎng)互通,可以將tunnel口宣告進(jìn)原IPv6網(wǎng)絡(luò)的RIPng協(xié)議中.
圖2 配置手工隧道后的簡(jiǎn)化圖
圖2 中配置IPv6 GRE 隧道時(shí),R2 上的關(guān)鍵配置如下:
R2(config)#interface tunnel 2//創(chuàng)建并進(jìn)入tunnel口,編號(hào)2本地有效;
R2(config-if)#tunnel mode gre ip//設(shè)置tunnel的模式為gre,默認(rèn),可??;
R2(config-if)#tunnel source 2.2.2.2//設(shè)置tunnel的源;
R2(config-if)#tunnel destination 3.3.3.3//設(shè)置tunnel的目的;
R2(config-if)#ipv6 address 2003::2/64//設(shè)置tunnel的ipv6地址;
R2(config-if)#ipv6 rip A enable//宣告tunnel口進(jìn)RIPng路由協(xié)議.
R3 上的關(guān)鍵配置與此類似,注意將tunnel的源和目的互換.配置完成后,在R6 路由器上通過命令ping ipv6 5::7 測(cè)試兩端IPv6 網(wǎng)絡(luò)的連通性,結(jié)果可通,實(shí)現(xiàn)了IPv6 網(wǎng)絡(luò)跨IPv4 網(wǎng)絡(luò)互通的目的.在IPv4 網(wǎng)絡(luò)中收發(fā)數(shù)據(jù)的任一接口抓包,結(jié)果如圖3 所示.從圖3 可知,ICMPv6的Echo request報(bào)文先封裝了IPv6的報(bào)頭,源為4::6,目的為5::7;再封裝了GRE 頭;最后封裝了IPv4 報(bào)頭,源為2.2.2.2,目的為3.3.3.3,分別為配置tunnel時(shí)的源和目的.正是由于封裝了這個(gè)IPv4 報(bào)頭,才使得IPv6的報(bào)文能夠在IPv4 網(wǎng)絡(luò)中傳輸,實(shí)現(xiàn)了跨IPv4 網(wǎng)絡(luò)的IPv6孤島的互通.
圖3 IPv6 GRE封裝
GRE 隧道的優(yōu)勢(shì)在于其可以封裝很多種網(wǎng)絡(luò)層協(xié)議,而不僅僅是IPv6.但GRE 在隧道兩端的封裝、解封裝過程,以及由于多次封裝增加了報(bào)文長(zhǎng)度,會(huì)導(dǎo)致啟用GRE的設(shè)備轉(zhuǎn)發(fā)效率的下降.
2.1.2 IPv6手動(dòng)隧道配置及抓包
針對(duì)IPv6 孤島的連通需求來說,完全可以使用IPv6 手動(dòng)隧道替代IPv6 GRE 隧道.IPv6 手動(dòng)隧道的配置與IPv6 GRE 隧道非常相似,在保持網(wǎng)絡(luò)環(huán)境及其他配置不變的情況下,只需要通過命令tunnel mode ipv6ip 修改隧道模式為ipv6ip 即可.同IPv6 GRE 隧道一樣進(jìn)行抓包,結(jié)果如圖4 所示.可見,IPv6手動(dòng)隧道對(duì)ICMPv6報(bào)文在封裝了IPv6報(bào)頭后,直接封裝了IPv4報(bào)頭.
圖4 IPv6手動(dòng)隧道封裝
隧道模式的改變意味著報(bào)文封裝的改變.在實(shí)現(xiàn)既定功能的情況下,IPv6 手動(dòng)隧道的報(bào)頭結(jié)構(gòu)較IPv6 GRE報(bào)頭封裝簡(jiǎn)單,報(bào)頭長(zhǎng)度減小,設(shè)備轉(zhuǎn)發(fā)效率較高.只是此模式僅能對(duì)IPv6 報(bào)文進(jìn)行IPv4 報(bào)頭的再次封裝,而不能對(duì)其他協(xié)議的報(bào)文進(jìn)行再封裝.
IPv6 手工隧道易于理解,便于實(shí)現(xiàn).但由于手工隧道既需要配置源,又需要配置目的,當(dāng)隧道數(shù)量增加時(shí),其配置、管理、維護(hù)的工作量大大增加.此時(shí),自動(dòng)隧道的優(yōu)勢(shì)就非常突出了.自動(dòng)隧道利用內(nèi)嵌IPv4 地址的特殊IPv6 地址,從IPv6 報(bào)文中自動(dòng)確定隧道終點(diǎn),實(shí)現(xiàn)了隧道的自動(dòng)建立,大大簡(jiǎn)化了隧道的配置和管理工作.
2.2.1 IPv4兼容IPv6隧道配置及抓包
作為IPv6 自動(dòng)隧道之一的IPv4 兼容IPv6 隧道,其配置與其他IPv6 隧道的配置大致相同.由于其IPv6地址為IPv4兼容地址,因此,該地址不需要用ipv6 address進(jìn)行配置,只要確保隧道模式正確,即可以根據(jù)隧道IPv4源地址自動(dòng)生成.針對(duì)圖1所示的網(wǎng)絡(luò)拓?fù)?,在路由器R2上其關(guān)鍵配置如下:
R2(config)#interface tunnel 2//創(chuàng)建并進(jìn)入tunnel口,編號(hào)2本地有效;
R2(config-if)#tunnel mode ipv6ip auto-tunnel//設(shè)置tunnel的模式為IPv4兼容IPv6自動(dòng)隧道;
R2(config-if)#tunnel source 2.2.2.2//設(shè)置tunnel的源.自動(dòng)隧道,不必設(shè)置隧道的目的;特殊IPv6地址格式,自動(dòng)生成,不需專門配置.
R3上配置類似,不再贅述.
自動(dòng)隧道只指定了源,其目的是根據(jù)實(shí)際訪問的IPv6 網(wǎng)絡(luò)不同而動(dòng)態(tài)自動(dòng)生成的.因此,自動(dòng)隧道的Tunnel 口并沒有像手工隧道那樣宣告進(jìn)IPv6 網(wǎng)絡(luò)的路由協(xié)議中.由于對(duì)端不確定,即使將tunnel口宣告進(jìn)IPv6網(wǎng)絡(luò)的路由協(xié)議中,本端IPv6網(wǎng)絡(luò)也學(xué)習(xí)不到對(duì)端IPv6 網(wǎng)絡(luò)的路由.一般情況下,為了使IPv6 網(wǎng)絡(luò)能夠通過自動(dòng)隧道跨IPv4 網(wǎng)絡(luò)互通,需要在隧道的源端設(shè)備上配置IPv6 靜態(tài)路由,其出接口指定為創(chuàng)建的tunnel 口.這樣,當(dāng)IPv6的報(bào)文匹配此路由時(shí),數(shù)據(jù)包從tunnel 口發(fā)出,從而對(duì)其再封裝IPv4頭后在IPv4網(wǎng)絡(luò)上傳輸.
為了使本端IPv6 網(wǎng)絡(luò)中的所有設(shè)備都能通過IPv6 自動(dòng)隧道訪問對(duì)端IPv6 網(wǎng)絡(luò),可以在隧道源端設(shè)備上將配置的靜態(tài)路由引入到IPv6 網(wǎng)絡(luò)的路由協(xié)議中.或者,為了減少IPv6 網(wǎng)絡(luò)的路由表?xiàng)l目,可以在隧道源端設(shè)備上下放默認(rèn)路由,將非本網(wǎng)絡(luò)的IPv6 數(shù)據(jù)流引向此設(shè)備,再匹配該設(shè)備上配置的靜態(tài)路由后從Tunnel 口發(fā)出.針對(duì)本拓?fù)渌玫腞IPng協(xié)議,其下放默認(rèn)路由通過在F0/0接口下執(zhí)行ipv6 rip A default-information originate 命令實(shí)現(xiàn).
路由器R2、R3上的IPv4兼容IPv6隧道配置完成 后,在R2 上 執(zhí) 行 命 令ping ipv6 ::303:303 source::202:202,可通.在IPv4 網(wǎng)絡(luò)中抓包,結(jié)果如圖5 所示.可見,針對(duì)ICMPv6的Echo request 報(bào)文,先封裝了IPv6 報(bào)頭,其源、目的IPv6 地址是IPv4兼容IPv6地址,即ping ipv6命令的源、目的地址.
圖5 IPv4兼容IPv6隧道抓包
該報(bào)文在R2上發(fā)出時(shí),匹配到R2上的直連路由::/96,從tunnel 口發(fā)出,進(jìn)行隧道的IPv4 再封裝.其目的地址從IPv6 報(bào)文中的目的IPv4 兼容IPv6 地址中自動(dòng)獲取到3.3.3.3,源地址為tunnel 口的源地址2.2.2.2.由于源2.2.2.2 與目的3.3.3.3 在IPv4 網(wǎng)絡(luò)中互通,因此,數(shù)據(jù)包能在IPv4 網(wǎng)絡(luò)上順利傳送.路由器R3 收到此報(bào)文后,先進(jìn)行IPv4 解封裝,取出IPv6 報(bào)文,送給IPv6 協(xié)議棧處理;回復(fù)ICMPv6的Echo reply 報(bào)文,處理過程類似.隧道建立成功.
但是從該測(cè)試對(duì)報(bào)文的封裝過程也可以看出一些問題.針對(duì)IPv4兼容IPv6隧道來說,由于其進(jìn)行隧道IPv4 封裝時(shí),需要借助目的IPv6 地址獲取到目的IPv4 地址后才能正常封裝,因此,當(dāng)目的IPv6 地址不是合法的IPv4 兼容IPv6 地址時(shí),則獲取目的IPv4 地址失敗,導(dǎo)致IPv6 報(bào)文不能進(jìn)行正常的隧道封裝,報(bào)文被丟棄,網(wǎng)絡(luò)不通.
作為早期的IPv6 自動(dòng)隧道技術(shù),IPv4 兼容IPv6 地址隧道受限于地址格式的規(guī)定,隧道的建立和應(yīng)用依賴單播IPv4 地址,不適合大規(guī)模部署.目前該技術(shù)已逐漸被6to4隧道取代[10].
2.2.2 6to4隧道配置及抓包
6to4 隧道是第二種IPv6 自動(dòng)隧道,也是當(dāng)前主流的IPv6 隧道.其配置除按IPv6 隧道的一般操作進(jìn)行外,需要注意隧道的IPv6 地址格式要按規(guī)定采取6to4 地址形式.這也是6to4 隧道名稱的來由.針對(duì)圖1的6to4 隧道在路由器R2 上的關(guān)鍵配置如下:
R2(config)#interface tunnel 2//同前;
R2(config-if)#tunnel mode ipv6ip 6to4//設(shè) 置tunnel的模式為6to4 自動(dòng)隧道;
R2(config-if)#tunnel source 2.2.2.2//設(shè) 置tunnel的源.自動(dòng)隧道不必設(shè)置隧道的目的;
R2(config-if)#ipv6 address 2002:202:202:2::2/64//6to4 規(guī)定地址格式.
R3 上配置類似,不再贅述.
為了讓跨IPv4 網(wǎng)絡(luò)的IPv6 報(bào)文能夠從tunnel 口發(fā)出及方便起見,分別在R2、R3 上配置IPv6 默認(rèn)路由,出接口為tunnel 口.R2 上的具體配置如下:
R2(config)#ipv6 route ::/0 tunnel 2.
配置完成后,在R2 上通過命令ping ipv6 2002:303:303:3::3 source 2002:202:202:2::2測(cè)試兩端的連通性,可通.該過程抓包結(jié)果如圖6 所示.
圖6 6to4 隧道抓包細(xì)果
從圖6 可見,6to4 隧道的封裝與IPv4 兼容IPv6 隧道的封裝形式及封裝過程類似.不同的是它們的隧道IPv6 地址格式.其隧道的IPv4 地址來源也類似,目的IPv4 地址從特定格式的目的IPv6 地址中自動(dòng)獲取,源IPv4 地址為tunnel的源.將圖6 中的IPv6 封裝頭展開后,可見由IPv6地址自動(dòng)分離出的IPv4 地址,如圖7 所示.
圖7 6to4 隧道抓包分析圖
如同IPv4 兼容IPv6 隧道一樣,受制于隧道IPv6 地址格式的規(guī)定、隧道的IPv4 源、目的地址的獲取方式及封裝過程限制,若要實(shí)現(xiàn)隧道兩端的IPv6 網(wǎng)絡(luò)互通,要求IPv6 網(wǎng)絡(luò)中設(shè)備的地址具有與tunnel 口IPv6 地址相同的48 位前綴,即6to4 隧道僅可以直接連通6to4 網(wǎng)絡(luò).圖1 所示的網(wǎng)絡(luò)環(huán)境下,路由器R6 上執(zhí)行ping ipv6 5::7是ping 不通的,并不能實(shí)現(xiàn)通過6to4 隧道連通IPv6 孤島的目的,其原因就在于測(cè)試的地址不是合法的6to4 地址.將IPv6 網(wǎng)絡(luò)中所有設(shè)備的地址按格式要求更改后,確保IPv6 路由正常,即可實(shí)現(xiàn)6to4 隧道連通IPv6 孤島的功能.
2.2.3 ISATAP 隧道配置及抓包
ISATAP 隧道可以實(shí)現(xiàn)IPv4 網(wǎng)絡(luò)中的雙棧主機(jī)與IPv6 網(wǎng)絡(luò)互通,隧道源端建立在IPv6 網(wǎng)絡(luò)中的設(shè)備上.借助運(yùn)行在ISATAP 隧道兩端設(shè)備之間的ND 協(xié)議,可以實(shí)現(xiàn)雙棧主機(jī)的IPv6 地址自動(dòng)配置.其64 位前綴通過向ISATAP 路由器發(fā)送RS 請(qǐng)求獲得,64 位接口ID 自動(dòng)生成,格式為0:5EFE:x.y.z.t.其中x.y.z.t 為雙棧主機(jī)的IPv4 地址.針對(duì)圖1 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),ISATAP 隧道源端R2設(shè)備上的關(guān)鍵配置如下:
R2(config)#interface tunnel 22//同前;
R2(config-if)#tunnel mode ipv6ip isatap//配置隧道模式為isatap;
R2(config-if)#tunnel source 2.2.2.2//配置隧道的源;
R2(config-if)#ipv6 address 2001::5efe:202:202/64//配置isatap 隧道的ipv6 地址,格式需要嚴(yán)格按規(guī)定進(jìn)行;
R2(config-if)#no ipv6 nd ra suppress//允 許tunnel 口發(fā)送RA 報(bào)文.
IPv4 網(wǎng)絡(luò)中的雙棧主機(jī)除需要與ISATAP 隧道的源IP 可達(dá)外,其配置還與操作系統(tǒng)有關(guān).以win7 系統(tǒng)為例,在確保microsoft isatap adapter 虛擬網(wǎng)卡正常的情況下,在cmd 命令行中執(zhí)行netsh interface isatap set state enable 命令使能ISATAP 隧 道;執(zhí) 行netsh interface ipv6 isatap set router 2.2.2.2 命令,設(shè)置默認(rèn)路由器.設(shè)置完后,雙棧主機(jī)即會(huì)主動(dòng)向路由器2.2.2.2 發(fā)起RS 請(qǐng)求,路由器R2 收到ISATAP的RS 請(qǐng)求后,會(huì)返回一個(gè)帶有前綴信息2001::/64的RA.再根據(jù)ISATAP的IPv6 接口ID 生成方式,雙棧主機(jī)會(huì)自動(dòng)生成一個(gè)IPv6 地址和一個(gè)默認(rèn)IPv6 網(wǎng)關(guān).如圖8所示.
圖8 ISATAP雙棧主機(jī)自動(dòng)生成的IPv6地址及網(wǎng)關(guān)
在雙棧主機(jī)上通過命令ping-6 2001::5efe:202:202測(cè)試連通性,可通,ISATAP隧道建立成功.此時(shí)在IPv4 網(wǎng)絡(luò)中抓包,結(jié)果如圖9 所示.其封裝過程如下:
圖9 ISATAP抓包結(jié)果一
首先,雙棧主機(jī)根據(jù)Ping-6 命令將ICMPv6的報(bào)文封裝IPv6 報(bào)頭,源IPv6 地址為雙棧主機(jī)上自動(dòng)生成的ISATAP 虛擬網(wǎng)卡地址.該IPv6 報(bào)文源、目的在同一網(wǎng)段,直接從ISATAP 隧道發(fā)出.雙棧主機(jī)依據(jù)ISATAP 隧道的地址格式規(guī)定,從IPv6 報(bào)文中獲取到IPv4 報(bào)文的源和目的,進(jìn)行IPv4 報(bào)頭的再次封裝后將其發(fā)到IPv4 網(wǎng)絡(luò)上.在IPv4 網(wǎng)絡(luò)上,數(shù)據(jù)包按IPv4 路由正常轉(zhuǎn)發(fā)到路由器R2.在R2 上報(bào)文經(jīng)過兩次解封裝后上送上層協(xié)議.上層協(xié)議回應(yīng)該ping 包,并對(duì)其進(jìn)行兩次封裝后返回給雙棧主機(jī),一次通信結(jié)束.
在IPv6 網(wǎng)絡(luò)全網(wǎng)互通且將ISATAP 接口宣告進(jìn)RIPng(或者通過ISATAP 路由器下放默認(rèn)路由)的情況下,ISATAP主機(jī)可以ping通ISATAP路由器所在IPv6 網(wǎng)絡(luò)中的所有設(shè)備.在雙棧主機(jī)上執(zhí)行命令ping-6 4::6,結(jié)果可通.該過程的抓包結(jié)果如圖10所示,其過程如下:
圖10 ISATAP抓包結(jié)果二
首先,雙棧主機(jī)根據(jù)執(zhí)行的ping-6 命令對(duì)icmpv6 報(bào)文進(jìn)行IPv6 封裝.由于IPv6 報(bào)文的源、目的不屬于同一子網(wǎng),則雙棧主機(jī)從其IPv6 默認(rèn)網(wǎng)關(guān)(即IPv6 路由的下一跳)的地址中取出IPv4 地址作為IPv4 封裝的目的地址,即2.2.2.2,源IPv4 地址即ISATAP 主機(jī)的IPv4 地址仍然從源IPv6 地址中獲取.封裝后,報(bào)文在IPv4 網(wǎng)絡(luò)上傳送到ISATAP路由器R2.路由器R2 接收該報(bào)文后解封裝IPv4 頭露出IPv6 頭,R2 按IPv6 路由將其發(fā)送到目的主機(jī)(路由器R6).目的主機(jī)解封裝IPv6報(bào)頭,數(shù)據(jù)上送上層協(xié)議并回應(yīng),回應(yīng)報(bào)文封裝IPv6 頭(源、目的IPv6地址與接收時(shí)互換)并依據(jù)通過RIPng 學(xué)習(xí)得到的ISATAP 隧道明細(xì)路由或者RIPng下放的默認(rèn)路由傳送到路由器R2.ISATAP路由器R2依據(jù)IPv6報(bào)文的目的地址,將報(bào)文從ISATAP 隧道發(fā)出,封裝的IPv4 源地址為隧道的源,IPv4 目的地址從IPv6 目的地址中獲取.最后,報(bào)文在IPv4 網(wǎng)絡(luò)中傳送到雙棧主機(jī),經(jīng)過解封裝后,完成一次通信過程.
前述針對(duì)圖1的IPv6 自動(dòng)隧道僅測(cè)試了隧道兩端tunnel 口的連通性及ISATAP 主機(jī)與ISATAP路由器所在IPv6 網(wǎng)絡(luò)的連通性.事實(shí)上,由于圖1中IPv6 網(wǎng)絡(luò)的地址規(guī)劃不滿足特定格式的規(guī)定,在當(dāng)前配置下,兩個(gè)IPv6 網(wǎng)絡(luò)不能互通.同時(shí),ISATAP 主機(jī)也不能與ISATAP 路由器所在網(wǎng)絡(luò)以外的IPv6網(wǎng)絡(luò)互通.
仔細(xì)分析以上問題發(fā)現(xiàn),IPv4 報(bào)文封裝失敗是導(dǎo)致不通的原因.如6to4 隧道中在路由器R6 上執(zhí)行ping IPv6 5::7 操作,其報(bào)文處理過程如下:在R6 上,路由器根據(jù)執(zhí)行的命令將ICMPv6的Echo request 報(bào)文進(jìn)行IPv6 封裝,其目的為5::7,源默認(rèn)為發(fā)出該報(bào)文的接口的地址4::6;該報(bào)文依據(jù)隧道源端路由器R2下放的默認(rèn)路由傳到R2;在R2 上,報(bào)文依據(jù)其上配置的默認(rèn)路由從tunnel口發(fā)出,對(duì)該報(bào)文進(jìn)行IPv4再次封裝;其IPv4源地址為隧道的源2.2.2.2,而IPv4的目的地址應(yīng)該從IPv6 報(bào)文的目的地址5::7 中獲取.由于該地址不滿足6to4 地址的規(guī)定,獲取不到IPv4 目的地址,導(dǎo)致IPv4封裝失敗,報(bào)文被丟棄.
要解決這類因隧道封裝失敗而導(dǎo)致IPv6 孤島不能連通的問題,就要用到6to4 中繼.所謂6to4 中繼,即6to4 隧道中提供中繼功能的路由器.當(dāng)6to4隧道發(fā)出的IPv6 報(bào)文的目的地址非6to4 地址時(shí),為實(shí)現(xiàn)隧道正常封裝IPv4 源和目的,配置其轉(zhuǎn)發(fā)路由的下一跳為6to4 地址,而隧道的IPv4 目的地址即從該6to4 下一跳地址中獲取.該下一跳路由器即為6to4 中繼路由器[10].針對(duì)圖1 來說,R3 可配置為左邊IPv6 網(wǎng)絡(luò)的6to4 中繼;R2 可配置為右邊IPv6網(wǎng)絡(luò)的6to4中繼.
在R2 上配置R3 為左邊IPv6 網(wǎng)絡(luò)的6to4 中繼的方法如下:
IPv6 route::/0 2002:303:303:3::3//默認(rèn)路由的下一跳為R3的6to4地址;
IPv6 route 2002:303:303:3::/64 tunnel2//配置明細(xì)路由,出接口為tunnel口.
在R3 上配置R3 為左邊IPv6 網(wǎng)絡(luò)的6to4 中繼的方法如下:
IPv6 route::/0 2002:202:202:2::2//同前;
IPv6 route 2002:202:202:2::/64 tunnel3//同前.
配置完成后,在路由器R7 上執(zhí)行命令ping IPv6 4::6測(cè)試連通性,可通.該過程抓包結(jié)果如圖11所示.
圖11 6to4中繼測(cè)試抓包
從抓包結(jié)果可見,針對(duì)非6to4 地址的兩個(gè)IPv6 網(wǎng)絡(luò)的ping 包,正確封裝了6to4 隧道的源、目的IPv4 頭,從而實(shí)現(xiàn)了互通.在這里從非6to4 地址如何獲取到正確的源、目的IPv4 地址,需要從數(shù)據(jù)包的封裝過程進(jìn)行分析.在R7 上,根據(jù)執(zhí)行的命令為ICMPv6的Echo request 報(bào)文添加了IPv6 頭,其目的為4::6,源為5::7.該報(bào)文按RIPng 下放的默認(rèn)路由被傳送到R3 上.在R3 上,該報(bào)文匹配到靜態(tài)默認(rèn)路由,數(shù)據(jù)包發(fā)往2002:202:202:2::2.但2002:202:202:2::2 并非R3的直連網(wǎng)絡(luò),因此數(shù)據(jù)包并不能直接發(fā)送.路由器需要遞歸查找到2002:202:202:2::2的路由,結(jié)果匹配到配置的靜態(tài)路由,數(shù)據(jù)包從tunnel3 口發(fā)出.注意,此時(shí)的數(shù)據(jù)IPv4封裝,其源為tunnel3口的源3.3.3.3,目標(biāo)為從2002:202:202:2::2 這個(gè)6to4 下一跳地址中獲取的2.2.2.2.數(shù)據(jù)包發(fā)到R2 解封裝Ipv4 頭后,按IPv6 路由傳送并回應(yīng),完成一次通信過程.正是由于路由的遞歸查找及從IPv6 下一跳中獲取目標(biāo)IPv4 地址的特性,實(shí)現(xiàn)了6to4 中繼功能,完成了非6to4 網(wǎng)絡(luò)的連通.回想ISATAP 隧道中,雙棧主機(jī)可以ping 通IPv6 網(wǎng)絡(luò)中設(shè)備的過程,其從默認(rèn)IPv6 網(wǎng)關(guān)中獲取目標(biāo)IPv4 地址,其過程類似從路由的6to4 下一跳地址中獲取目標(biāo)IPv4 地址.實(shí)際上,默認(rèn)網(wǎng)關(guān)就是路由的下一跳,只是此處的下一跳地址為6to4 地址,而ISATAP 隧道中網(wǎng)關(guān)為ISATAP 規(guī)定格式的地址.當(dāng)有多個(gè)IPv6 孤島互聯(lián)時(shí),可以考慮將IPv6 默認(rèn)路由改為明細(xì)路由,并根據(jù)具體IPv6網(wǎng)絡(luò)合理設(shè)置明細(xì)路由的IPv6下一跳即可.
從6to4 中繼解決非6to4 網(wǎng)絡(luò)連通性問題的過程中得到啟發(fā),可以配置類似6to4 中繼的功能實(shí)現(xiàn)IPv4 兼容IPv6 隧道連通IPv6 孤島的問題.保證IPv4 兼容IPv6 隧道配置正確的情況下,在R2 上添加如下命令:
IPv6 route::/0::3.3.3.3//默認(rèn)路由的下一跳為R3的兼容IPv6隧道地址.
在R3上添加如下命令:
IPv6 route::/0::2.2.2.2//默認(rèn)路由的下一跳為R2的兼容IPv6隧道地址.
配置完成后,在路由器R6 上執(zhí)行命令ping ipv6 5::7可通.該過程數(shù)據(jù)封裝類似6to4中繼.在R6 上的ping 包到達(dá)R2 后,匹配默認(rèn)路由.由于默認(rèn)路由的下一跳為不可直達(dá)的IPv4 兼容IPv6 地址,因此,遞歸查找路由表.此時(shí),路由器R2 上的IPv6 路由表如圖12 所示.遞歸查找后匹配直連路由::/96,數(shù)據(jù)從tunnel 口發(fā)出.其數(shù)據(jù)封裝抓包如圖13所示.
圖12 IPv4兼容IPv6隧道中繼時(shí)的IPv6路由表
圖13 IPv4兼容IPv6隧道中繼測(cè)試抓包
從抓包結(jié)果來看,通過配置中繼路由器,對(duì)普通的IPv6 包進(jìn)行了IPv4 兼容IPv6 隧道的封裝,實(shí)現(xiàn)了IPv6 孤島通過IPv4 兼容IPv6 隧道互通的目的.
實(shí)驗(yàn)證明,合理配置IPv6 隧道中繼路由器,還可以實(shí)現(xiàn)ISATAP 雙棧主機(jī)與ISATAP 路由器所在網(wǎng)絡(luò)以外的IPv6 網(wǎng)絡(luò)的互通.其過程與前述原理類似,不再贅述.
IPv6 隧道6to4 中繼的應(yīng)用,解決了非6to4的IPv6 孤島的連通問題.然而中繼的啟用是以耗費(fèi)系統(tǒng)資源得到的.為避免系統(tǒng)額外的資源開銷,6to4 隧道兩端的網(wǎng)絡(luò)最好按6to4 地址格式規(guī)劃、配置[11].
IPv6隧道作為IPv4網(wǎng)絡(luò)與IPv6網(wǎng)絡(luò)共存期間的過渡技術(shù),是跨IPv4 網(wǎng)絡(luò)連通IPv6 孤島的必備手段.從各種IPv6 隧道抓包結(jié)果分析隧道封裝來看,IPv6隧道中除GRE隧道外,都直接采用協(xié)議號(hào)41,因此,在任何IPv4 網(wǎng)絡(luò)或者防火墻中需要放過協(xié)議41;若使用隧道中繼,則要求中繼路由器不使用NAT 而直接連接到全球IPv4 網(wǎng)絡(luò).在教學(xué)過程中,通過分析隧道封裝可以加深學(xué)生對(duì)隧道技術(shù)的理解與掌握;在實(shí)際使用時(shí),可以根據(jù)網(wǎng)絡(luò)拓?fù)?、隧道的建立方式及轉(zhuǎn)發(fā)效率等情況合理選擇隧道模式.