Generic Routing Encapsulation (GRE)通用路由封装协议,基于IP网络层协议封装以太网报文,可用于在IPSec VPN网络间传输多播路由信息报文,或者在PPTP协议中,承载PPP数据报文。其在数据帧中的位置如下:
? ? |-------------------|----------------|----------------------|------------------| ? ? | ?Outer IP Header ?| ? GRE Header ? | ? ?Inner IP Header ? | ? ?Payload ? ? ? | ? ? |-------------------|----------------|----------------------|------------------| GRE头部最小4个字节长度,其后为可选字段,第一个字节中的标志位决定是否存在后面的字段,最大长度为16个字节。以下为一个标准的GRE报头格式:
? ? |------------------------------------------------------------------------------| ? ? | ? ?bit0-3 ? | ? ? ?4-12 ? ? ?| 13-15 | ? ? ? ? ? ? ? ?16 - 31 ? ? ? ? ? ? ? ?| ? ? |-------------|----------------|-------|---------------------------------------| ? ? | C | | K | S | ? ?Reserved0 ? | ?Ver ?| ? ? ? ? ? ?Protocol Type ? ? ? ? ? ? ?| ? ? |--------------------------------------|---------------------------------------| ? ? | ? ? ? ? ? Checksum(optional) ? ? ? ? | ? ? ? ? Reserved1(optional) ? ? ? ? ? | ? ? ? ?? ? ? |------------------------------------------------------------------------------| ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Key(optional) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? |------------------------------------------------------------------------------| ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? Sequence Number (optional) ? ? ? ? ? ? ? ? ? ? ? ? | ? ? |------------------------------------------------------------------------------| C, K, and S ? ? ?: 分别对应Checksum、Key和Sequence Number字段,置1表示存在相应的字段,否则无此字段。 Ver ? ? ? ? ? ? ? ? ? : GRE版本号(为0),对于PPTP GRE,此字段为1。 Protocol Type ?: 封装的以太网协议类型(例如IPv4,此处为0x0800) Checksum ? ? ? : 如果C位为1,此字段包含由GRE头部开始的所有数据的校验和 Key ? ? ? ? ? ? ? ? ?: 如果K位为1,此字段包含秘钥信息 Sequence Number: 如果S位为1,此字段包含GRE数据包的序号
Linux配置命令
需要两台设备(Ubuntu操作系统)进行配置和测试。一台设备A的IP地址为192.168.1.113,另外一台设备B的IP地址为192.168.1.123。首先在设备A上配置GRE隧道,如下命令:
$ sudo ip tunnel add gre01 mode gre remote 192.168.1.123 local 192.168.1.113 ttl 255 $ sudo ip link set gre01 up $ sudo ip addr add 10.1.1.1/24 dev gre01 ?
|