1. 程式人生 > >OpenVPN簡介及架構詳解

OpenVPN簡介及架構詳解

1 簡介
    VPN(Virtual Private Network)直譯就是虛擬專用通道,是提供給企業之間或者個人與公司之間安全資料傳輸的隧道。

    OpenVPN無疑是Linux下開源VPN的先鋒,提供了良好的效能和友好的使用者GUI。該軟體最早由James Yonan編寫。OpenVPN允許參與建立VPN的單點使用預設的私鑰,第三方證書,或者使用者名稱/密碼來進行身份驗證。它大量使用了OpenSSL加密庫,以及SSLv3/TLSv1協議。OpenVPN能在Linux、xBSD、Mac OS X與Windows上執行。


2 原理
    OpenVpn的技術核心是虛擬網絡卡,其次是SSL協議實現

    虛擬網絡卡是使用網路底層程式設計技術實現的一個驅動軟體,安裝後在主機上多出現一個網絡卡,可以像其它網絡卡一樣進行配置。服務程式可以在應用層開啟虛擬網絡卡,如果應用軟體(如IE)向虛擬網絡卡傳送資料,則服務程式可以讀取到該資料,如果服務程式寫合適的資料到虛擬網絡卡,應用軟體也可以接收得到。虛擬網絡卡在很多的作業系統下都有相應的實現,這也是OpenVpn能夠跨平臺一個很重要的理由。
    在OpenVpn中,如果使用者訪問一個遠端的虛擬地址(屬於虛擬網絡卡配用的地址系列,區別於真實地址),則作業系統會通過路由機制將資料包(TUN模式)或資料幀(TAP模式)傳送到虛擬網絡卡上,服務程式接收該資料並進行相應的處理後,通過SOCKET從外網上傳送出去,遠端服務程式通過SOCKET從外網上接收資料,並進行相應的處理後,傳送給虛擬網絡卡,則應用軟體可以接收到,完成了一個單向傳輸的過程,反之亦然。

3 加密
    OpenVPN使用OpenSSL庫加密資料與控制資訊:它使用了OpenSSL的加密以及驗證功能,意味著,它能夠使用任何OpenSSL支援的演算法。它提供了可選的資料包HMAC功能以提高連線的安全性。此外,OpenSSL的硬體加速也能提高它的效能。
4 網路
    OpenVPN所有的通訊都基於一個單一的IP埠,預設使用UDP協議通訊,同時TCP也被支援。OpenVPN連線能通過大多數的代理伺服器,並且能夠在NAT的環境中很好地工作。服務端具有向客戶端“推送”某些網路配置資訊的功能,這些資訊包括:IP地址、路由設定等。OpenVPN提供了兩種虛擬網路介面:通用Tun/Tap驅動,通過它們,可以建立三層IP隧道,或者虛擬二層乙太網,後者可以傳送任何型別的二層乙太網絡資料。傳送的資料可通過LZO演算法壓縮。IANA(Internet Assigned Numbers Authority)指定給OpenVPN的官方埠為1194。OpenVPN 2.0以後版本每個程序可以同時管理數個併發的隧道。

    OpenVPN使用通用網路協議(TCP與UDP)的特點使它成為IPsec等協議的理想替代,尤其是在ISP(Internet service provider)過濾某些特定VPN協議的情況下。
在選擇協議時候,需要注意2個加密隧道之間的網路狀況,如有高延遲或者丟包較多的情況下,請選擇TCP協議作為底層協議,UDP協議由於存在無連線和重傳機制,導致要隧道上層的協議進行重傳,效率非常低下
5 身份驗證
    OpenVPN提供了多種身份驗證方式,用以確認連線雙方的身份,包括:
    預享私鑰
    第三方證書
    使用者名稱/密碼組合

    預享金鑰最為簡單,但同時它只能用於建立點對點的VPN;基於PKI的第三方證書提供了最完善的功能,但是需要額外維護一個PKI證書系統。OpenVPN2.0後引入了使用者名稱/口令組合的身份驗證方式,它可以省略客戶端證書,但是仍需要一份伺服器證書用作加密。

    OpenVPN所有的通訊都基於一個單一的IP埠,預設使用UDP協議通訊,同時也支援TCP。IANA(Internet Assigned Numbers Authority)指定給OpenVPN的官方埠為1194。OpenVPN 2.0以後版本每個程序可以同時管理數個併發的隧道。OpenVPN使用通用網路協議(TCP與UDP)的特點使它成為IPsec等協議的理想替代,尤其是在ISP(Internet service provider)過濾某些特定VPN協議的情況下。
    OpenVPN連線能通過大多數的代理伺服器,並且能夠在NAT的環境中很好地工作。
    服務端具有向客戶端“推送”某些網路配置資訊的功能,這些資訊包括:IP地址、路由設定等。
    OpenVPN提供了兩種虛擬網路介面:通用Tun/Tap驅動,通過它們,可以建立三層IP隧道,或者虛擬二層乙太網,後者可以傳送任何型別的二層乙太網絡資料。
    傳送的資料可通過LZO演算法壓縮。
7 安全
    OpenVPN與生俱來便具備了許多安全特性:它在使用者空間執行,無須對核心及網路協議棧作修改;初始完畢後以chroot方式執行,放棄root許可權;使用mlockall以防止敏感資料交換到磁碟。

    OpenVPN通過PKCS#11支援硬體加密標識,如智慧卡。

OpenVPN架構解析