吳鵬程 李孝成



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