Red Hat Training
A Red Hat training course is available for RHEL 8
21.4. 使用旧网络脚本将特定子网的流量路由到不同的默认网关
您可以使用基于策略的路由为来自特定子网的流量配置不同的默认网关。例如,您可以将 RHEL 配置为默认路由将所有流量路由到互联网供应商 A 的路由器。但是,从内部工作站子网接收的流量路由到供应商 B。
使用 network-scripts
软件包提供的旧网络脚本来配置网络已在 RHEL 8 中被弃用。只有在主机上使用旧的网络脚本而不是 NetworkManager 时,才按照以下步骤操作。如果您使用 NetworkManager 来管理您的网络设置,请参阅 使用NetworkManager 将特定子网的流量路由到不同的默认网关。
该流程假设以下网络拓扑:
旧的网络脚本会按照字母顺序处理配置文件。因此,您必须为配置文件命名,确保当依赖接口需要时,用于其他接口的规则和路由的接口会被启动。要实现正确的顺序,这个流程使用 ifcfg-*
、route-*
和 rules-*
文件中的数字。
前提条件
-
NetworkManager
软件包未安装,或者NetworkManager
服务被禁用。 -
network-scripts
软件包已安装。 要在流程中设置的 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
服务已启用,并处于活动状态。
流程
通过创建包含以下内容的
/etc/sysconfig/network-scripts/ifcfg-1_Provider-A
文件将网络接口的配置添加给提供商 A:TYPE=Ethernet IPADDR=198.51.100.1 PREFIX=30 GATEWAY=198.51.100.2 DNS1=198.51.100.200 DEFROUTE=yes NAME=1_Provider-A DEVICE=enp7s0 ONBOOT=yes ZONE=external
配置文件使用以下参数:
-
TYPE
=Ethernet
:定义连接类型为以太网。 -
IPADDR
=IP_address
:设置 IPv4 地址。 -
PREFIX
=subnet_mask
:设置子网掩码。 -
GATEWAY
=IP_address
:设置默认网关地址。 -
DNS1
=IP_of_DNS_server
:设置 DNS 服务器的 IPv4 地址。 -
DEFROUTE
=yes|no
:定义连接是否为默认路由。 -
NAME
=connection_name
:设置连接配置文件的名称。使用有意义的名称以避免混淆。 -
DEVICE
=network_device
:设置网络接口。 -
ONBOOT
=yes
:定义 RHEL 在系统引导时启动此连接。 -
ZONE
=firewalld_zone
:将网络接口分配给定义的firewalld
区域。请注意,firewalld
会为分配给external
区域的接口自动启用伪装。
-
为供应商 B 添加网络接口配置:
使用以下内容创建
/etc/sysconfig/network-scripts/ifcfg-2_Provider-B
文件:TYPE=Ethernet IPADDR=192.0.2.1 PREFIX=30 DEFROUTE=no NAME=2_Provider-B DEVICE=enp1s0 ONBOOT=yes ZONE=external
请注意,这个接口的配置文件不包含默认的网关设置。
将
2_Provider-B
连接的网关分配给单独的路由表。因此,使用以下内容创建/etc/sysconfig/network-scripts/route-2_Provider-B
文件:0.0.0.0/0 via 192.0.2.2 table 5000
此条目将通过这个网关路由的所有子网的网关和流量分配给表
5000
。
为内部工作站子网创建网络接口配置:
使用以下内容创建
/etc/sysconfig/network-scripts/ifcfg-3_Internal-Workstations
文件:TYPE=Ethernet IPADDR=10.0.0.1 PREFIX=24 DEFROUTE=no NAME=3_Internal-Workstations DEVICE=enp8s0 ONBOOT=yes ZONE=internal
为内部工作站子网添加路由规则配置。因此,使用以下内容创建
/etc/sysconfig/network-scripts/rule-3_Internal-Workstations
文件:pri 5 from 10.0.0.0/24 table 5000
此配置定义了优先级为
5
的路由规则,该规则将来自10.0.0.0/24
子网的所有流量路由到表5000
。低的值具有更高的优先级。使用以下内容创建
/etc/sysconfig/network-scripts/route-3_Internal-Workstations
文件,以将静态路由添加到 ID 为5000
的路由表:10.0.0.0/24 via 192.0.2.1 table 5000
此静态路由定义 RHEL 将从
10.0.0.0/24
子网到本地网络接口的 IP 的流量发送给提供商 B (192.0.2.1
)。这个接口是到路由表5000
,并用作下一跳。
通过创建包含以下内容的
/etc/sysconfig/network-scripts/ifcfg-4_Servers
文件来将网络接口的配置添加到服务器子网中:TYPE=Ethernet IPADDR=203.0.113.1 PREFIX=24 DEFROUTE=no NAME=4_Servers DEVICE=enp9s0 ONBOOT=yes ZONE=internal
重启网络:
# systemctl restart network
验证步骤
在内部工作站子网的 RHEL 主机上:
安装
traceroute
软件包:# yum install traceroute
使用
traceroute
工具显示到互联网上主机的路由:# 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.1 (192.0.2.1) 0.884 ms 1.066 ms 1.248 ms ...
命令的输出显示路由器通过
192.0.2.1
,即提供商 B 的网络来发送数据包。
在服务器子网的 RHEL 主机上:
安装
traceroute
软件包:# yum install traceroute
使用
traceroute
工具显示到互联网上主机的路由:# 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 ...
命令的输出显示路由器通过
198.51.100.2
,即供应商 A 的网络来发送数据包。
故障排除步骤
在 RHEL 路由器中:
显示规则列表:
# 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 default
默认情况下,RHEL 包含表
local
、main
和default
的规则。显示表
5000
中的路由:# ip route list table 5000 default via 192.0.2.2 dev enp1s0 10.0.0.0/24 via 192.0.2.1 dev enp1s0
显示接口和防火墙区:
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 internal interfaces: enp8s0 enp9s0
验证
external
区是否启用了伪装:# firewall-cmd --info-zone=external external (active) target: default icmp-block-inversion: no interfaces: enp1s0 enp7s0 sources: services: ssh ports: protocols: masquerade: yes ...
其他资源
- 使用旧网络脚本时,涉及基于策略的路由的配置文件概述
-
ip-route(8)
手册页 -
ip-rule(8)
手册页 -
/usr/share/doc/network-scripts/sysconfig.txt
file