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
[[email protected] ~]# 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
[[email protected] ~]# 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时很明显。