配置IP隧道

类似于VPN,IP隧道通过第三个网络(例如Internet)直接连接两个网络。但是,并非所有隧道协议都支持加密。

建立隧道的两个网络中的路由器都至少需要两个接口:

  • 连接到本地网络的一个接口

  • 一个连接到建立隧道的网络的接口

要建立隧道,请使用远程子网中的IP地址在两个路由器上创建一个虚拟接口。

NetworkManager支持以下IP隧道:

  • 通用路由封装(GRE)

  • IPv6上的通用路由封装(IP6GRE)

  • 通用路由封装终端访问点(GRETAP)

  • IPv6上的通用路由封装终端访问点(IP6GRETAP)

  • IPv4 over IPv4(IPIP)

  • IPv4 over IPv6(IPIP6)

  • IPv6 over IPv6(IP6IP6)

简单的互联网过渡(SIT) 根据类型的不同,这些隧道将作用于开放系统互连(OSI)模型的第2层或第3层。

一、使用nmcli配置IPIP隧道以将IPv4流量封装在IPv4数据包中

IP over IP(IPIP)隧道在OSI层3上运行,并将IPv4流量封装在RFC 2003中描述的IPv4数据包中。

通过IPIP隧道发送的数据未加密。出于安全原因,仅将隧道用于已被其他协议(例如HTTPS)加密的数据。

请注意,IPIP隧道仅支持单播数据包。如果需要支持多播的IPv4隧道,请参阅使用nmcli配置GRE隧道以将第3层流量封装在IPv4数据包中。

下面示例在两个RHEL路由器之间创建IPIP隧道,以通过Internet连接两个内部子网,如下图所示:

IPIP tunnel

先决条件

  • 每个RHEL路由器都有一个连接到其本地子网的网络接口

  • 每个RHEL路由器都有一个连接到Internet的网络接口

  • 通过隧道发送的流量是IPv4单播

1.1 在网络A中的路由器上:

创建一个名为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

1.2 在网络B中的路由器上:

创建一个名为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

1.3 验证步骤

从每个路由器ping另一个路由器的内部接口的IP地址:

在路由器A上ping 172.16.0.1:

# ping 172.16.0.1

在路由器B上ping 192.0.2.1:

# ping 192.0.2.1

二、使用nmcli配置GRE隧道以将第3层流量封装在IPv4数据包中

通用路由封装(GRE)隧道将第3层流量封装在RFC 2784中描述的IPv4数据包中。GRE隧道可以封装具有有效以太网类型的任何第3层协议。

通过GRE隧道发送的数据未加密。 出于安全原因,仅将隧道用于已被其他协议(例如HTTPS)加密的数据。

下面示例在两个路由器之间创建GRE隧道,以通过Internet连接两个内部子网,如下图所示:

先决条件

  • 每个路由器都有一个连接到其本地子网的网络接口

  • 每个路由器都有一个连接到Internet的网络接口

2.1 在网络A中的路由器上:

1) 创建一个名为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

remote和local参数设置远程和本地路由器的公共IP地址。

2) 将ipv4地址设置为gre1设备:

# nmcli connection modify gre1 ipv4.addresses '10.0.1.1/30'

请注意,具有两个可用IP地址的/30子网足以用于隧道。

3) 配置gre1连接以使用手动IPv4配置:

# nmcli connection modify gre1 ipv4.method manual

4) 添加将路由到172.16.0.0/24网络的流量路由到路由器B上的隧道IP的静态路由:

# nmcli connection modify tun0 +ipv4.routes "172.16.0.0/24 10.0.1.2"

5) 启用gre1连接

# nmcli connection up gre1

6) 启用数据包转发:

# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf
# sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf

2.2 在网络B中的路由器上:

1) 创建一个名为gre1的GRE隧道接口:

# nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name gre1 ifname gre1 remote 203.0.113.10 local 198.51.100.5

remote和local参数设置远程和本地路由器的公共IP地址。

2) 将ipv4地址设置为gre1设备:

# nmcli connection modify gre1 ipv4.addresses '10.0.1.2/30'

请注意,具有两个可用IP地址的/ 30子网足以用于隧道。

3) 配置gre1连接以使用手动IPv4配置:

# nmcli connection modify gre1 ipv4.method manual

4) 添加将路由到192.0.2.0/24网络的流量路由到路由器B上的隧道IP的静态路由:

# nmcli connection modify tun0 +ipv4.routes "192.0.2.0/24 10.0.1.1"

5) 启用gre1连接

# nmcli connection up gre1

6) 启用数据包转发:

# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf
# sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf

2.3 验证步骤

从每个路由器ping另一个路由器的内部接口的IP地址:

在路由器A上ping 172.16.0.1:

# ping 172.16.0.1

在路由器B上ping 192.0.2.1:

# ping 192.0.2.1

三、配置GRETAP隧道以通过IPv4传输以太网帧

通用路由封装终端接入点(GRETAP)隧道在OSI级别2上运行,并将以太网流量封装在RFC 2784中描述的IPv4数据包中。

通过GRETAP隧道发送的数据未加密。 出于安全原因,请通过VPN或其他加密连接建立隧道。

此过程描述了如何在两个路由器之间创建GRETAP隧道,以使用网桥连接两个网络,如下图所示:

gretap0设备名称已保留,为设备使用gretap1或其他名称。

先决条件

  • 每个RHEL路由器都有一个连接到其本地网络的网络接口,并且该接口未分配IP配置。

  • 每个RHEL路由器都有一个连接到Internet的网络接口。

3.1 在网络A中的路由器上:

1) 创建一个名为bridge0的网桥接口:

# nmcli connection add type bridge con-name bridge0 ifname bridge0

2) 配置网桥的IP设置:

# nmcli connection modify bridge0 ipv4.addresses '192.0.2.1/24'
# nmcli connection modify bridge0 ipv4.method manual

3) 为连接到本地网络到网桥的接口添加新的连接配置文件:

# nmcli connection add type ethernet slave-type bridge con-name bridge0-port1 ifname enp1s0 master bridge0

4) 将GRETAP隧道接口的新连接配置文件添加到网桥:

# nmcli connection add type ip-tunnel ip-tunnel.mode gretap slave-type bridge con-name bridge0-port2 ifname gretap1 remote 198.51.100.5 local 203.0.113.10 master bridge0

remote和local参数设置远程和本地路由器的公共IP地址。

5) 可选:如果不需要,请禁用生成树协议(STP):

# nmcli connection modify bridge0 bridge.stp no

默认情况下,STP处于启用状态,并且会导致延迟,然后才能使用连接。

6) 配置激活bridge0连接自动激活网桥的端口:

# nmcli connection modify bridge0 connection.autoconnect-slaves 1

7) 激活bridge0连接:

# nmcli connection up bridge0

3.2 在网络B中的路由器上:

1) 创建一个名为bridge0的网桥接口:

# nmcli connection add type bridge con-name bridge0 ifname bridge0

2) 配置网桥的IP设置:

# nmcli connection modify bridge0 ipv4.addresses '192.0.2.2/24'
# nmcli connection modify bridge0 ipv4.method manual

3) 为连接到本地网络到网桥的接口添加新的连接配置文件:

# nmcli connection add type ethernet slave-type bridge con-name bridge0-port1 ifname enp1s0 master bridge0

4) 将GRETAP隧道接口的新连接配置文件添加到网桥:

# nmcli connection add type ip-tunnel ip-tunnel.mode gretap slave-type bridge con-name bridge0-port2 ifname gretap1 remote 203.0.113.10 local 198.51.100.5 master bridge0

remote和local参数设置远程和本地路由器的公共IP地址。

5) 可选:如果不需要,请禁用生成树协议(STP):

# nmcli connection modify bridge0 bridge.stp no

6) 配置激活bridge0连接自动激活网桥的端口:

# nmcli connection modify bridge0 connection.autoconnect-slaves 1

7) 激活bridge0连接:

# nmcli connection up bridge0

3.3 验证步骤

在两个路由器上,验证是否已连接enp1s0和gretap1连接,并且CONNECTION列显示端口的连接名称:

# nmcli device
nmcli device
DEVICE   TYPE      STATE      CONNECTION
...
bridge0  bridge    connected  bridge0
enp1s0   ethernet  connected  bridge0-port1
gretap1  iptunnel  connected  bridge0-port2

从每个路由器ping另一个路由器的内部接口的IP地址:

在路由器A上ping 192.0.2.2:

# ping 192.0.2.2

在路由器B上ping 192.0.2.1:

# ping 192.0.2.1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章