解读 ip route 和 ip rule
概览
ip route 路由器设置,ip rule 规则设置。
基本操作
添加路由 和 规则
ip route add local default dev lo table 100
ip rule add fwmark 1 lookup 100
查看 route 中的 表 100
root@PC:~# ip route list table 100
local default dev lo scope host
查看 rule 的规则
root@PC:~# ip rule list
0: from all lookup local
32765: from all fwmark 0x1 lookup 100
32766: from all lookup main
32767: from all lookup default
删除上述添加
ip route flush table 100
ip rule del fwmark 0x1 lookup 100
上述 2 条规则的详细解释:
简单说:ip route 画出一条路径,但在 ip rule 中指定走这条路径时,ip route的规则才起作用。
具体来说:
-
使用
ip route add local default dev lo table 100:- 这条命令创建了一个名为
100的路由表,并在该表中添加了一条本地路由规则。这条规则指定所有目的地的数据包都通过本地回环接口lo处理。 - 这条路由规则定义了如果某些数据包选择使用这个表,那么这些数据包将会通过
lo接口处理。
- 这条命令创建了一个名为
-
使用
ip rule add fwmark 1 lookup 100:- 这条命令添加了一条策略路由规则,指定所有被防火墙标记为
1的数据包将查找路由表100来决定它们的路由。 - 这意味着,只有被标记为
1的数据包会被发送到路由表100,从而应用ip route add local default dev lo table 100中的规则。
- 这条命令添加了一条策略路由规则,指定所有被防火墙标记为
整体逻辑
- ip route 命令定义了路由规则,但这些规则仅在数据包查找相应路由表时才会应用。
- ip rule 命令定义了哪些数据包应该查找哪个路由表。
所以,只有那些被 ip rule 指定查找表 100 的数据包才会应用表 100 中的规则。而表 100 中的规则定义了这些数据包会通过本地回环接口 lo 处理。
完整的策略路由设置示例
假设我们要将所有发往端口 80 的流量通过本地回环接口处理,可以按照以下步骤操作:
-
标记特定流量(例如,使用
iptables):sudo iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1 -
添加路由表和路由规则:
sudo ip route add local default dev lo table 100 -
添加策略路由规则:
sudo ip rule add fwmark 1 lookup 100
这样配置后,流程如下:
- 当一个数据包发送到端口 80 时,它会被
iptables标记为1。 - 因为这个数据包被标记为
1,ip rule会让它查找路由表100。 - 在路由表
100中,所有数据包都通过本地回环接口lo处理。
总结
通过组合使用 ip route 和 ip rule 命令,可以实现复杂的策略路由:
ip route定义了具体的路由规则,存储在特定的路由表中。ip rule定义了哪些数据包需要查找哪些路由表,从而应用相应的路由规则。
这种方法允许你在系统中定义不同的数据包处理路径,实现灵活和强大的网络流量管理。

浙公网安备 33010602011771号