26.2. 使用 network RHEL 系统角色,将来自特定子网的流量路由到不同的默认网关
				您可以使用基于策略的路由为来自特定子网的流量配置不同的默认网关。例如,您可以将 RHEL 配置为默认路由,使用默认路由将所有流量路由到互联网提供商 A 。但是,从内部工作站子网接收的流量被路由到供应商 B。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并对 playbook 中定义的主机并远程配置连接配置文件。
			
				您可以使用 network RHEL 系统角色配置连接配置文件,包括路由表和规则。
			
此流程假设以下网络拓扑:
				 
			
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 
						您用于连接到受管节点的帐户对它们具有 sudo权限。
- 
						受管节点使用 NetworkManager 和 firewalld服务。
- 您要配置的受管节点有 4 个网络接口: - 
								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网络接口。
流程
- 创建一个包含以下内容的 playbook 文件,如 - ~/playbook.yml:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 示例 playbook 中指定的设置包括如下: - table: <value>
- 
									将来自相同列表条目中的路由作为 table变量分配给指定的路由表。
- routing_rule: <list>
- 定义指定路由规则的优先级,以及从连接配置文件到分配了规则的路由表的优先级。
- zone: <zone_name>
- 
									将网络接口从一个连接配置文件分配给指定的 firewalld区域。
 - 有关 playbook 中使用的所有变量的详情,请查看控制节点上的 - /usr/share/ansible/roles/rhel-system-roles.network/README.md文件。
- 验证 playbook 语法: - ansible-playbook --syntax-check ~/playbook.yml - $ ansible-playbook --syntax-check ~/playbook.yml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。 
- 运行 playbook: - ansible-playbook ~/playbook.yml - $ ansible-playbook ~/playbook.yml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
验证
- 在内部工作站子网的 RHEL 主机上: - 安装 - traceroute软件包:- yum install traceroute - # yum install traceroute- Copy 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 traceroute- Copy 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 系统角色配置的 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 default- Copy 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 102- Copy 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 enp9s0- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 验证 - external区是否启用了伪装:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow