8.2. 配置 GRE 隧道来封装 IPv4 数据包中的第 3 层流量
Generic Routing Encapsulation(GRE)隧道封装 IPv4 数据包中的第 3 层流量,如 RFC 2784 所述。GRE 隧道可以使用有效的以太网类型封装任何第 3 层协议。
通过 GRE 隧道发送的数据没有加密。出于安全考虑,只在已经加密的数据中使用隧道,比如 HTTPS。
例如,您可以在两个 RHEL 路由器之间创建一个 GRE 隧道来通过互联网连接两个内部子网,如下图所示:

先决条件
- 每个 RHEL 路由器都有一个网络接口,它连接到其本地子网。
- 每个 RHEL 路由器都有一个网络接口,它连接到互联网。
流程
在网络 A 的 RHEL 路由器上:
创建名为
gre1
的 GRE 隧道接口:nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 198.51.100.5 local 203.0.113.10
# nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 198.51.100.5 local 203.0.113.10
Copy to Clipboard Copied! remote
和local
参数设置远程和本地路由器的公共 IP 地址。重要保留
gre0
设备名称。对该设备使用gre1
或者不同的名称。将 IPv4 地址设为
gre1
设备:nmcli connection modify gre1 ipv4.addresses '10.0.1.1/30'
# nmcli connection modify gre1 ipv4.addresses '10.0.1.1/30'
Copy to Clipboard Copied! 请注意,具有两个可用 IP 地址的
/30
子网足以满足隧道的需要。将
gre1
连接配置为使用手动 IPv4 配置:nmcli connection modify gre1 ipv4.method manual
# nmcli connection modify gre1 ipv4.method manual
Copy to Clipboard Copied! 添加一个静态路由,其将到
172.16.0.0/24
网络的流量路由到路由器 B 上的隧道 IP:nmcli connection modify gre1 +ipv4.routes "172.16.0.0/24 10.0.1.2"
# nmcli connection modify gre1 +ipv4.routes "172.16.0.0/24 10.0.1.2"
Copy to Clipboard Copied! 启用
gre1
连接。nmcli connection up gre1
# nmcli connection up gre1
Copy to Clipboard Copied! 启用数据包转发:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Copy to Clipboard Copied!
在网络 B 中的 RHEL 路由器中:
创建名为
gre1
的 GRE 隧道接口:nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 203.0.113.10 local 198.51.100.5
# nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 203.0.113.10 local 198.51.100.5
Copy to Clipboard Copied! remote
和local
参数设置远程和本地路由器的公共 IP 地址。将 IPv4 地址设为
gre1
设备:nmcli connection modify gre1 ipv4.addresses '10.0.1.2/30'
# nmcli connection modify gre1 ipv4.addresses '10.0.1.2/30'
Copy to Clipboard Copied! 将
gre1
连接配置为使用手动 IPv4 配置:nmcli connection modify gre1 ipv4.method manual
# nmcli connection modify gre1 ipv4.method manual
Copy to Clipboard Copied! 添加一个静态路由,其将路由到
192.0.2.0/24
网络的流量路由到路由器 A 上的隧道 IP:nmcli connection modify gre1 +ipv4.routes "192.0.2.0/24 10.0.1.1"
# nmcli connection modify gre1 +ipv4.routes "192.0.2.0/24 10.0.1.1"
Copy to Clipboard Copied! 启用
gre1
连接。nmcli connection up gre1
# nmcli connection up gre1
Copy to Clipboard Copied! 启用数据包转发:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Copy to Clipboard Copied!
验证
从每个 RHEL 路由器中,ping 路由器的内部接口的 IP 地址:
在路由器 A 上,ping
172.16.0.1
:ping 172.16.0.1
# ping 172.16.0.1
Copy to Clipboard Copied! 在路由器 B 上,ping
192.0.2.1
:ping 192.0.2.1
# ping 192.0.2.1
Copy to Clipboard Copied!