iptables通过MARK标记与策略路由实现多链路备份:先在mangle表PREROUTING链标记新连接并保存至conntrack,再用CONNMARK恢复已建连接标记;配置双路由表(wan_main/wan_backup)及对应默认路由;设置ip rule匹配fwmark导向指定路由表;辅以ping探测或接口状态监控实现主备自动切换。

iptables 本身不直接实现路由选择,但它能配合内核路由机制,通过数据包标记(MARK)和策略路由(ip rule + ip route),达成服务器间多链路备份路由控制。核心思路是:用 iptables 标记流量,再由策略路由决定走哪条链路;当主链路失效时,靠路由表切换或规则优先级实现自动回切或降级使用备用链路。
标记关键流量并绑定连接状态
确保同一连接的所有数据包走同一条链路,避免乱序或中断:
- 在 mangle 表 PREROUTING 链中,对新连接打标记(如 --mark 1 表示主链路,--mark 2 表示备链路)
- 立即用 CONNMARK --save-mark 将标记存入连接跟踪(conntrack)中
- 对已建立连接(ESTABLISHED/RELATED)的包,在 PREROUTING 中用 CONNMARK --restore-mark 恢复原标记
- 避免仅按单包轮询——否则 TCP 连接会跨链路发包,导致丢包或重传
配置双路由表与主备默认路由
为每条链路准备独立路由表,并设置带优先级的默认路由:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 编辑 /etc/iproute2/rt_tables,添加例如:
200 wan_main201 wan_backup - 在 wan_main 表中添加主链路默认路由:
ip route add default via 192.168.1.1 dev eth0 table wan_main - 在 wan_backup 表中添加备链路默认路由:
ip route add default via 10.0.20.1 dev eth1 table wan_backup - 主路由表可设更低 metric(如 100),备路由表设更高 metric(如 200),便于故障时 fallback
用策略规则匹配标记并导向对应路由表
让不同标记的数据包查不同的路由表:
ip rule add fwmark 1 table wan_mainip rule add fwmark 2 table wan_backup- 规则顺序很重要:fwmark 规则应早于默认规则(如 32766: from all lookup main),否则会被绕过
- 可通过
ip rule show确认规则编号与优先级,必要时用ip rule del清理冲突项
链路健康检测与自动切换(可选增强)
纯静态规则无法感知链路是否可用,需补充轻量级探测机制:
- 用 cron 或 systemd timer 定期 ping 主网关(如
ping -c 1 -W 2 192.168.1.1 &>/dev/null) - 若连续失败,临时修改策略规则优先级:
ip rule del fwmark 1ip rule add pref 100 fwmark 2 table wan_backup - 恢复时重新插入主规则,并 flush 对应路由表缓存:
ip route flush cache - 更稳健做法是结合 keepalived 或自定义脚本监听接口状态(如
ip link show eth0 | grep "state UP")


















