解读 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
定义了哪些数据包需要查找哪些路由表,从而应用相应的路由规则。
这种方法允许你在系统中定义不同的数据包处理路径,实现灵活和强大的网络流量管理。