Linux策略路由详解
字数 1094 2025-08-12 11:34:44
Linux策略路由详解
概述
传统Linux路由使用route命令进行管理,但只能基于目的地址进行路由选择。策略路由(基于策略的路由机制)提供了更强大的路由控制能力,可以基于源地址、传输层端口甚至payload内容进行更细致的路由控制。
策略路由通过路由策略数据库(RPDB, Routeing Policy DataBase)来实现,使用ip rule命令进行管理。
安装与准备
确保安装了iproute工具包:
# 检查是否安装
ip -V
# 安装iproute
yum install iproute -y
路由策略数据库(RPDB)
RPDB是存放策略规则的数据库,被策略匹配的数据包会执行指定的操作。系统启动时默认配置三条规则:
# 查看当前RPDB规则
ip rule show
# 默认规则输出:
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
默认路由表说明
- local路由表:特殊路由表,包含本地地址和广播地址的高优先级控制路由
- main路由表:通用路由表,
route -n命令操作的就是这个表 - default路由表:默认为空表,通常保持为空
ip rule命令详解
基本语法
ip rule { add | del } SELECTOR ACTION
ip rule { flush | save | restore }
ip rule [ list [ SELECTOR ]]
选择器(SELECTOR)
from PREFIX:根据源地址前缀匹配to PREFIX:根据目的地址前缀匹配tos TOS:根据IP包头TOS字段值匹配fwmark FWMARK[/MASK]:根据iptables标记匹配iif STRING:匹配输入接口oif STRING:匹配出接口设备(仅对本地套接字有效)pref NUMBER:规则优先级(可用priority或order替代)
动作(ACTION)
table TABLE_ID:指定使用的路由表(可用lookup替代)blackhole:静默丢弃匹配的数据包unreachable:丢弃并返回"Network is unreachable"错误prohibit:丢弃并返回"Communication is administratively prohibited"错误
策略路由配置示例
添加策略规则
# 来自192.168.22.3的数据包使用表10路由
ip rule add from 192.168.22.3 table 10
# 发往192.168.23.0/24的数据包使用表20路由,优先级100
ip rule add to 192.168.23.0/24 table 20 pref 100
# 使用iptables标记数据包
iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80 -s 192.168.24.0/24 -j MARK --set-mark 1
# 标记为1的数据包使用iptables_table路由表
ip rule add fwmark 1 table iptables_table
# 丢弃特定源地址的数据包
ip rule add from 192.168.25.0/24 blackhole
ip rule add from 192.168.26.0/24 unreachable
ip rule add from 192.168.27.0/24 prohibit
路由表名称映射
默认只能使用数字ID指定路由表,要使用名称需要编辑/etc/iproute2/rt_tables:
# 编辑/etc/iproute2/rt_tables
cat /etc/iproute2/rt_tables
# 添加自定义路由表映射
100 iptables_table
添加后即可使用名称代替数字ID。
路由表管理
查看路由表
# 查看main路由表(默认)
ip route show
ip route show table main
# 查看指定目标的路由
ip route show 192.168.22.0/24
# 查看自定义路由表
ip route show table iptables_table
ip route show table 100
添加路由
# 向自定义路由表添加默认路由
ip route add default via 192.168.22.1 dev eth1 src 192.168.22.3 table iptables_table
删除路由
# 从自定义路由表删除路由
ip route del default via 192.168.22.1 dev eth1 src 192.168.22.3 table iptables_table
总结
Linux策略路由提供了比传统路由更灵活的控制能力,主要特点包括:
- 基于多种条件(源/目的地址、端口、标记等)进行路由决策
- 通过RPDB和
ip rule命令管理策略规则 - 支持多个路由表并行存在
- 提供丰富的动作选项(转发、丢弃、返回错误等)
- 需要配合
ip route命令管理各路由表的具体路由条目
掌握策略路由可以满足复杂网络环境下的路由需求,实现更精细化的流量控制。