解读 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的规则才起作用。
具体来说:

  1. 使用 ip route add local default dev lo table 100

    • 这条命令创建了一个名为 100 的路由表,并在该表中添加了一条本地路由规则。这条规则指定所有目的地的数据包都通过本地回环接口 lo 处理。
    • 这条路由规则定义了如果某些数据包选择使用这个表,那么这些数据包将会通过 lo 接口处理。
  2. 使用 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 的流量通过本地回环接口处理,可以按照以下步骤操作:

  1. 标记特定流量(例如,使用 iptables):

    sudo iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1
    
  2. 添加路由表和路由规则

    sudo ip route add local default dev lo table 100
    
  3. 添加策略路由规则

    sudo ip rule add fwmark 1 lookup 100
    

这样配置后,流程如下:

  1. 当一个数据包发送到端口 80 时,它会被 iptables 标记为 1
  2. 因为这个数据包被标记为 1ip rule 会让它查找路由表 100
  3. 在路由表 100 中,所有数据包都通过本地回环接口 lo 处理。

总结

通过组合使用 ip routeip rule 命令,可以实现复杂的策略路由:

  • ip route 定义了具体的路由规则,存储在特定的路由表中。
  • ip rule 定义了哪些数据包需要查找哪些路由表,从而应用相应的路由规则。

这种方法允许你在系统中定义不同的数据包处理路径,实现灵活和强大的网络流量管理。

posted @ 2024-07-20 21:05  立体风  阅读(370)  评论(0编辑  收藏  举报