基于源地址的路由和qos是两类独立但可协同的机制:前者通过多路由表与ip rule实现路径选择,后者通过tc在出方向实施流量控制;二者分层协作,不共用配置逻辑。

Linux 路由策略中,基于源地址的路由和基于服务质量(QoS)的流量控制是两类不同但可协同使用的机制:前者解决“走哪条路”,后者解决“怎么走、走多快”。它们不共用同一套命令或配置逻辑,但能在同一系统中并存——比如让来自 eth0 的业务流量走主表并限速,而来自 eth1 的管理流量走专用表且保障低延迟。
基于源地址的策略路由:确保路径一致性
多网卡场景下,仅设一个默认网关会导致响应包从错误接口发出,被对方或本机 rp_filter 丢弃。核心是打破单一 main 表限制,为每张网卡配独立路由表:
- 在 /etc/iproute2/rt_tables 末尾添加自定义表名,例如:
100 tab_eth0
101 tab_eth1 - 为每个表添加两项路由:直连子网 + 默认网关。例如 eth0 地址为 192.168.10.100/24、网关 192.168.10.1:
ip route add 192.168.10.0/24 dev eth0 src 192.168.10.100 table tab_eth0
ip route add default via 192.168.10.1 dev eth0 table tab_eth0 - 用 ip rule 绑定源 IP 与表,优先级数字越小越先匹配:
ip rule add from 192.168.10.100/32 table tab_eth0 priority 100
ip rule add from 10.0.20.100/32 table tab_eth1 priority 101 - 必须关闭反向路径过滤:
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
QoS 不在路由表里,而在流量控制层
QoS(如限速、优先级标记、带宽保障)由 tc(traffic control)实现,它工作在数据链路层,作用于出方向队列,与路由决策是上下游关系:路由决定“发往哪里”,tc 决定“以什么方式发出去”。它不修改路由表,也不依赖多表机制。
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 典型限速流程:清空旧规则 → 添加 HTB 根队列 → 创建带宽类 → 用 iptables 或 u32 匹配流量 → 绑定到对应类:
tc qdisc add dev eth0 root handle 1: htb default 12
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 5mbit ceil 10mbit
tc filter add dev eth0 protocol ip parent 1:0 u32 match ip src 192.168.10.100 flowid 1:12 - 若需对某张网卡上的特定源 IP 流量做 QoS,可在其出口设备(如 eth0)上配置 tc,再用 u32 过滤器匹配源地址,无需改动路由表
- 注意:QoS 规则只影响出方向;入方向限速需用 ifb 模块配合,且不能替代路由策略
两者如何配合使用
策略路由与 QoS 可组合实现更精细的网络治理,例如双出口分流+差异化服务保障:
- eth0(办公网)走 tab_eth0 表,同时在其设备上部署 tc,对源 IP 192.168.10.100 的 HTTP 流量限速 10Mbps,标记为高优先级
- eth1(运维网)走 tab_eth1 表,并单独配置另一套 tc 规则,保障 SSH 和 SNMP 流量最小带宽 2Mbps
- 所有规则均需持久化:路由表和规则写入 /etc/network/if-up.d/ 或 systemd-networkd 的 .network 文件;tc 命令建议封装为脚本,在接口 up 后自动执行
验证与调试要点
配置完成后,不能只看 ip route show,要分层验证:
- 查策略规则是否生效:ip rule show 确认优先级和匹配条件
- 查指定表内容:ip route show table tab_eth0 看直连和默认路由是否存在
- 查实际路径:ip route get 8.8.8.8 from 192.168.10.100 应返回 via 网关 + dev eth0 + table tab_eth0
- 查 QoS 效果:tc -s class show dev eth0 查看各 class 发送字节数和丢包;用 iperf3 实测限速是否准确










