第 26 章 配置基于策略的路由以定义其他路由
默认情况下,RHEL 中的内核决定使用路由表根据目标地址转发网络数据包。基于策略的路由允许您配置复杂的路由场景。例如,您可以根据各种条件来路由数据包,如源地址、数据包元数据或协议。
26.1. 使用 nmcli 将流量从特定子网路由到不同的默认网关 复制链接链接已复制到粘贴板!
您可以使用基于策略的路由为来自特定子网的流量配置不同的默认网关。例如,您可以将 RHEL 配置为默认路由,使用默认路由将所有流量路由到互联网提供商 A 。但是,从内部工作站子网接收的流量路由到供应商 B。
该流程假设以下网络拓扑:
先决条件
-
系统使用
NetworkManager来配置网络,这是默认设置。 要在流程中设置的 RHEL 路由器有四个网络接口:
-
enp7s0接口已连接到提供商 A 的网络。提供商网络中的网关 IP 为198.51.100.2,网络使用/30网络掩码。 -
enp1s0接口已连接到提供商 B 的网络。提供商网络中的网关 IP 为192.0.2.2,网络使用/30网络掩码。 -
enp8s0接口已与连有内部工作站的10.0.0.0/24子网相连。 -
enp9s0接口已与连有公司服务器的203.0.113.0/24子网相连。
-
-
内部工作站子网中的主机使用
10.0.0.1作为默认网关。在此流程中,您可以将这个 IP 地址分配给路由器的enp8s0网络接口。 -
服务器子网中的主机使用
203.0.113.1作为默认网关。在此流程中,您可以将这个 IP 地址分配给路由器的enp9s0网络接口。 -
firewalld服务已启用,并处于活动状态。
流程
将网络接口配置为供应商 A:
nmcli connection add type ethernet con-name Provider-A ifname enp7s0 ipv4.method manual ipv4.addresses 198.51.100.1/30 ipv4.gateway 198.51.100.2 ipv4.dns 198.51.100.200 connection.zone external
# nmcli connection add type ethernet con-name Provider-A ifname enp7s0 ipv4.method manual ipv4.addresses 198.51.100.1/30 ipv4.gateway 198.51.100.2 ipv4.dns 198.51.100.200 connection.zone externalCopy to Clipboard Copied! Toggle word wrap Toggle overflow nmcli connection add命令创建 NetworkManager 连接配置文件。该命令使用以下选项:-
type ethernet:定义连接类型是 Ethernet。 -
con-name <connection_name> : 设置配置集的名称。使用有意义的名称以避免混淆。 -
ifname <network_device> : 设置网络接口。 -
ipv4.method manual:允许配置静态 IP 地址。 -
ipv4.addresses <IP_address>/<subnet_mask>: 设置 IPv4 地址和子网掩码。 -
ipv4.gateway <IP_address>:设置默认网关地址。 -
ipv4.dns <IP_of_DNS_server>: 设置 DNS 服务器的 IPv4 地址。 -
connection.zone <firewalld_zone>:将网络接口分配到定义的firewalld区域。请注意,firewalld会为分配给external区域的接口自动启用伪装。
-
将网络接口配置为供应商 B:
nmcli connection add type ethernet con-name Provider-B ifname enp1s0 ipv4.method manual ipv4.addresses 192.0.2.1/30 ipv4.routes "0.0.0.0/0 192.0.2.2 table=5000" connection.zone external
# nmcli connection add type ethernet con-name Provider-B ifname enp1s0 ipv4.method manual ipv4.addresses 192.0.2.1/30 ipv4.routes "0.0.0.0/0 192.0.2.2 table=5000" connection.zone externalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令使用
ipv4.routes参数而不是ipv4.gateway来设置默认网关。这需要将这个连接的默认网关分配给不同于默认的路由表(5000)。当连接被激活时,NetworkManager 会自动创建这个新的路由表。将网络接口配置为内部工作站子网:
nmcli connection add type ethernet con-name Internal-Workstations ifname enp8s0 ipv4.method manual ipv4.addresses 10.0.0.1/24 ipv4.routes "10.0.0.0/24 table=5000" ipv4.routing-rules "priority 5 from 10.0.0.0/24 table 5000" connection.zone trusted
# nmcli connection add type ethernet con-name Internal-Workstations ifname enp8s0 ipv4.method manual ipv4.addresses 10.0.0.1/24 ipv4.routes "10.0.0.0/24 table=5000" ipv4.routing-rules "priority 5 from 10.0.0.0/24 table 5000" connection.zone trustedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令使用
ipv4.routes参数将静态路由添加到 ID 为5000的路由表中。10.0.0.0/24子网的这个静态路由使用到供应商 B 的本地网络接口的 IP 地址(192.0.2.1)来作为下一跳。另外,命令使用
ipv4.routing-rules参数来添加优先级为5的路由规则,该规则将来自10.0.0.0/24子网的流量路由到表5000。低的值具有更高的优先级。请注意,
ipv4.routing-rules参数的语法与ip rule add命令中的语法相同,但ipv4.routing-rules总是需要指定优先级。将网络接口配置为服务器子网:
nmcli connection add type ethernet con-name Servers ifname enp9s0 ipv4.method manual ipv4.addresses 203.0.113.1/24 connection.zone trusted
# nmcli connection add type ethernet con-name Servers ifname enp9s0 ipv4.method manual ipv4.addresses 203.0.113.1/24 connection.zone trustedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在内部工作站子网的 RHEL 主机上:
安装
traceroute软件包:yum install traceroute
# yum install tracerouteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
traceroute工具显示到互联网上主机的路由:traceroute redhat.com
# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 10.0.0.1 (10.0.0.1) 0.337 ms 0.260 ms 0.223 ms 2 192.0.2.2 (192.0.2.2) 0.884 ms 1.066 ms 1.248 ms ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令的输出显示路由器通过
192.0.2.1,即提供商 B 的网络来发送数据包。
在服务器子网的 RHEL 主机上:
安装
traceroute软件包:yum install traceroute
# yum install tracerouteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
traceroute工具显示到互联网上主机的路由:traceroute redhat.com
# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 203.0.113.1 (203.0.113.1) 2.179 ms 2.073 ms 1.944 ms 2 198.51.100.2 (198.51.100.2) 1.868 ms 1.798 ms 1.549 ms ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令的输出显示路由器通过
198.51.100.2,即供应商 A 的网络来发送数据包。
故障排除步骤
在 RHEL 路由器中:
显示规则列表:
ip rule list
# ip rule list 0: from all lookup local 5: from 10.0.0.0/24 lookup 5000 32766: from all lookup main 32767: from all lookup defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,RHEL 包含表
local、main和default的规则。显示表
5000中的路由:ip route list table 5000
# ip route list table 5000 0.0.0.0/0 via 192.0.2.2 dev enp1s0 proto static metric 100 10.0.0.0/24 dev enp8s0 proto static scope link src 192.0.2.1 metric 102Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示接口和防火墙区:
firewall-cmd --get-active-zones
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
external区是否启用了伪装:Copy to Clipboard Copied! Toggle word wrap Toggle overflow