在嵌入式設(shè)備上實現(xiàn)IPv6網(wǎng)絡(luò)的接入
引 言 向下一代互聯(lián)網(wǎng)過渡的進(jìn)程已經(jīng)開始。ipv6作為下一代互聯(lián)網(wǎng)的核心協(xié)議,能夠提供幾乎無限的地址空間,從根本上克服了ipv4中地址空間不足的問題,也為在不遠(yuǎn)的將來把數(shù)量眾多的嵌入式設(shè)備接入網(wǎng)絡(luò)創(chuàng)造了條件。linux的內(nèi)核從2.4版就已經(jīng)開始支持ipv6,同時,linux作為開源的操作系統(tǒng),也便于向不同的硬件平臺移植。由于現(xiàn)有的網(wǎng)絡(luò)基礎(chǔ)設(shè)施運(yùn)行的大都是ipv4協(xié)議棧,選擇隧道方式接入ipv6網(wǎng)絡(luò),是一種充分利用現(xiàn)有設(shè)備的過渡手段?;谝陨显颍疚倪x用支持ipv6的linux內(nèi)核,通過隧道方式把基于arm的嵌入式設(shè)備接入ipv6網(wǎng)絡(luò)。1 編譯支持ipv6的linux內(nèi)核 本文所用的硬件環(huán)境是xscale的sitsang開發(fā)板。要向arm核的cpu移植linux,首先要準(zhǔn)備交叉編譯環(huán)境,包括armlinuxgcc、armlinuxld、armlinuxas,以便在pc機(jī)上編譯可運(yùn)行于arm核cpu的目標(biāo)代碼。實驗選用的linux內(nèi)核源碼包是linux2.4.19.tar.bz2,另外還有一個針對sitsang 板的內(nèi)核補(bǔ)?。ò?qū)動程序)patch2.4.19sitsang2.gz。以下是編譯支持ipv6的linux內(nèi)核的過程。(1) 解開源碼包并打?qū)S醚a(bǔ)丁
#tar jvxf linux-2.4.19.tar.bz2
#ln -s linux-2.4.19 linux
#gzip -dc patch-2.4.19-sitsang2.gz patch -p0 上述第2行命令建立符號鏈接,是為了第3行命令對linux的標(biāo)準(zhǔn)內(nèi)核進(jìn)行打補(bǔ)丁的操作。(2) 配置編譯選項
現(xiàn)在得到的linux內(nèi)核版本是支持ipv6的,但是支持ipv6的模塊默認(rèn)并不是編譯入內(nèi)核的。在make menuconfig的時候,注意把network options下有關(guān)ipv6和隧道(tunnel)的模塊選為內(nèi)核模式,以便得到所需要的內(nèi)核文件。其他選項不需要更改。(3) 編譯內(nèi)核
#make dep
#make zimage
#make modules 以上命令分別表示建立內(nèi)核中各模塊的依賴關(guān)系,編譯內(nèi)核,編譯驅(qū)動模塊。編譯無誤,就在../linux/arch/arm/boot/目錄下得到了所需的linux內(nèi)核文件zimage?! ∫呀?jīng)有了支持ipv6的內(nèi)核,接下來的工作是把啟動程序和內(nèi)核文件外加一個精簡的文件系統(tǒng)燒錄到開發(fā)板上去,開發(fā)板就可以啟動了。關(guān)于如何燒錄啟動程序、內(nèi)核和文件系統(tǒng)并不是本文的主要內(nèi)容,可參看其他嵌入式系統(tǒng)開發(fā)的資料。2 重新編譯工具程序 配置和測試網(wǎng)絡(luò)環(huán)境需要ifconfig、ping、traceroute等工具程序。上面的精簡文件系統(tǒng)并沒有包括以上工具程序支持ipv6的版本,如ping6、traceroute6等,因此需要重新編譯包含這些工具程序的源碼包nettools和netutils。注意選用版本較新的源碼包,以確保其支持ipv6。將源碼包解開后,修改其makefile文件,使之使用交叉編譯工具鏈編譯和鏈接,生成所需的目標(biāo)代碼。將編譯生成的在arm核的cpu上可執(zhí)行的文件ifconfig、ping6和traceroute6拷貝到嵌入式設(shè)備文件系統(tǒng)的相應(yīng)位置,以備下面的配置和測試時使用。3 配置隧道將嵌入式設(shè)備接入ipv6網(wǎng)絡(luò) 首先到以下地址申請一段ipv6的地址:http://knight.6test.edu.cn/tb/html/。在頁面中點擊“register”,填寫用戶名、email和所需的subnet prefix length(64/128),提交之后就得到了一段ipv6地址。要開始使用這段申請到的地址,還得點擊頁面中的“activate the tunnel”鏈接加以激活。假設(shè)申請到的地址是3ffe:321f:0:775::/64,tunnel broker server的地址是202.38.99.9,下面就開始配置隧道。 由于上面申請到的地址需要激活才能使用,而對于一些沒有圖形界面的嵌入式設(shè)備通過web方式激活不方便;另外,由于與tunnel broker server直接隧道連接需要一個獨(dú)立的ipv4地址,而申請到的地址總量巨大(64位地址總量達(dá)2的64次方),為避免浪費(fèi),本文采取了用一臺pc機(jī)與tunnel broker server連接充當(dāng)ipv6網(wǎng)關(guān),而包括sitsang開發(fā)板在內(nèi)的其他設(shè)備通過網(wǎng)關(guān)接入的辦法?! 嶒炛?,作為網(wǎng)關(guān)的pc機(jī)運(yùn)行的是redhat linux 9,有兩塊網(wǎng)卡,ipv4地址分別是166.111.249.184(eth0)和192.168.1.184(eth1),sitsang開發(fā)板有一個以太網(wǎng)口,ipv4地址是192.168.2.231(eth0),默認(rèn)網(wǎng)關(guān)是192.168.2.184。ipv4的路由已設(shè)置好,即sitsang開發(fā)板已經(jīng)能ping通外部的ipv4網(wǎng)絡(luò)。(1) 建立網(wǎng)關(guān)與tunnel broker server的隧道
在網(wǎng)關(guān)pc機(jī)上執(zhí)行以下命令:
#insmod ipv6
#iptunnel add sit1 mode sit remote 202.38.99.9 local 166.111.249.184
#ifconfig sit1 up
#ifconfig sit1 inet6 add 3ffe:321f:0:775::1/128
#route ?a inet6 add 2000::/3 sit1
#echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
以上命令分別表示:
手動裝入ipv6模塊。redhat 9的2.4.20內(nèi)核默認(rèn)并沒有把ipv6模塊裝入內(nèi)核;
建立與tunnel broker server的隧道sit1;
激活sit1;
為sit1添加ipv6地址;
添加通過sit1的路由項;
設(shè)置所有網(wǎng)絡(luò)接口都可以轉(zhuǎn)發(fā)數(shù)據(jù)包。
以web方式激活后,可以用ping6測試www.ipv6.o