1. 简介
传统路由的转发规则基于数据包的 目的地址,而策略路由则通过指定的 策略 来决定数据包的转发路径。例如:
- 根据 源 IP 地址 决定转发路径。
- 根据 流量类型(如 HTTP 或 VoIP)选择不同的路由。
- 根据 网络接口(如多网卡)选择路由。
2. 实现方式
在 Linux 系统中,策略路由通过 多路由表 和 规则(rules) 实现。这些规则由 ip rule
和 ip route
命令配置。
多路由表
- 每个路由表定义一组路由规则。
- 默认情况下,Linux 只使用路由表
main
(ID: 254)。 - 策略路由可以利用多个路由表(如
table 100
),并根据规则匹配选择具体的路由表。
路由规则
- 使用
ip rule
命令定义路由规则。 - 路由规则根据数据包的 源地址、目的地址、协议 或其他条件,决定数据包使用哪个路由表。
3. 策略路由的配置示例
假设服务器有两张网卡:
eth0
: 使用网关192.168.1.1
(ISP A 提供的出口)。eth1
: 使用网关10.0.0.1
(ISP B 提供的出口)。
需要配置策略路由,使来自 192.168.1.100
的流量通过 eth0
转发,而来自 10.0.0.100
的流量通过 eth1
转发。
步骤 1: 配置网络接口
确保两张网卡都正常连接并设置 IP 地址:
ip addr add 192.168.1.100/24 dev eth0
ip addr add 10.0.0.100/24 dev eth1
配置默认网关:
ip route add default via 192.168.1.1 dev eth0
步骤 2: 创建多路由表
100 table_eth0
200 table_eth1
ip route add default via 192.168.1.1 dev eth0 table table_eth0
ip route add 192.168.1.0/24 dev eth0 table table_eth0
ip route add default via 10.0.0.1 dev eth1 table table_eth1
ip route add 10.0.0.0/24 dev eth1 table table_eth1
步骤 3: 添加路由规则
ip rule add from 192.168.1.100 lookup table_eth0
ip rule add from 10.0.0.100 lookup table_eth1
4. 应用场景
-
多出口环境:
- 在企业或多网卡服务器中,根据源 IP 地址或应用类型选择不同的出口网关。
-
多租户隔离:
- 为不同的租户流量定义独立的路由策略,确保流量隔离。
-
VPN 和本地流量分流:
- 在 VPN 场景中,可以让某些流量(如访问内网资源)通过 VPN,其他流量直接通过本地出口。
-
QoS 优化:
- 根据应用的优先级(如语音流量、视频流量)选择最佳的路由路径。
-
链路冗余:
- 在多条链路中设置备用路径,当主链路故障时动态切换到备用链路。
5. 限制和注意事项
-
规则顺序:
- 路由规则是按优先级匹配的,先定义的规则优先匹配。
-
性能开销:
- 复杂的路由策略可能增加路由查找的时间,影响性能。
-
与防火墙的配合:
- 使用
iptables
配合策略路由时,需要注意规则之间的相互影响。
- 使用
-
多路由表管理:
- 多路由表的配置需要精确管理,避免循环路由或规则冲突。