陳茂科 劉鑫 黃輝 嚴(yán)程 李星
摘 要 隧道技術(shù)為IPv6端到端的分組穿越廣泛分布的IPv4 Internet提供了虛擬鏈路。手工配置隧道效率很低,不適應(yīng)于用戶較多情況下IPv6虛擬網(wǎng)絡(luò)的配置管理。隧道代理(TunnelBroker)技術(shù)實(shí)現(xiàn)了隧道的自動(dòng)配置和管理。本文實(shí)現(xiàn)的隧道代理系統(tǒng)在可擴(kuò)展性方面進(jìn)行了改進(jìn)。該系統(tǒng)已經(jīng)在CERNET IPv6試驗(yàn)床上使用。
關(guān)鍵詞 隧道 隧道代理 IPv6演進(jìn)
1 引言
IPv6(Internet Protocol Version 6)[1]是面向下一代Internet設(shè)計(jì)的網(wǎng)絡(luò)層協(xié)議。由于IPv6和IPv4的報(bào)文格式并不兼容,人們?cè)O(shè)計(jì)了多種過(guò)渡機(jī)制,令I(lǐng)Pv6能夠在今天廣泛使用的IPv4基礎(chǔ)設(shè)施上實(shí)現(xiàn)虛擬網(wǎng)絡(luò)互連[2]。隧道(tunneling)技術(shù)由于滿足IPv6端到端通信的要求得到廣泛的使用。無(wú)狀態(tài)的隧道技術(shù)——6 to 4需要特定的地址空間(2002::/16),形成的虛擬網(wǎng)絡(luò)規(guī)模單一(只有/48)[3],而拓?fù)浣Y(jié)構(gòu)又太過(guò)于自由——任何兩個(gè)IPv4節(jié)點(diǎn)之間都可以隨時(shí)使用6 to 4的無(wú)狀態(tài)虛擬鏈路,不適用于自治系統(tǒng)(AS)內(nèi)有層次的IPv6網(wǎng)絡(luò)的組織,而且IPv6其網(wǎng)絡(luò)標(biāo)識(shí)也依賴于IPv4的地址。因此在很多場(chǎng)合下,有狀態(tài)的隧道技術(shù)[4]仍然得到重視,并且廣泛應(yīng)用于今天的IPv6試驗(yàn)網(wǎng)絡(luò)和早期商用網(wǎng)絡(luò)。
“隧道”技術(shù)的核心是把IPv6的報(bào)文封裝在IPv4的報(bào)文中,使用現(xiàn)有的支持IPv4的互聯(lián)網(wǎng)傳送IPv6的報(bào)文。如果兩個(gè)IPv6節(jié)點(diǎn)A和B之間建立了一條隧道,那么當(dāng)節(jié)點(diǎn)A要向節(jié)點(diǎn)B發(fā)送IPv6報(bào)文時(shí),它把IPv6報(bào)文封裝在以節(jié)點(diǎn)B的IPv4地址為目的地址的IPv4報(bào)文中發(fā)送出去,節(jié)點(diǎn)B收到此報(bào)文后則解除IPv4封裝,取其中的IPv6報(bào)文放入自己的IPv6協(xié)議棧。因此,一條隧道的配置至少隧道兩端交換各自的IPv4地址信息。對(duì)于有狀態(tài)隧道的配置而言,兩對(duì)參數(shù)需要由雙邊網(wǎng)絡(luò)管理員相互約定、手工配置和維護(hù)。管理工作量大、工作效率低、容易出錯(cuò)。盡管相對(duì)于無(wú)狀態(tài)的6 to 4技術(shù)來(lái)說(shuō),有狀態(tài)隧道技術(shù)有上面提到的優(yōu)點(diǎn),它的應(yīng)用卻因?yàn)樯鲜鍪止づ渲玫娜秉c(diǎn)而受到很大限制。一般,只在大網(wǎng)之間進(jìn)行IPv6互連并且隧道的數(shù)目并不太多的時(shí)候,才會(huì)考慮采用手工方式管理和配置隧道。
因此,對(duì)于用戶比較多的中等規(guī)模的ISP以及最終的網(wǎng)絡(luò)來(lái)說(shuō),實(shí)現(xiàn)隧道的自動(dòng)配置管理是很有必要的。隧道代理(Tunnel Broker)是實(shí)現(xiàn)這種自動(dòng)配置管理的技術(shù)。RFC3053描述了隧道代理的基本原理和構(gòu)成框架[5],具體實(shí)現(xiàn)時(shí)一般需要對(duì)細(xì)節(jié)部分進(jìn)行重新設(shè)計(jì)。本文討論為中國(guó)教育和科研計(jì)算機(jī)網(wǎng)(CERNET)IPv6試驗(yàn)床[6]主干網(wǎng)設(shè)計(jì)的隧道代理模型和軟件實(shí)現(xiàn)的要點(diǎn),著重闡述該設(shè)計(jì)不同于RFC3053的部分以及導(dǎo)致這些不同的原因。相對(duì)于早期的簡(jiǎn)化原型實(shí)現(xiàn)[7],現(xiàn)在運(yùn)行的系統(tǒng)則完善了RFC3053涉及的所有主要功能模塊,并在提高系統(tǒng)的可擴(kuò)展性方面進(jìn)行了重要的改進(jìn)。實(shí)際的運(yùn)行表明,本文所設(shè)計(jì)的隧道代理系統(tǒng)能夠適應(yīng)CERNET主干網(wǎng)以下快速組建簡(jiǎn)單IPv6虛擬網(wǎng)絡(luò)的需要。
2 CERNET IPv6隧道代理系統(tǒng)的特點(diǎn)
RFC3053描述了隧道代理系統(tǒng)的主要構(gòu)成和基本工作原理,但是并沒(méi)有規(guī)定所有的實(shí)現(xiàn)細(xì)節(jié);而對(duì)于其規(guī)定的部分,也并不一定適用于任何具體環(huán)境的需要。因此在設(shè)計(jì)實(shí)現(xiàn)隧道代理系統(tǒng)之前,必須給定設(shè)計(jì)的目標(biāo)和界限,以確定對(duì)于RFC所建議的各項(xiàng)功能,是遵照實(shí)現(xiàn)還是進(jìn)行調(diào)整、省略或增加。
在CERNET IPv6試驗(yàn)床上實(shí)現(xiàn)隧道代理的服務(wù)系統(tǒng),是希望這個(gè)系統(tǒng)能夠在試驗(yàn)床的學(xué)生實(shí)驗(yàn)部分的網(wǎng)絡(luò)中擔(dān)負(fù)NLA(Next-Level Aggregation)級(jí)別的地址分配和主干網(wǎng)接入,提供虛擬鏈路以及默認(rèn)路由。因此,這樣一個(gè)系統(tǒng)具有以下不同于一般隧道代理系統(tǒng)的特點(diǎn)。
首先,該系統(tǒng)是在主干網(wǎng)上運(yùn)行的,這意味著系統(tǒng)的用戶很可能不是簡(jiǎn)單的最終節(jié)點(diǎn),而是不同規(guī)模的IPv6網(wǎng)絡(luò)。這要求系統(tǒng)除了能夠?qū)崿F(xiàn)RFC3053提到的分配各種大小的網(wǎng)絡(luò)前綴以外,還要能夠妥善管理可供使用的地址空間,能夠有效而經(jīng)濟(jì)地使用。因此,系統(tǒng)設(shè)計(jì)中增加了地址池(address pool)管理的功能。所實(shí)現(xiàn)的用戶接口也允許用戶選擇希望擁有的地址塊大小,考慮到IPv6地址空間聚類的要求[8],系統(tǒng)默認(rèn)允許分配/48、/64和/128三種網(wǎng)絡(luò)前綴;然而鑒于該建議并非強(qiáng)制的,所以允許不同的網(wǎng)絡(luò)提供者在管理隧道代理系統(tǒng)的時(shí)候根據(jù)自己對(duì)IPv6地址聚類的理解配置地址池允許的使用方式。
其次,該系統(tǒng)的使用環(huán)境是教育和學(xué)術(shù)網(wǎng)絡(luò),由于IPv4地址資源的緊張,在這樣的網(wǎng)絡(luò)中動(dòng)態(tài)分配IPv4地址的技術(shù),如DHCP[9]以及撥號(hào)網(wǎng)絡(luò)等,已經(jīng)廣泛使用。換言之,同一用戶的IPv4地址很可能不是永久的,而是經(jīng)常變化的。而IPv6地址空間的擴(kuò)大提供了足夠的空間,使得每個(gè)用戶有理由獲得至少一個(gè)相對(duì)恒定的IPv6地址。這意味著在CERNET的隧道代理系統(tǒng)當(dāng)中,必要將IPv6的地址同用戶的唯一標(biāo)識(shí)相關(guān)聯(lián)。而不是像一般的做法那樣,將隧道的IPv6地址同它的IPv4地址相關(guān)聯(lián)。這么做還會(huì)帶來(lái)另外一個(gè)好處,即當(dāng)用戶變換其在IPv4基礎(chǔ)網(wǎng)絡(luò)中的位置的時(shí)候,它還能夠使用同一個(gè)IPv6的地址訪問(wèn)全球的IPv6網(wǎng)絡(luò)。RFC3053提到這種要求并建議了幾種解決的辦法,并不是十分理想。本文的工作則通過(guò)分離隧道注冊(cè)和隧道激活的過(guò)程,充分利用隧道注冊(cè)數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)了這種功能。
系統(tǒng)同時(shí)遵循RFC3053的要求,為用戶分配域名,同其相對(duì)恒定的IPv6地址相綁定。作為對(duì)RFC3053的一個(gè)擴(kuò)展,系統(tǒng)同時(shí)具有對(duì)所分配的地址或地址塊提供反向名字解析的功能。
第三,該系統(tǒng)提供的服務(wù)是試驗(yàn)性質(zhì)而非商業(yè)運(yùn)營(yíng),因此用戶信息的法律問(wèn)題、隱私問(wèn)題、安全問(wèn)題都不在重視的問(wèn)題之列,也不要求用戶填寫復(fù)雜的地址使用注冊(cè)表。相反,本系統(tǒng)強(qiáng)調(diào)提供快速組建IPv6虛擬網(wǎng)絡(luò)的能力,效率即體現(xiàn)在服務(wù)端處理請(qǐng)求方面,也體現(xiàn)在用戶端的操作方面。因此,在本系統(tǒng)設(shè)計(jì)中,不要求用戶提交過(guò)于詳細(xì)的注冊(cè)信息,而是按照最少必要的要求規(guī)定用戶必要提供身份標(biāo)識(shí)、口令、請(qǐng)求的IPv6主機(jī)地址或網(wǎng)絡(luò)前綴以及它的IPv4網(wǎng)絡(luò)地址。用戶的鑒權(quán)通過(guò)標(biāo)識(shí)和口令的機(jī)制來(lái)實(shí)現(xiàn)。
系統(tǒng)采用C語(yǔ)言編寫,以獲得更高的執(zhí)行效率和良好的可移植性。系統(tǒng)遵循RFC3053的建議,為客戶端提供可以自動(dòng)運(yùn)行的腳本程序,以進(jìn)一步簡(jiǎn)化隧道建立和維護(hù)的人工干預(yù)。
3 設(shè)計(jì)和實(shí)現(xiàn)
本隧道代理系統(tǒng)采用了客戶/服務(wù)器模式。對(duì)隧道代理用戶來(lái)說(shuō),整個(gè)系統(tǒng)是一個(gè)黑盒子,它接受用戶的請(qǐng)求,執(zhí)行用戶需要的操作,然后向用戶返回執(zhí)行結(jié)果。如圖1所示。
圖1 隧道代理系統(tǒng)工作模型
3.1 基本工作單元
整個(gè)隧道代理系統(tǒng)的服務(wù)端由4部分組成,圖2顯示了圖1中黑盒子的細(xì)節(jié)。
(1) 隧道服務(wù)器
隧道服務(wù)器的功能是提供到IPv6互聯(lián)網(wǎng)的實(shí)際接入。在一個(gè)隧道代理系統(tǒng)中,隧道服務(wù)器可以有若干臺(tái),均接在IPv6互聯(lián)網(wǎng)上并且同時(shí)支持IPv6和IPv4協(xié)議,用戶與隧道代理系統(tǒng)之間的IPv6/IPv4隧道實(shí)際上是建立在用戶的路由器或者主機(jī)與隧道服務(wù)器之間。隧道服務(wù)器通過(guò)監(jiān)聽某一特定TCP端口的進(jìn)程來(lái)接受從隧道代理前端發(fā)來(lái)的指令,建立或者撤銷與用戶之間的IPv6/IPv4隧道。在隧道建立的同時(shí),隧道服務(wù)器上的IPv6路由表也會(huì)做相應(yīng)的修改,使得到用戶所獲得IPv6地址的路由指向用戶的路由器或者主機(jī);如果撤銷隧道,同時(shí)也撤銷到用戶所獲得IPv6地址的路由。同時(shí),隧道的建立和刪除均有記錄,這樣可以使得隧道代理服務(wù)器能夠在任何時(shí)候恢復(fù)與用戶之間的隧道,從而保持與整個(gè)隧道代理系統(tǒng)相一致的狀態(tài)。
(2) 隧道信息數(shù)據(jù)庫(kù)
隧道信息數(shù)據(jù)庫(kù)是保存所有重要數(shù)據(jù)的地方。保存在隧道信息數(shù)據(jù)庫(kù)中的信息包括:
· 用戶注冊(cè)信息:用戶的唯一身份標(biāo)識(shí)、用戶口令。
· 用戶狀態(tài)信息:是否已建立隧道、上一次向隧道代理系統(tǒng)發(fā)送請(qǐng)求的時(shí)間、用戶當(dāng)前使用隧道的IPv4和IPv6地址。
· 隧道代理系統(tǒng)的IPv6地址分配策略:地址池信息、允許分配給主機(jī)和網(wǎng)絡(luò)的前綴。 在實(shí)現(xiàn)上,數(shù)據(jù)庫(kù)管理系統(tǒng)選擇的是MySQL,其主要考慮是因?yàn)镸ySQL是一個(gè)運(yùn)行在Linux和FreeBSD平臺(tái)上的代碼公開的免費(fèi)數(shù)據(jù)庫(kù)系統(tǒng),同時(shí)又完整實(shí)現(xiàn)了關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)和SQL語(yǔ)言的全部標(biāo)準(zhǔn)。在具體編制C程序的時(shí)候,所有MySQL的API函數(shù)均封裝在一套自定義的數(shù)據(jù)庫(kù)操作函數(shù)中,這樣大大增強(qiáng)了系統(tǒng)的可移植性:如果以后采用其它關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),只需要重新定義這些數(shù)據(jù)庫(kù)操作函數(shù),而不需要再更改隧道代理系統(tǒng)的其它部分和數(shù)據(jù)庫(kù)操作有關(guān)的代碼。
(3) 域名服務(wù)器
域名服務(wù)器主要用來(lái)負(fù)責(zé)解析分配給每個(gè)用戶的指向其某個(gè)IPv6地址的域名。同時(shí),考慮到用戶內(nèi)部IPv6子網(wǎng)上的機(jī)器很有可能沒(méi)有IPv4地址、無(wú)法使用IPv4網(wǎng)絡(luò)中的域名服務(wù)器,此域名服務(wù)器配置為一臺(tái)同時(shí)支持IPv4和IPv6的機(jī)器,以便用戶的計(jì)算機(jī)可以通過(guò)IPv6使用此域名服務(wù)器的域名解析服務(wù)。
考慮到域名是非常有用的網(wǎng)絡(luò)資源之一,隧道代理系統(tǒng)只給每個(gè)用戶分配一個(gè)域名,而不給獲得較大IPv6地址塊的用戶分配子域,因?yàn)樽铀淼来硐到y(tǒng)完全無(wú)法控制用戶對(duì)其子域的使用。
在本隧道代理系統(tǒng)中,用于提供域名服務(wù)的軟件是BIND9。本系統(tǒng)的設(shè)計(jì)同時(shí)提供反向域名的解析和動(dòng)態(tài)更新,這能夠適應(yīng)客戶網(wǎng)絡(luò)中某些需要驗(yàn)證域名和地址一致性的場(chǎng)合。
(4) 隧道代理前端
隧道代理前端是整個(gè)隧道代理系統(tǒng)與用戶交互的部分,同時(shí)也是整個(gè)系統(tǒng)的核心控制部分。它通過(guò)HTTP協(xié)議與用戶交互,接受用戶的請(qǐng)求,控制隧道代理服務(wù)器等部分完成必要的操作,然后向用戶返回操作執(zhí)行的結(jié)果。如果用戶是通過(guò)WWW瀏覽器發(fā)送的請(qǐng)求,則返回結(jié)果為完整的HTML頁(yè)面;如果用戶是通過(guò)使用隧道代理客戶端程序發(fā)送的請(qǐng)求,則返回結(jié)果為一個(gè)特定格式的字符串。
隧道代理前端接受用戶的如下請(qǐng)求:
· 查詢隧道代理系統(tǒng)信息,包括域名服務(wù)器的IPv6地址、可分配哪幾種大小的IPv6地址塊等;
· 注冊(cè)/撤銷賬號(hào);
· 修改注冊(cè)信息(包括用戶密碼);
· 查詢用戶注冊(cè)信息;
· 建立/撤銷IPv6/IPv4隧道;
· 查詢用戶當(dāng)前狀態(tài)。
隧道代理前端的軟件主要由Apache服務(wù)器、一組CGI程序以及HTML頁(yè)面組成,通過(guò)WWW服務(wù)的方式提供客戶的訪問(wèn)。
為進(jìn)一步實(shí)現(xiàn)隧道操作的自動(dòng)化,隧道代理系統(tǒng)還提供一個(gè)客戶端程序供運(yùn)行Linux或者FreeBSD操作系統(tǒng)的用戶使用。如果用戶通過(guò)用WWW瀏覽器發(fā)送請(qǐng)求的方式建立或者撤銷隧道,雖然隧道代理系統(tǒng)能夠自動(dòng)完成服務(wù)器一方的隧道設(shè)置,用戶卻還需要手工完成自己一方的隧道設(shè)置。隧道代理客戶端程序的作用就是幫助用戶完成本地的隧道設(shè)置。如果用戶使用隧道代理客戶端來(lái)發(fā)送操作隧道的請(qǐng)求,它就可以完成所有本地隧道配置和IPv6缺省路由設(shè)置的工作。并且,用戶可以把使用隧道代理客戶端建立/撤銷隧道的命令寫到啟動(dòng)/終止腳本里去,這樣一開機(jī)就能自動(dòng)接入IPv6互聯(lián)網(wǎng)。
客戶端程序仍然是通過(guò)訪問(wèn)隧道代理系統(tǒng)的WWW服務(wù)實(shí)現(xiàn)的。
3.2 隧道代理系統(tǒng)的工作流程
圖2 隧道代理模型的構(gòu)成和工作流程
圖2同時(shí)描述了隧道代理系統(tǒng)的工作流程。用戶使用隧道代理系統(tǒng)之前必須先請(qǐng)求注冊(cè)(①),由隧道代理前端根據(jù)地址分配策略和用戶的請(qǐng)求確定用戶的IPv6地址(②),并動(dòng)態(tài)更新域名解析(③),然后再將名字和地址信息寫回?cái)?shù)據(jù)庫(kù)(④)并給予用戶以應(yīng)答(⑤)。用戶需要使用隧道時(shí),再發(fā)出請(qǐng)求給隧道代理前端(⑥),系統(tǒng)根據(jù)數(shù)據(jù)庫(kù)中提供的信息(⑦)向服務(wù)器發(fā)出隧道操作的指令(⑧)并將隧道狀態(tài)信息寫入數(shù)據(jù)庫(kù)(⑨),最后通知隧道的用戶以完成隧道的設(shè)置(⑩)。
用戶獲得的IPv6地址可自由分配,并可隨時(shí)向隧道代理系統(tǒng)發(fā)出請(qǐng)求建立IPv6/IPv4隧道以接入全球范圍的IPv6互聯(lián)網(wǎng)、或者拆除IPv6/IPv4隧道以脫離IPv6互聯(lián)網(wǎng)。當(dāng)不再需要使用隧道代理系統(tǒng)的時(shí)候,用戶可以注銷自己的賬號(hào)以歸還從隧道代理系統(tǒng)獲得的IPv6地址。
4 結(jié)束語(yǔ)
綜上所述,CERNET IPv6隧道代理系統(tǒng)的設(shè)計(jì)即遵循了RFC3053所提出的關(guān)于隧道代理的基本概念和基本結(jié)構(gòu),也為適應(yīng)CERNET IPv6試驗(yàn)床的需要進(jìn)行了必要的改進(jìn)。所實(shí)現(xiàn)的系統(tǒng)具有以下的特點(diǎn):(1)實(shí)現(xiàn)IPv6地址池和地址分配策略的定制,適應(yīng)于不同規(guī)模的ISP的需要;(2) 在動(dòng)態(tài)分配IPv4地址的環(huán)境中保持用戶擁有固定的IPv6地址和域名,適應(yīng)于IPv6地址時(shí)間上唯一性的要求;(3)不僅在服務(wù)器端實(shí)現(xiàn)自動(dòng)配置和管理,也盡量提供客戶端自動(dòng)配置的手段,進(jìn)一步提高操作效率;(4)采用標(biāo)準(zhǔn)的C語(yǔ)言在Linux和FreeBSD平臺(tái)上實(shí)現(xiàn),并且封裝了數(shù)據(jù)庫(kù)管理系統(tǒng)的API,整個(gè)系統(tǒng)易于移植到其它商用和非商用的UNIX類操作系統(tǒng)。
自2000年開發(fā)出第一個(gè)測(cè)試版本[7]以來(lái),隧道代理的系統(tǒng)經(jīng)過(guò)在CERNET IPv6試驗(yàn)床上使用測(cè)試后做了很大的改進(jìn),成為現(xiàn)在的版本。目前的隧道代理系統(tǒng)運(yùn)行狀況良好。用戶反饋回來(lái)的主要意見集中在對(duì)網(wǎng)絡(luò)連通性的抱怨,這是和IPv4基礎(chǔ)設(shè)施的性能常常發(fā)生變化甚至出現(xiàn)故障有關(guān)的。因此,IPv6虛擬網(wǎng)絡(luò)的構(gòu)成如何適應(yīng)IPv4基礎(chǔ)網(wǎng)絡(luò)的環(huán)境條件以及這種條件的變化就成為下一步努力的主要方向。這種努力對(duì)于任何虛擬網(wǎng)絡(luò)互連的實(shí)踐也將具有重大的意義。
摘自《電信科學(xué)》