在Linux网络管理中,标准路由决策主要基于数据包的目的地址,系统查询路由表,找到与目标地址最匹配的条目,然后决定将数据包从哪个接口发出,在更复杂的网络环境中,这种单一维度的决策机制往往显得力不从心,策略路由(Policy-Based Routing, PBR)则提供了一种更强大、更灵活的流量控制能力,它允许管理员根据数据包的多个属性(如源地址、协议类型、端口、数据包大小等)来制定路由策略,从而实现精细化的网络路径选择,对于仍在使用稳定可靠的CentOS 6系统的环境而言,掌握策略路由的配置是一项非常有价值的技能。

策略路由的核心概念
要理解并实施策略路由,首先需要掌握其三个核心组件:路由表、路由规则和iproute2工具集。
多路由表
标准的Linux系统维护着多个路由表,但我们通常只与main路由表打交道(通过route -n或ip route show查看),策略路由的基础就是创建和使用额外的自定义路由表,每个路由表都是独立的,包含自己的网关和路由条目,通过将不同的路由规则与不同的路由表关联,可以实现流量的分流,系统通过/etc/iproute2/rt_tables文件来管理路由表的名称与数字ID的映射关系,方便管理员使用易记的名称(如T1、T2)而非数字ID。
路由规则
如果说路由表是“目的地”,那么路由规则就是“导航仪”,路由规则定义了如何选择一个路由表来查询,内核会按照规则的优先级顺序逐一匹配数据包,一旦找到匹配的规则,就会根据该规则指定的路由表进行转发决策,后续的规则将被忽略,规则的创建和管理主要通过ip rule命令完成,一条典型的规则可以基于源IP地址(from)、目标IP地址(to)、服务类型(tos)、防火墙标记(fwmark)等多种属性来匹配。
iproute2工具集
这是现代Linux系统上用于高级网络配置的瑞士军刀,取代了旧的net-tools(如ifconfig, route),在策略路由配置中,我们主要使用其中的ip命令:
ip route:用于管理路由表中的条目。ip rule:用于管理路由策略规则。ip addr:用于管理网络接口地址(替代ifconfig)。
在CentOS 6上配置策略路由:一个实例
假设一个CentOS 6服务器有两张网卡,分别连接到两个不同的ISP,以实现负载均衡或线路备份。
- eth0: 连接ISP1,IP地址为
96.134.133,网关为96.134.1。 - eth1: 连接ISP2,IP地址为
240.0.5,网关为240.0.1。 - 内网网段:
168.1.0/24。
我们的目标是:让来自168.1.0/24网段的流量通过ISP1(eth0)出去,而服务器自身发起的流量则通过ISP2(eth1)出去。
第一步:创建自定义路由表
编辑/etc/iproute2/rt_tables文件,在末尾添加两个自定义路由表的定义。
# vi /etc/iproute2/rt_tables
...
200 T_ISP1
201 T_ISP2 这里,200和201是自定义的数字ID,T_ISP1和T_ISP2是我们为它们指定的名称。
第二步:填充自定义路由表

为这两个表分别添加路由,主要是为每个表添加默认网关。
# 为T_ISP1表添加默认路由,指向ISP1的网关 ip route add default via 202.96.134.1 dev eth0 table T_ISP1 # 为T_ISP2表添加默认路由,指向ISP2的网关 ip route add default via 58.240.0.1 dev eth1 table T_ISP2
需要确保这两个表都包含到本地网络的直连路由,通常系统会自动处理,但也可以手动添加以确保万无一失。
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.10 table T_ISP1 ip route add 192.168.1.0/24 dev eth0 src 192.168.1.10 table T_ISP2
(假设服务器eth0的内网IP是192.168.1.10)
第三步:创建路由规则
创建规则来告诉内核何时使用哪个表。
# 规则1:所有源地址为192.168.1.0/24的流量,都查询T_ISP1表 ip rule add from 192.168.1.0/24 table T_ISP1 # 规则2:所有源地址为58.240.0.5(服务器eth1的IP)的流量,都查询T_ISP2表 ip rule add from 58.240.0.5 table T_ISP2
规则的优先级是按顺序来的,数字越小优先级越高,也可以使用pref参数手动指定优先级。
第四步:验证配置
使用以下命令检查规则和路由表是否正确加载。
# 查看所有路由规则 ip rule list # 查看特定路由表的内容 ip route show table T_ISP1 ip route show table T_ISP2
配置的持久化
命令在系统重启后会丢失,为了使配置永久生效,在CentOS 6中,需要将配置写入到/etc/sysconfig/network-scripts/目录下的特定文件中。
路由持久化:为每个接口创建一个
route-<interface_name>文件,创建/etc/sysconfig/network-scripts/route-eth0和/etc/sysconfig/network-scripts/route-eth1。/etc/sysconfig/network-scripts/route-eth0:
default via 202.96.134.1 dev eth0 table T_ISP1/etc/sysconfig/network-scripts/route-eth1:
default via 58.240.0.1 dev eth1 table T_ISP2规则持久化:同样,为接口创建
rule-<interface_name>文件。
/etc/sysconfig/network-scripts/rule-eth0:
from 192.168.1.0/24 table T_ISP1/etc/sysconfig/network-scripts/rule-eth1:
from 58.240.0.5 table T_ISP2
配置完成后,重启网络服务(service network restart)即可使配置生效。
重要考量与注意事项
在配置策略路由时,一个极易被忽视但至关重要的问题是源地址转换(SNAT),当一个来自内网168.1.x的数据包通过策略路由从eth0(ISP1线路)发出时,它的源IP仍然是内网私有地址,ISP1的路由器会丢弃这个包,必须配合iptables的NAT功能,将数据包的源IP修改为eth0接口的公网IP。
# 确保内核开启IP转发 echo "1" > /proc/sys/net/ipv4/ip_forward # 或者在/etc/sysctl.conf中设置 net.ipv4.ip_forward = 1 # 添加SNAT规则 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 202.96.134.133
对于动态IP地址,可以使用MASQUERADE:iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
只有策略路由与正确的SNAT规则相结合,才能确保数据包有去有回,通信正常。
相关问答 (FAQs)
问题1:策略路由和标准路由的主要区别是什么?
解答: 主要区别在于决策的依据和灵活性,标准路由(也称为目标路由)只关心数据包的目标IP地址,它通过查询单一的主路由表(main table)来决定下一跳,而策略路由则是一个多维度的决策系统,它可以根据数据包的源IP地址、协议、端口、数据包大小甚至防火墙标记等多种属性来匹配预设的规则,根据匹配到的规则,系统会选择一个特定的(可能不是默认的)路由表进行查询,从而实现更精细、更复杂的流量工程,例如基于源地址的选路、服务质量保证等。
问题2:我已经配置了策略路由,但流量似乎没有按照预期走,应该如何排查?
解答: 排查策略路由问题可以遵循以下步骤:
- 检查规则:首先使用
ip rule list确认你创建的规则是否存在,并且优先级(顺序)是否正确,确保没有其他更高优先级的规则提前匹配了流量。 - 检查路由表:使用
ip route show table <table_name>检查规则所指向的路由表内容是否正确,特别是默认网关是否存在且可达。 - 实时追踪:
ip route get命令是一个非常强大的调试工具,它可以模拟内核对一个特定目标地址的路由决策过程,执行ip route get from <源IP> to <目标IP>,可以明确看到内核最终选择了哪个出口和哪个网关,这能直接反映出策略路由是否生效。 - 检查防火墙和NAT:确认
iptables的filter表和nat表规则没有阻止或错误地修改了流量,特别是FORWARD链和POSTROUTING链的SNAT/MASQUERADE规则,它们是实现多出口通信的关键,使用iptables -t nat -L -v -n查看NAT规则的计数器,判断是否有流量匹配了规则。 - 开启日志:在
iptables的相关链上添加日志规则,可以帮助你捕获数据包,观察它们在哪个环节被处理或丢弃。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复