簡介 OpenVPN 是一個基於 OpenSSL 庫的套用層 VPN 實現。和傳統 VPN 相比,它的優點是簡單易用。
OpenVPN允許參與建立VPN的單點使用共享金鑰,電子證書,或者用戶名/密碼來進行身份驗證。它大量使用了OpenSSL加密庫中的SSLv3/TLSv1 協定函式庫。OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X與Windows 2000/XP/Vista上運行,並包含了許多安全性的功能。它並不是一個基於Web的VPN軟體,也不與IPsec及其他VPN軟體包兼容。
OpenVPN2.0後引入了用戶名/口令組合的身份驗證方式,它可以省略客戶端證書,但是仍有一份伺服器證書需要被用作加密。 OpenVPN所有的通信都基於一個單一的IP連線埠, 默認且推薦使用UDP協定通訊,同時TCP也被支持。OpenVPN連線能通過大多數的代理伺服器,並且能夠在NAT的環境中很好地工作。服務端具有向客 戶端“推送”某些網路配置信息的功能,這些信息包括:IP位址、路由設定等。OpenVPN提供了兩種虛擬網路接口:通用Tun/Tap驅動,通過它們, 可以建立三層IP隧道,或者虛擬二層乙太網,後者可以傳送任何類型的二層乙太網絡數據。傳送的數據可通過LZO算法壓縮。在選擇協定時候,需要注意2個加密隧道之間的網路狀況,如有高延遲或者丟包較多的情況下,請選擇TCP協定作為底層協定,UDP協定由於存在無連線和重傳機制,導致要隧道上層的協定進行重傳,效率非常低下。
解析 該
軟體 最早由James Yonan編寫。OpenVPN允許參與建立VPN的單點使用預設的
私鑰 ,第三方證書,或者用戶名/密碼來進行
身份驗證 。它大量使用了OpenSSL加密庫,以及SSLv3/TLSv1協定。
原理 OpenVpn的技術核心是
虛擬網卡 ,其次是
SSL協定 實現,由於SSL協定在其它的詞條中介紹的比較清楚了,這裡重點對虛擬網卡及其在OpenVpn的中的工作機理進行介紹:
虛擬網卡 是使用網路底層
編程技術 實現的一個驅動
軟體 ,安裝後在
主機 上多出現一個網卡,可以像其它網卡一樣進行配置。服務程式可以在
套用層 打開
虛擬網卡 ,如果
套用軟體 (如IE)向虛擬網卡傳送數據,則服務程式可以讀取到該數據,如果服務程式寫合適的數據到虛擬網卡,套用軟體也可以接收得到。
虛擬網卡 在很多的作業系統下都有相應的實現,這也是OpenVpn能夠跨平台一個很重要的理由。
在OpenVpn中,如果用戶訪問一個遠程的
虛擬地址 (屬於
虛擬網卡 配用的地址系列,區別於真實地址),則作業系統會通過路由機制將
數據包 (TUN模式)或
數據幀 (TAP模式)傳送到虛擬網卡上,服務程式接收該數據並進行相應的處理後,通過SOCKET從外網上傳送出去,
遠程服務 程式通過SOCKET從外網上接收數據,並進行相應的處理後,傳送給虛擬網卡,則
套用軟體 可以接收到,完成了一個單向傳輸的過程,反之亦然。
加密 OpenVPN使用
OpenSSL 庫加密數據與控制信息:它使用了OpenSSL的加密以及驗證功能,意味著,它能夠使用任何OpenSSL支持的算法。它提供了可選的
數據包 HMAC功能以提高連線的安全性。此外,OpenSSL的硬體加速也能提高它的性能。
驗證 OpenVPN提供了多種
身份驗證 方式,用以確認參與連線雙方的身份,包括:預享
私鑰 ,第三方證書以及用戶名/密碼組合。預享
密鑰 最為簡單,但同時它只能用於建立
點對點 的VPN;基於
PKI 的第三方證書提供了最完善的功能,但是需要額外的精力去維護一個PKI證書體系。OpenVPN2.0後引入了用戶名/口令組合的
身份驗證 方式,它可以省略
客戶端 證書,但是仍有一份伺服器證書需要被用作加密。
VPN在vlan中的套用 網路 OpenVPN所有的
通信 都基於一個單一的IP連線埠,默認且推薦使用UDP協定通訊,同時
TCP 也被支持。OpenVPN連線能通過大多數的
代理伺服器 ,並且能夠在
NAT 的環境中很好地工作。
服務端 具有向
客戶端 “推送”某些網路配置信息的功能,這些信息包括:IP位址、
路由 設定等。OpenVPN提供了兩種虛擬網路接口:通用
Tun/Tap 驅動,通過它們,可以建立三層IP隧道,或者虛擬二層乙太網,後者可以傳送任何類型的二層乙太網絡數據。傳送的數據可通過
LZO 算法壓縮。
IANA (Internet Assigned Numbers Authority)指定給OpenVPN的官方連線埠為1194。OpenVPN 2.0以後版本每個
進程 可以同時管理數個並發的隧道。
OpenSSH logo OpenVPN使用通用網路協定(
TCP 與
UDP )的特點使它成為
IPsec 等協定的理想替代,尤其是在ISP(Internet service provider)過濾某些特定VPN協定的情況下。
在選擇協定時候,需要注意2個加密隧道之間的網路狀況,如有高延遲或者
丟包 較多的情況下,請選擇TCP協定作為底層協定,UDP協定由於存在無連線和
重傳機制 ,導致要隧道上層的協定進行重傳,效率非常低下。
安全 OpenVPN與生俱來便具備了許多安全特性:它在
用戶空間 運行,無須對
核心 及網路協定棧作修改;初始完畢後以chroot方式運行,放棄
root許可權 ;使用mlockall以防止敏感數據交換到磁碟。
OpenVPN通過PKCS#11支持
硬體加密 標識,如智慧卡。
對比 OpenSSH,能實現二/三層的基於隧道的VPN。stunnel,使用SSL向任何單一連線埠的TCP服務提供安全保護。