openvpn基於openssl來實現安全,但是卻不是傳統意義上的sslvpn,它只是一個普通的vpn,工作在ip層而不是傳輸層。vpn的含義著重點有兩層意思,一個是v,也就是虛擬,另一個是p,也就是專用。虛擬就是說不用物理布線,僅僅在邏輯上實現一個網路,虛擬網路之所以能實現並建立起來,靠的是分層模型的優勢,分層模型直接將網路按照邏輯意義縱向分成了7個層次(或者tcp/ip的5個層次),每一層都僅僅承載資料而不管資料的格式和內容,上下層次間僅僅通過介面和服務來通訊,理論上任何層次的資料都可以被承載在其它的任何層次或者它當前的層次上,於是就出現了很多XX over YY的網路模型,比較典型的比如ppp over ethernet等,over模型按照資料層次可以分為三類,第一類是上層資料承載於下層,這實際上就是我們使用的普通的tcp/ip模型,第二類是同層承載,比如上面說的pppoe,這一類構建方式主要是為了在一個以傳輸佔主導的層次上增加一個非傳輸意義的邏輯或者說實現一個隧道,比如pppoe中,ethernet主要用於區域網路傳輸,而且性價比十分合理,但是卻缺乏認證機制,但是ppp協議的認證功能雖然很好,但是卻缺乏多點通訊和定址能力,作為傳輸協議意義不大,於是就使用ethernet進行傳輸,使用ppp進行認證,另外一個同層承載的例子是IPSec的隧道模式,它將一個ip資料報封裝於另一個ip資料報中,這樣實際上也就實現了一般意義上的“虛擬區域網路絡”(注意不是vlan),因為在資料報到達最終目的地之前,參與路由的始終是外層的ip頭,內層的ip頭連同真實資料都被外層ip當成了data,因此不參與路由,所以從隧道的出發路由器到結束路由器,不管中間經過的是區域網路,廣域網路還是別的什麼,內層的ip資料報一直“以為”自己在出發路由器的那個區域網路內,因此就實現了一個虛擬網路,實現了vpn中的v,那麼p呢,IPSec將v和p做到了一起,也就是說在實現ip over ip的過程中實現了安全,這就是熟知的ah協議和esp協議,實現了安全才能保證專用,否則別人都可以進入你的虛擬網路了,作為vpn來說,IPsec就到此為止,但是IPSec的用處不光如此,IPSec主要是保證ip資料報的安全(因為ip層不提供任何安全保護,ipv6就不一樣了,完全不需要IPSec),vpn只是它的隧道模式的一個應用,除了隧道模式,IPSec還有傳輸模式,不建立隧道,只是將認證或者加密的功能置於ip資料報中,當然也就是不需要ip over ip了。眾所周知IPSec的隧道模式實現的vpn有一個缺陷,那就是很難穿越nat,因為nat要修改ip頭,一旦ip頭被修改了,那麼最終的ah或者esp的認證加密的校正結果就會出錯,因此就不能隨意在nat的網路環境中使用IPSec實現的vpn,當然不涉及ip頭認證的IPSec協議還是可以用的。難道vpn就IPSec這一根稻草了嗎?認證和加密的邏輯十分複雜和多樣,不適合在ip層做,ip層做好快速路由和串連不同子網就夠了,如果將分層模型的每個層次僅僅當作一種交通工具來看待的話,問題就容易解決了,交通工具或者叫運輸工具可以相互運輸,大卡車可以運小卡車,也可以拆了被小卡車運,大卡車還可以運輸別的大卡車,它們都可以被放入集裝箱被輪船運輸,分層模型就是這樣的,我們可以讓應用程式層或者展示層或者傳輸層來承載ip資料報,這也就是over模型的第三類,即上層承載下層,很多時候越往上層邏輯越複雜,實現越靈活,如果想要在低層次實現高度複雜的邏輯,不妨試試這種模型,這個意義上看,IPSec實現的vpn最後肯定不如ip over ssl好,因為擴充IPSec很難,畢竟它在協議棧中的位置不適合做大幅修改,但是ssl的擴充性卻很好,它本身就在協議棧的頂端,即使影響也就影響應用程式層,比如迫使http轉換到https。如果說低層就不該有複雜多樣且多變的邏輯這種設計思想是對的,那麼IPsec就不該出現,IPv6除了擴充地址空間外,新增的功能淨加重了ip層的負擔,IPv6的複雜設計淨是商業公司為了推自己的介面或者裝置而使出的伎倆,不過也說不準,留給曆史評述吧。
vpn不一定要實現隧道,只要能互相訪問並且保證互訪者獨佔性的網路理論上都是vpn,然而隧道的方式更具有代表性,各種實現也更豐富和花哨。