Linux内核VPN实现源码分析

来源:互联网 发布:域名怎么解腾讯拦截 编辑:程序博客网 时间:2024/06/14 20:03

http://blog.chinaunix.net/uid-26611973-id-3474408.html


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 协议开始。



原创粉丝点击