吳鵬程 李孝成
摘 要:隨著網(wǎng)絡(luò)技術(shù)和嵌入式系統(tǒng)的發(fā)展,嵌入式系統(tǒng)對網(wǎng)絡(luò)安全的要求也在逐步提升。對此,本文分析了一種解決網(wǎng)絡(luò)安全的網(wǎng)絡(luò)隧道方案的原理,并針對嵌入式系統(tǒng)的特性和嵌入式網(wǎng)絡(luò)環(huán)境的特性,提出了一套基于安全隧道且適合嵌入式系統(tǒng)使用的虛擬專屬網(wǎng)絡(luò)工具 KidVPN的設(shè)計(jì)。全文從其組成的三個方面對 KidVPN進(jìn)行了詳細(xì)設(shè)計(jì)介紹,并針對其使用場景等,進(jìn)行了模擬環(huán)境測試與最終的報(bào)文分析驗(yàn)證。
關(guān)鍵詞:嵌入式系統(tǒng),安全網(wǎng)絡(luò)隧道,虛擬專屬網(wǎng)絡(luò),KidVPN
中圖分類號:TP311.1? ? ? ? ? 文獻(xiàn)標(biāo)識碼:A
引言
隧道技術(shù)指的是利用一種網(wǎng)絡(luò)協(xié)議來傳輸另一種網(wǎng)絡(luò)協(xié)議的技術(shù)。他可以利用公共網(wǎng)絡(luò)來實(shí)現(xiàn)某些使用特別通信協(xié)議的網(wǎng)絡(luò)或用戶之間的連接和通信,或在不改變網(wǎng)絡(luò)標(biāo)準(zhǔn)的條件下,在公共網(wǎng)絡(luò)中建立某種固定連接。網(wǎng)絡(luò)隧道是虛擬專用網(wǎng)絡(luò) VPN技術(shù)(virtual private network)實(shí)現(xiàn)的基礎(chǔ)[1]。VPN技術(shù)是一種在公共網(wǎng)絡(luò)上 (主要是Internet網(wǎng)) 將多個私有專用網(wǎng)絡(luò)或網(wǎng)絡(luò)節(jié)點(diǎn)采用加密、身份驗(yàn)證、隧道協(xié)議等技術(shù)連接起來, 為用戶提供可通過公用網(wǎng)絡(luò)安全地對私有專用網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程訪問服務(wù)的虛擬專用網(wǎng)絡(luò)構(gòu)建技術(shù)[2]。目前許多嵌入式操作系統(tǒng)也開始對 VPN技術(shù)提供了良好的支持,本文借助基于SylixOS的一款輕量型 VPN— KidVPN來闡述安全隧道在嵌入式系統(tǒng)中的場景使用與原理分析。
1.網(wǎng)絡(luò)隧道簡介
1.1網(wǎng)絡(luò)隧道的原理
一幀網(wǎng)絡(luò)報(bào)文由兩部分組成,分別為報(bào)頭與載荷。整個網(wǎng)絡(luò)報(bào)文通信時,只有報(bào)頭起作用,而真正的報(bào)文數(shù)據(jù)存在載荷內(nèi),在傳輸過程中不會被分析和處理。如圖1所示。
如果在傳輸過程中,將一個完成的網(wǎng)絡(luò)報(bào)文封裝在另一個網(wǎng)絡(luò)報(bào)文的載荷中,作為另一個網(wǎng)絡(luò)報(bào)文的數(shù)據(jù)字段在網(wǎng)絡(luò)中進(jìn)行傳送,那個這個傳送的報(bào)文所經(jīng)過的路徑就是網(wǎng)絡(luò)隧道。如圖2所示。隧道轉(zhuǎn)變了在報(bào)文頭部中協(xié)議嚴(yán)格分層的思路,通過隧道的建立,可實(shí)現(xiàn)將數(shù)據(jù)強(qiáng)制送到特定的地址、隱藏私有的網(wǎng)絡(luò)地址、在 IP網(wǎng)絡(luò)上傳遞非 IP數(shù)據(jù)包、提供數(shù)據(jù)安全支持等功能。
1.2網(wǎng)絡(luò)隧道協(xié)議
為了在通信兩端建立隧道,通信雙方(一般角色為客戶端和服務(wù)器)需要使用相同的網(wǎng)絡(luò)協(xié)議,這類協(xié)議就成為隧道協(xié)議。這類協(xié)議主要有兩類,一類是以O(shè)SI模型中以第二層數(shù)據(jù)鏈路層為基礎(chǔ)的,還有一類是以第三層網(wǎng)絡(luò)網(wǎng)絡(luò)層為基礎(chǔ)的。
第一類是以幀作為數(shù)據(jù)交換的單位,主要有:
●PPTP(點(diǎn)對點(diǎn)隧道協(xié)議)
●L2TP(第二層隧道協(xié)議)
●L2F(第二層轉(zhuǎn)發(fā)協(xié)議)
第二類是以數(shù)據(jù)包作為數(shù)據(jù)交換的單位,主要有:
●IPsec;
●IP in IP
1.3網(wǎng)絡(luò)隧道的形成
如1.1 中原理介紹所說,形成網(wǎng)絡(luò)隧道的方法只有一種,就是報(bào)文封裝。報(bào)文封裝是借助上文提到的隧道協(xié)議將上層的數(shù)據(jù)進(jìn)行打包封裝,但此時這部分?jǐn)?shù)據(jù)此時仍然是明文的,在網(wǎng)絡(luò)傳輸中無法收到保護(hù),很不安全,不符合網(wǎng)絡(luò)隧道安全的這一特性。因此在形成隧道時,除了會用到報(bào)文封裝外,還會使用到另一種技術(shù),就是隧道加密。隧道加密與報(bào)文封裝是相關(guān)的,光有隧道加密不無法形成隧道的,只有將數(shù)據(jù)先經(jīng)過隧道加密后,再次進(jìn)行封裝傳輸,這樣才可以形成加密隧道。如圖3所示。
2.嵌入式系統(tǒng)中的網(wǎng)絡(luò)隧道
嵌入式系統(tǒng)指的是一個以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
在嵌入式系統(tǒng)中,有如下幾個特點(diǎn):
●專用性強(qiáng)
●嵌入式硬件性能較低
●嵌入式軟件操作系統(tǒng)的內(nèi)核小
●嵌入式系統(tǒng)需要較高的實(shí)時性
●嵌入式系統(tǒng)需要較高的安全性
隨著技術(shù)的發(fā)展,嵌入式系統(tǒng)的復(fù)雜程度逐漸提高,對網(wǎng)絡(luò)功能的需求也日趨上升。尤其是物聯(lián)網(wǎng)的發(fā)展與普及,網(wǎng)絡(luò)隧道技術(shù)也被應(yīng)用到各個嵌入式行業(yè)中。各種嵌入式終端設(shè)備在接入網(wǎng)絡(luò)時,常常會借助網(wǎng)絡(luò)隧道技術(shù)實(shí)現(xiàn)嵌入式設(shè)備與網(wǎng)絡(luò)設(shè)備的安全通信。在嵌入式系統(tǒng)中,網(wǎng)絡(luò)隧道通常需要滿足如下條件:
●網(wǎng)絡(luò)隧道搭建與開發(fā)容易
●網(wǎng)絡(luò)隧道使用便捷
●網(wǎng)絡(luò)隧道對資源的消耗低
●基于網(wǎng)絡(luò)隧道的通信安全
●基于網(wǎng)絡(luò)隧道的通信能滿足實(shí)時性的要求
3.嵌入式輕量型VPN(KidVPN)設(shè)計(jì)
VPN技術(shù)通過對網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行封包和加密, 在Internet網(wǎng)絡(luò)或其他公共網(wǎng)絡(luò)中建立一條虛擬的專用通道, 在公網(wǎng)上傳輸私有數(shù)據(jù), 同時, 保證私有網(wǎng)絡(luò)安全性, 將公共網(wǎng)絡(luò)的便捷性與專用, 網(wǎng)絡(luò)的安全性結(jié)合起來, 實(shí)現(xiàn)公網(wǎng)私用[3]。本文將論述一款符合上文描述的嵌入式系統(tǒng)網(wǎng)絡(luò)隧道特性的一款輕量型VPN—
KidVPN的設(shè)計(jì)。KidVPN一款開源的,體量輕,操作便捷,極其適合嵌入式系統(tǒng)下使用的虛擬專屬網(wǎng)絡(luò)工具。KidVPN支持 SylixOS和 Linux操作系統(tǒng)。同時,KidVPN也符合虛擬性,專用性的VPN特點(diǎn)[4],其組成框圖如圖4所示。
3.1KidVPN的網(wǎng)絡(luò)隧道設(shè)計(jì)
KidVPN使用的是IPIP隧道協(xié)議。IPIP隧道是一種三層隧道,通過把原來的IP包封裝在新的IP包里面,來創(chuàng)建隧道傳輸。IPIP隧道協(xié)議的實(shí)現(xiàn)原理簡單,非常符合在嵌入式系統(tǒng)中使用。如圖5所示
左側(cè)A報(bào)文是原始的正常報(bào)文,其內(nèi)部具備“IP頭部”與“IP載荷”。在經(jīng)過IPIP隧道協(xié)議后,報(bào)文變成了圖中右側(cè)B報(bào)文的結(jié)構(gòu)。其中,原始A報(bào)文的“IP頭部”變成了右側(cè)B報(bào)文中的“內(nèi)部IP頭部”,原始A報(bào)文的IP載荷沒有變化。同時,右側(cè)B報(bào)文結(jié)構(gòu)中又多出了“外部IP頭部”與“隧道頭部”?!巴獠縄P頭部”是用來將封裝好的B報(bào)文進(jìn)行網(wǎng)絡(luò)傳輸?shù)年P(guān)鍵,此時網(wǎng)絡(luò)傳輸中的尋址發(fā)送等操作都是根據(jù)“外部IP頭部”中的內(nèi)容進(jìn)行的。而“隧道頭部”則是用來告知此次傳輸?shù)腂報(bào)文是隧道報(bào)文,報(bào)文內(nèi)容需要進(jìn)行二次處理后,才能拿到真實(shí)的數(shù)據(jù),及封裝前的A報(bào)文。
3.2KidVPN的數(shù)據(jù)收發(fā)設(shè)計(jì)
KidVPN通信是基于IPIP網(wǎng)絡(luò)隧道協(xié)議實(shí)現(xiàn)的,但隧道設(shè)計(jì)只是VPN實(shí)現(xiàn)需要考慮的一部分內(nèi)容。VPN的實(shí)現(xiàn)還需要考慮的第二部分內(nèi)容是網(wǎng)絡(luò)報(bào)文的收發(fā)實(shí)現(xiàn)。
KidVPN采用的是虛擬網(wǎng)卡的方式,實(shí)現(xiàn)隧道報(bào)文收發(fā)流程。其整體流程如下:
1.首先在嵌入式系統(tǒng)中需要創(chuàng)建一個虛擬網(wǎng)卡設(shè)備,它與真實(shí)的網(wǎng)卡設(shè)備的差別就在于它沒有對應(yīng)的硬件。但從上層看到,它與真實(shí)的物理網(wǎng)卡設(shè)備沒有區(qū)別;
2.此時,如果嵌入式設(shè)備需要借助網(wǎng)絡(luò)隧道發(fā)送一幀報(bào)文時,報(bào)文在經(jīng)過協(xié)議棧操作進(jìn)行尋址后,協(xié)議棧會將此報(bào)文送到第一步創(chuàng)建出的虛擬網(wǎng)卡中,進(jìn)行報(bào)文的發(fā)送;
3.由于KidVPN接管了虛擬網(wǎng)卡的操作,因此當(dāng)虛擬網(wǎng)卡收到報(bào)文時,KidVPN就會對報(bào)文進(jìn)行隧道封裝,此時封裝后的報(bào)文就是一幀符合IPIP隧道協(xié)議的報(bào)文;
4.在KidVPN封裝好隧道報(bào)文之后,會進(jìn)行正常的 UDP通信將報(bào)文再次送到協(xié)議棧,此時,協(xié)議棧在進(jìn)行尋址等操作時,就會按照封裝后的“外部IP頭部”的內(nèi)容進(jìn)行操作,從而將封裝好的隧道報(bào)文經(jīng)過真實(shí)的物理網(wǎng)卡發(fā)送到目的端,實(shí)現(xiàn)整個網(wǎng)絡(luò)隧道報(bào)文的發(fā)送流程。
同樣的,KidVPN隧道報(bào)文的接收與發(fā)送類似,當(dāng)接收端收到隧道報(bào)文時,協(xié)議棧只會看“外部IP頭部”,然后將報(bào)文去掉“外部IP頭部”后,發(fā)現(xiàn)是一幀 UDP報(bào)文,因此會將此報(bào)文傳送到上層 UDP服務(wù),即 KidVPN中。此時,KidVPN會對這幀報(bào)文進(jìn)行解包處理,從而拿到隧道封裝前的數(shù)據(jù)報(bào),并將其發(fā)送給虛擬網(wǎng)卡設(shè)備。而虛擬網(wǎng)卡設(shè)備收到解包好后報(bào)文后,會將其作為一個正常的報(bào)文在此傳入到協(xié)議棧。這樣完成一個正常隧道報(bào)文的接收流程。
另外,為了保證數(shù)據(jù)的正確連續(xù)通信,KidVPN雙方還需要約定好相關(guān)的通信參數(shù),如MTU、保持心跳等。
因此,KidVPN使用時,通信雙方需要先創(chuàng)建一個虛擬網(wǎng)卡設(shè)備,用來進(jìn)行隧道報(bào)文的收發(fā)流程。接著雙方需要建立連接,協(xié)商好通信的參數(shù),最后上層應(yīng)用即可借助 KidVPN進(jìn)行正常的網(wǎng)絡(luò)隧道通信。
3.3KidVPN的通信安全設(shè)計(jì)
KidVPN主要從兩方面來保證數(shù)據(jù)通信的安全性。
1.KidVPN使用加密隧道保證數(shù)據(jù)安全
3.2 中描述了 KidVPN網(wǎng)絡(luò)隧道通信的實(shí)現(xiàn),但此時的報(bào)文仍然是明文報(bào)文,如果進(jìn)行抓包分析處理,仍然可以看到真實(shí)的報(bào)文內(nèi)容。因此KidVPN使用了 AES高級加密標(biāo)準(zhǔn)加密算法對隧道報(bào)文進(jìn)行了加解密。在網(wǎng)絡(luò)隧道通信時,只有“外部IP頭部”是明文的,而涉及到的真實(shí)報(bào)文數(shù)據(jù),均是加密后的內(nèi)容,因此可以很大程度的保證數(shù)據(jù)安全。
2.KidVPN使用雙重驗(yàn)證保證設(shè)備安全
在使用 KidVPN時,客戶端與服務(wù)器需要先建立通信連接,用來確保通信報(bào)文的準(zhǔn)確性與穩(wěn)定性。在建立連接時,KidVPN要求雙方需要提供相同的 AES KEY與 密鑰。KidVPN采用這種雙重認(rèn)證的方式,來確保加入虛擬專屬網(wǎng)絡(luò)中的設(shè)備是經(jīng)過認(rèn)證安全的。
4.嵌入式輕量型VPN(KidVPN)使用場景驗(yàn)證
4.1KidVPN 模擬測試環(huán)境
由于是 VPN的使用場景一般是兩個網(wǎng)絡(luò),因此需要兩臺設(shè)備來搭建驗(yàn)證 KidVPN的模擬環(huán)境。本文使用兩臺路由器來模擬測試,一臺路由器A作為 KidVPN的服務(wù)器,另一臺路由器B作為 KidVPN的客戶端。將這兩臺路由器均接入互聯(lián)網(wǎng)中,此時,這兩臺路由器下的內(nèi)網(wǎng)設(shè)備雖能同時訪問互聯(lián)網(wǎng),但它們是不具備互通功能的[5]。拓?fù)浣Y(jié)構(gòu)如圖6所示。
4.2KidVPN驗(yàn)證與報(bào)文分析
此時,配置兩臺路由器讓其運(yùn)行 KidVPN。在配置時,如上文描述所示需要指定好相關(guān)配置參數(shù)與連接密鑰等內(nèi)容。在配置好后,使用B路由器去連接A路由器中的KidVPN服務(wù),出現(xiàn)“[KidVPN] Client add”時,則說明連接成功。此后,配置好路由器上對應(yīng)的路由策略后,兩個路由器及接入他們的子網(wǎng)設(shè)備均已經(jīng)處于同一子網(wǎng)下,此時使用B路由器下的一個主機(jī)設(shè)備,IP地址為 10.9.0.201 去pingA路由器的虛擬網(wǎng)卡地址也可直接ping通。如圖7所示。
PC端再通過 wireshare去抓取從路由器 A中發(fā)出的ping報(bào)文,抓包內(nèi)容如圖8所示。
此時,wireshark抓到的 ping報(bào)文不是一幀 ICMP報(bào)文,而是一幀 UDP報(bào)文,其中端口號是 KidVPN服務(wù)器使用的 10088 端口號,并且 UDP報(bào)文的載荷也已經(jīng)是加密后混亂的數(shù)據(jù),根本無法分析得到真正的 ping報(bào)文,從而可以保證數(shù)據(jù)的安全通信。
綜上,KidVPN經(jīng)過模擬測試環(huán)境的測試,可以實(shí)現(xiàn)其預(yù)設(shè)的功能,能夠做到快速的搭建一個虛擬專屬網(wǎng)絡(luò),同時也符合嵌入式系統(tǒng)下的安全隧道的要求。
參考文獻(xiàn):
[1] 郭鋒.高效圖書館VPN網(wǎng)絡(luò)建設(shè)研究[J].情報(bào)檢索, 2010, (2) :105~107..
[2] 周群.VPN技術(shù)應(yīng)用于圖書館研究概述[J].圖書館學(xué)刊, 2011, (3) :100~102.
[3] Sixto Ortiz Jr.Virtual Private Networks:Levera-ging the Internet[J].Computer, 1997, (30) :18~20.
[4] 蘇東出.利用RounterOs構(gòu)建高校圖書館無縫網(wǎng)絡(luò)辦公系統(tǒng)[J].現(xiàn)代圖書情報(bào)技術(shù), 2007, (11) :84~86.
[5] 魏念忠.基于VPN技術(shù)的多校區(qū)校園網(wǎng)絡(luò)安全研究[J].微電子學(xué)與計(jì)算機(jī), 2007, (10) :108~110.