CentOS运维中配置策略路由,核心是通过ip命令结合路由表和规则实现数据包的智能转发。当服务器需要根据源IP、目标IP、端口或协议等条件将流量导向不同网关时,静态路由已无法满足需求,必须使用策略路由。具体操作分为三步:创建自定义路由表、在表中添加路由条目、设定路由规则来匹配流量并查询指定表。下面将详细拆解每一步命令和配置。
理解策略路由的核心概念:路由表、规则与优先级
在Linux中,传统路由仅依赖一张主路由表(通常为table main),决策单一。策略路由则引入了多路由表(最多255张)和路由规则(ip rule)的概念。每条规则由选择器(条件匹配,如源地址)和动作(查询某张路由表)组成。系统按优先级顺序(数字越小优先级越高)遍历规则,一旦流量匹配某条规则,就查询其指向的路由表进行转发,不再检查后续规则。默认规则包括local(0)、main(254)和default(255)三张表的管理。我们通过ip命令可以灵活地自定义规则和表。
第一步:创建并配置自定义路由表
首先,需要在/etc/iproute2/rt_tables文件中添加自定义路由表。例如,添加ID为100、名称为custom的表:
echo "100 custom" >> /etc/iproute2/rt_tables
之后,使用ip route add命令向该表添加路由。假设我们有两个网络接口:eth0(IP: 192.168.1.10,网关: 192.168.1.1)连接互联网,eth1(IP: 10.0.0.10,网关: 10.0.0.1)连接内部网络。现在需要将目标为203.0.113.0/24的流量通过eth1网关发出,可以这样配置:
ip route add 203.0.113.0/24 via 10.0.0.1 dev eth1 table custom
若要设置该表的默认路由,可执行:
ip route add default via 10.0.0.1 dev eth1 table custom
使用ip route show table custom可以验证配置。
第二步:设置路由规则匹配特定流量
接下来,创建规则将流量导向自定义表。例如,我们希望所有源自192.168.1.10的流量使用custom表:
ip rule add from 192.168.1.10 table custom priority 100
规则也可基于目标地址、服务类型(tos)或防火墙标记(fwmark)等。例如,匹配目标端口为80的流量并标记(需配合iptables/ nftables):
iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 1 ip rule add fwmark 1 table custom priority 150
使用ip rule show可查看所有规则,优先级数字越小越先匹配。
第三步:确保配置持久化与系统集成
ip命令配置在重启后会丢失,必须持久化。在CentOS 7/8中,可以通过创建network-script文件或使用systemd-networkd实现。推荐方法是在/etc/sysconfig/network-scripts/目录下创建route-interface和rule-interface文件。对于上述custom表,在/etc/sysconfig/network-scripts/目录下创建route-eth1:
203.0.113.0/24 via 10.0.0.1 dev eth1 table custom default via 10.0.0.1 dev eth1 table custom
同时创建rule-eth1:
from 192.168.1.10 table custom priority 100
重启网络服务(systemctl restart network)即可生效。在CentOS 8 Stream或类似版本中,可考虑使用nmcli或编写systemd service单元来执行ip命令脚本。
高级应用场景:双线负载均衡与故障转移
策略路由能实现复杂网络架构。例如,服务器有两条互联网线路(eth0和eth1),希望HTTP流量走线路A,SSH流量走线路B,同时实现故障转移。这需要结合多个路由表和规则。首先创建两个表(table100和table200),分别设置各自的默认网关。然后基于端口设置规则:
ip rule add dport 80 table 100 priority 50 ip rule add dport 22 table 200 priority 51
为了故障转移,可以在每个表中添加默认路由的多个跃点(metric),并利用ip route的proto选项配合动态路由协议(如BGP)或脚本监控实现自动切换。但注意,负载均衡需要更复杂的连接状态管理,避免同一会话的流量走不同路径导致问题,通常需结合iproute2的nexthop或bonding驱动。
常见排错命令与注意事项
配置后若网络异常,按顺序检查:
1. 使用ip rule show验证规则是否存在且优先级正确;
2. 使用ip route show table
3. 通过ip route get <destination> from <source>模拟路由查询,查看实际匹配的规则和表。例如:
ip route get 203.0.113.5 from 192.168.1.10
可能遇到的问题包括:规则冲突(优先级设置不当)、路由表条目缺失、反向路径过滤(rp_filter)导致丢包。调整rp_filter可在/etc/sysctl.conf中设置net.ipv4.conf.all.rp_filter=2(宽松模式),然后执行sysctl -p。务必在生产环境前于测试环境充分验证,并记录所有变更。
总结:策略路由的价值与运维实践
掌握ip命令配置策略路由是CentOS高级运维的必备技能。它突破了单一路由的局限,使网络流量控制更加精细和灵活,适用于多租户网络隔离、合规性流量引导、成本优化(区分贵贱流量)及复杂网络融合场景。关键在于规划清晰的路由表结构和规则优先级,并做好持久化配置。随着云原生和混合云架构普及,策略路由在容器网络(如Calico)和SD-WAN边缘设备中也广泛应用,运维人员应深入理解其底层机制,以应对日益复杂的网络管理需求。
