第 9 章 配置 IP 隧道
与 VPN 类似,IP 隧道通过第三个网络(如互联网)直接连接两个网络。然而,不是所有的隧道协议都支持加密。
两个建立隧道网络的路由器至少需要两个接口:
- 一个连接到本地网络的接口
- 一个连接到建立隧道的网络的接口。
要建立隧道,您可以在两个路由器中使用来自远程子网的 IP 地址创建一个虚拟接口。
NetworkManager 支持以下 IP 隧道:
- 通用路由封装(GRE)
- IPv6 上的通用路由封装(IP6GRE)
- 通用路由封装终端接入点(GRETAP)
- 通用路由登录在 IPv6(IP6GRETAP)上
- IPv4 over IPv4(IPIP)
- IPv4 over IPv6(IPIP6)
- IPv6 over IPv6(IP6IP6)
- 简单的互联网转换(SIT)
根据类型,这些通道在 Open Systems Interconnection(OSI)的第 2 层或 3 层动作。
9.1. 配置 IPIP 隧道来在 IPv4 数据包中封装 IPv4 流量
IP over IP(IPIP)隧道在 OSI 层 3 上运行,并封装 IPv4 数据包中的 IPv4 流量,如 RFC 2003 所述。
通过 IPIP 隧道发送的数据没有加密。出于安全考虑,只在已经加密的数据中使用隧道,比如 HTTPS。
请注意,IPIP 隧道只支持单播数据包。如果您需要支持多播的 IPv4 隧道,请参阅 配置 GRE 隧道来封装 IPv4 数据包中的第 3 层流量。
例如,您可以在两个 RHEL 路由器之间创建一个 IPIP 隧道来通过互联网连接两个内部子网,如下图所示:
先决条件
- 每个 RHEL 路由器都有一个网络接口,它连接到其本地子网。
- 每个 RHEL 路由器都有一个连接到互联网的网络接口。
- 您需要通过隧道发送的流量是 IPv4 单播。
流程
在网络 A 的 RHEL 路由器上:
创建名为
tun0
的 IPIP 隧道接口:# nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name tun0 ifname tun0 remote 198.51.100.5 local 203.0.113.10
remote
和local
参数设置远程和本地路由器的公共 IP 地址。将 IPv4 地址设为
tun0
设备:# nmcli connection modify tun0 ipv4.addresses '10.0.1.1/30'
请注意,具有两个可用 IP 地址的
/30
子网足以满足隧道的需要。将
tun0
连接配置为使用手动 IPv4 配置:# nmcli connection modify tun0 ipv4.method manual
添加一个静态路由,其将到
172.16.0.0/24
网络的流量路由到路由器 B 上的隧道 IP:# nmcli connection modify tun0 +ipv4.routes "172.16.0.0/24 10.0.1.2"
启用
tun0
连接。# nmcli connection up tun0
启用数据包转发:
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
在网络 B 中的 RHEL 路由器中:
创建名为
tun0
的 IPIP 隧道接口:# nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name tun0 ifname tun0 remote 203.0.113.10 local 198.51.100.5
remote
和local
参数设置远程和本地路由器的公共 IP 地址。将 IPv4 地址设为
tun0
设备:# nmcli connection modify tun0 ipv4.addresses '10.0.1.2/30'
将
tun0
连接配置为使用手动 IPv4 配置:# nmcli connection modify tun0 ipv4.method manual
添加一个静态路由,其将路由到
192.0.2.0/24
网络的流量路由到路由器 A 上的隧道 IP:# nmcli connection modify tun0 +ipv4.routes "192.0.2.0/24 10.0.1.1"
启用
tun0
连接。# nmcli connection up tun0
启用数据包转发:
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
验证
从每个 RHEL 路由器中,ping 路由器的内部接口的 IP 地址:
在路由器 A 上,ping
172.16.0.1
:# ping 172.16.0.1
在路由器 B 上,ping
192.0.2.1
:# ping 192.0.2.1