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的复杂设计净是商业公司为了推本身的接口或者设备而使出的伎俩,不外也说不准,留给历史评述吧。