vpn原理及实现--虚拟网卡构建vpn

来源:互联网 发布:h3c acl 端口 编辑:程序博客网 时间:2024/04/28 13:27

虚拟网卡通过实现一个字符设备来支持物理层,这样应用层和物理层就通过这个字符设备联系起来了,从这个字符设备读出来的就是虚拟网卡发往物理层的字节流,写入字符设备的数据作为字节流被虚拟网卡接收,虚拟网卡下面不再是网线或者无线电波,而是一个字符设备,这样从字符设备读出的还是写入字符设备的都是物理层字节流了,用它来实现隧道再简单不过了,vpn程序读取字符设备,得到封装好的原始数据,然后用ssl再封装后发往vpn的对端,和loopback的最初尝试一样,实现配置一条路由,使得要通过隧道的数据从虚拟网卡流出,最终通过虚拟网卡的字符设备导入应用层的vpn进程。
     有了虚拟网卡,vpn隧道可以如上述很简单的实现,那么还有什么额外的工作要做呢?由于虚拟网卡的物理层可以通过字符设备随意读写,那么一台机器也就被虚拟成了两台机器,vpn进程可以被设想为运行在另一台机器上,而这台机器有一个网卡连接真实的机器,该网卡就是虚拟网卡,于是问题就转化成了两台机器通信的问题,这个很好办,完全通过路由就能搞定,因此额外的工作基本没有,并且我们也避开了抓包,代理等降低性能又很难扩展的概念。虚拟网卡实现的隧道非常灵活,需要做的仅仅是安装一个虚拟网卡驱动,然后配置一下路由即可,一切尽在我们所熟悉的route命令中搞定。数据流向见下图:
-----------------------------------------------------------------


-----------------------------------------------------------------
     曾经写过一篇《关于IP网段间互访的问题—路由是根本》,现在重新又看了一遍,其实ip网络本身就是一个虚拟的网络,任何不通过导线直接相连通信的网络都是虚拟网络,难道ip网不是构建在各种局域网,广域网,电信网,电视网等物理网络之上的虚拟网络吗?按照分层的观点,pstn都可以看成是虚拟网络,vpn作为虚拟网络的意义更特殊罢了,而且实现的也各式各样,甚为巧妙。
     ip over ssl没有触动协议栈,也没有增加新的协议,利用ssl的灵活性将ip封装的更加安全了,ssl比ipsec要灵活得多,应用层的ssl本身可配置性就比较好,不仅仅可以实现ipsec中dh密钥协商,还可以使用很多pki的优秀特性。开源软件一向不会放弃任何优秀的东西,openvpn就是用上述思想完成的,实际上openvpn几乎没有做什么,就是一个整合,整合什么呢?通读代码发现就是配置虚拟网卡,配置路由,读写字符设备,用openssl的库进行ssl协议封装,几乎全部都是现有的东西,然而经过openvpn的整合就成了一个稳定又高效的vpn软件。


http://blog.csdn.net/dog250/article/details/5588617


0 0
原创粉丝点击