1. linux下vpn简介
一般而言,
linux
下
VPN
按照实现的协议栈可以分为应用层和网络层的
VPN
,应用层的
vpn
实现常见的比如有
SSL vpn
,著名得的开源实现有
openvpn
,而网络层的常见的为
IPSec VPN
。
SSL VPN
文本将不作介绍,网络上关于
openvpn
资料也比较多,大家可以自行研究。
其实
linux2.6
内核实现了至少三种
VPN
,这三种
VPN
分别是
IPIP
协议,
IPGRE
协议和
IPSec
协议,在内核源代码中的文件分别是
ipip.c
,
ip_gre.c
和
xfrm
开头的文件当中。但如果加上著名的开源
IPSec VPN openswan
,就有四种了。这四种从实现原理上看可分为两种,一种是采用虚拟网卡建立隧道的方式,可以通过插入相应内核模块来运行,
linux2.6
内核的
IPIP
协议,
IPGRE
协议和
openswan
的
IPSec
协议,另一类是直接实现在内核里面,即内核实现的
IPSec VPN
。因此,前面的三种实现是非常相似的。
对于
Linux2.6
内核中自带了
IPSec
的实现(注明:
linux2.4
内核可以通过打补丁的方式来支持),本文将不作任何分析,因为已经有前辈做了很好的分析,参见
http://blog.chinaunix.net/u/12313/showart_313220.html
,可惜的是,这位大牛前辈的
blog
已经很久没有更新的。
Linux2.6
内核中自带了
IPSec
可以通过开源的工具
IPSec tool
来进行配置。
本文现在将开始循序渐进的方式分析
linux2.6.30
内核实现基于虚拟网卡的
VPN
的源码,首先从最简单的
IPIP
协议开始。