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