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

默认路由表说明

  1. local路由表:特殊路由表,包含本地地址和广播地址的高优先级控制路由
  2. main路由表:通用路由表,route -n命令操作的就是这个表
  3. 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策略路由提供了比传统路由更灵活的控制能力,主要特点包括:

  1. 基于多种条件(源/目的地址、端口、标记等)进行路由决策
  2. 通过RPDB和ip rule命令管理策略规则
  3. 支持多个路由表并行存在
  4. 提供丰富的动作选项(转发、丢弃、返回错误等)
  5. 需要配合ip route命令管理各路由表的具体路由条目

掌握策略路由可以满足复杂网络环境下的路由需求,实现更精细化的流量控制。

Linux策略路由详解 概述 传统Linux路由使用 route 命令进行管理,但只能基于目的地址进行路由选择。策略路由(基于策略的路由机制)提供了更强大的路由控制能力,可以基于源地址、传输层端口甚至payload内容进行更细致的路由控制。 策略路由通过路由策略数据库(RPDB, Routeing Policy DataBase)来实现,使用 ip rule 命令进行管理。 安装与准备 确保安装了 iproute 工具包: 路由策略数据库(RPDB) RPDB是存放策略规则的数据库,被策略匹配的数据包会执行指定的操作。系统启动时默认配置三条规则: 默认路由表说明 local路由表 :特殊路由表,包含本地地址和广播地址的高优先级控制路由 main路由表 :通用路由表, route -n 命令操作的就是这个表 default路由表 :默认为空表,通常保持为空 ip rule命令详解 基本语法 选择器(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"错误 策略路由配置示例 添加策略规则 路由表名称映射 默认只能使用数字ID指定路由表,要使用名称需要编辑 /etc/iproute2/rt_tables : 添加后即可使用名称代替数字ID。 路由表管理 查看路由表 添加路由 删除路由 总结 Linux策略路由提供了比传统路由更灵活的控制能力,主要特点包括: 基于多种条件(源/目的地址、端口、标记等)进行路由决策 通过RPDB和 ip rule 命令管理策略规则 支持多个路由表并行存在 提供丰富的动作选项(转发、丢弃、返回错误等) 需要配合 ip route 命令管理各路由表的具体路由条目 掌握策略路由可以满足复杂网络环境下的路由需求,实现更精细化的流量控制。