|
三、为实现VPN的扩展
实际上Linux只为实现隧道机制提供了一个框架,图二中的封包协议头在Linux中被忽略了,也就是说,封包头只含封包IP头,其后紧跟原IP数据包。这样的结构用于传输公开数据没有关系,但对于一个VPN来说,安全保密是不可缺少的重要功能。我们希望通过隧道的数据可靠且不可窃取和冒充的,那么,加密和认证就必不可少。为实现这一构想,设计以下封包协议头:
0 4 8 16 24 31
+-----+-----+-----------+------------------------+
| ver |type | hlen | OldPacketLen |
+-----------------------+------------------------+
| DeviceID | EncapID |
+-----------------------+------------------------+
| Flags | CheckSum |
+------------------------------------------------+
| IPIP Options( If any ) |
+------------------------------------------------+
. | padding |
. .
+------------------------------------------------+
|
图三 IPIP头设想图
ver: 版本号,利于扩展;
type: 用于建立不同目的的隧道(可能处理上有差别);
OldPacketLen: 进入隧道的原数据包长度;
DeviceID: 对数据包进行封装的设备标识;
EncapID: 此封包的ID号。
Flags: 标志位,共16位,初步定义如下:
0 保留;
1 有否加密;
2 有否做摘要;
3 有否签名;
4 保留;
5 有否传送消息密钥;
6 消息密钥有否加密;
7 消息密钥是否需保留;
8-15 保留。
CheckSum: 头校验
IPIP Options: 用来传送一些必要的数据,比如消息密钥、签名等。
格式:
+-------------------------------------+
| 类型 | 长度 | 数据 ... |
+-------------------------------------+
|
好了,有了这个东西,我们就可以扩展Linux IP Tunnel为我们的VPN服务了。首先,改写new_tunnel.c和ipip.c两个文件,加入对IPIP头的处理。
接着,我们要实现一种密钥的管理和传送机制。当然,对称密钥是必需的,而对IP数据包加密要使用序列密码。从全体考虑,我们可以提出建立VPN的逻辑步骤;
1、准备工作:建网安装系统完成配置等等;
2、隧道的两端分别向对方发送自己的公开密码和设备号;
3、如有必要,产生序列密码,后加密签名传给对方;
4、正常通信,----放心,你的数据已经很保险了。
在一个VPN的隧道中,一个封包的格式应如图四所示。
/ +-----------------+
| | 封包IP头 |
封包头 | +-----------------+
| | 封包协议头 |
+-----------------+
/ | |
| | 原协议头 |
| | 及 |
封包数据 | | 原协议数据 |
| . (密文) .
| . .
| | |
+-----------------+
|
图四 VPN封包结构
你的几种使用方法
事情往往不能两全其美,你在安全强度和通信速度上必须作出选择,(不然你就需要在安全强度和Money的耗费中做选择。)使用这样的协议,根据你的需求不同,你可有不同的使用方法,下面列举一些:
跨Internet的公司多个内部网之间进行通信,保密性并不重要直接使用原框架机制,无任何加密措施这样速度快、效率高,公司也不用申请多个IP地址,方便可行
一般性的商业应用,具有保密要求利用事先产生的序列密码,每次对原数据包加密安全度提高了,是一种十分实用的方法。只要强度足够,一般很难破译速度快
共2页: 上一页 1 [2] 下一页
|