GRE隧道是一种IP-over-IP的隧道,是通用路由封装协议,可以对某些网路层协议的数据报进行封装,使这些被封装的数据报能够在IPv4/IPv6 网络中传输。

Tunnel 是一个虚拟的点对点的连接,提供了一条通路使封装的数据报文能够在这个通路上传输,并且在一个Tunnel 的两端分别对数据报进行封装及解封装。 一个X协议的报文要想穿越IP网络在Tunnel中传输,必须要经过加封装与解封装两个过程。

要在Linux上创建GRE隧道,需要ip_gre内核模块,它是GRE通过IPv4隧道的驱动程序。


一般来说,在路由器交换机上配置GRE比较多,且配置也是比较方便的。


思科配置如下:

R1(config)#int tun 0
R1(config-if)#tun source s2/0
R1(config-if)#tunnel destination 10.10.23.3
R1(config-if)#ip add 100.100.100.1 255.255.255.252
R1(config-if)#no shut

华为配置如下:

[S9312] interface tunnel 1/0/1
[S9312-Tunnel1/0/1] tunnel-protocol gre
[S9312-Tunnel1/0/1] ip address 3.3.3.1 255.255.255.252
[S9312-Tunnel1/0/1] source 1.1.1.1

[S9312-Tunnel1/0/1] destination 2.2.2.2

当配置完成后,查看tunnel接口的状态,并且手动测试直连地址是否相通。建立完成后,可以配置路由使用该链路。


Linux部分配置详见附件。


以下是linux下查看gre隧道的方式:

1.ifconfig

[root@Seoul2 ~]# ifconfig gre1

gre1      Link encap:UNSPEC  HWaddr DA-B9-F5-04-6E-6F-92-D2-00-00-00-00-00-00-00-00  

          inet addr:10.254.10.2  P-t-P:10.254.10.1  Mask:255.255.255.255

          UP POINTOPOINT RUNNING NOARP  MTU:1476  Metric:1

          RX packets:9857 errors:0 dropped:0 overruns:0 frame:0

          TX packets:20133 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:540500 (527.8 KiB)  TX bytes:16258447 (15.5 MiB)

2.ip link show

[root@Seoul2 ~]# ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:15:5d:f5:02:01 brd ff:ff:ff:ff:ff:ff

3: gre0: <NOARP> mtu 1476 qdisc noop state DOWN 

    link/gre 0.0.0.0 brd 0.0.0.0

4: gre1: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN 

    link/gre 218.185.245.4 peer 101.227.67.160

5: gre2: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN 

    link/gre 218.185.245.4 peer 43.240.245.254


值得注意的是,建立gre隧道后,链路的mtu值变化会导致数据传输的问题。这点在做scp时很明显。