三、为实现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 保留。