Policy Routing

RouterOS 中的策略路由允许根据条件将流量引导到特定的网关,使用自定义路由表和规则。它通过防火墙 mangle 标记或基本路由规则配置来支持动态路由决策,从而实现流量控制。

策略路由

策略路由将符合特定条件的流量引导到特定网关。你可以用它强制选定的客户或协议(例如 HTTP 流量)始终使用某个特定的网关。它还可以通过不同的网关路由本地和海外流量。

RouterOS 为策略路由提供以下组件:

  • 路由表。
  • 路由规则。
  • 防火墙 mangle 标记。

路由表

一台路由器可以拥有多个路由表,每个路由表都为同一目的地址提供具有不同网关的路由。

从 /routing/table 菜单查看和配置路由表。

默认情况下,RouterOS 只有 main 路由表:

[admin@rack1_b33_CCR1036] /routing/table> print
Flags: D - dynamic; X - disabled, I - invalid; U - used
0 D name="main" fib

在配置的其他地方使用自定义路由表之前,请先在此菜单中定义它。

考虑一个基本示例,其中有两个网关 172.16.1.1 和 172.16.2.1,以及名为 myTable 的路由表中指向 8.8.8.8 且使用网关 172.16.2.1 的路由:

/routing/table/add name=myTable fib
/ip/route/add dst-address=8.8.8.8 gateway=172.16.1.1
/ip/route/add dst-address=8.8.8.8 gateway=172.16.2.1@main routing-table=myTable

提示

为了让用户创建的表能够解析目的地址,主路由表也必须能够解析该目的地址。 在此示例中,main 路由表也应包含指向 8.8.8.8 的路由或至少一条默认路由。由于 DHCP 会出于安全考虑动态添加默认路由,因此请将 8.8.8.8 显式添加到 main 表中。

[admin@rack1_b33_CCR1036] /ip/route> print detail Flags: D - dynamic; X - disabled, I - inactive, A - active;
c - connect, s - static, r - rip, b - bgp, o - ospf, d - dhcp, v - vpn, m - modem, y - cop
y;
H - hw-offloaded; + - ecmp
   DAd   dst-address=0.0.0.0/0 routing-table=main pref-src="" gateway=172.16.1.1
         immediate-gw=172.16.1.1%ether8 distance=1 scope=30 target-scope=10
         vrf-interface=ether8 suppress-hw-offload=no

 0  As   dst-address=8.8.8.8/32 routing-table=main pref-src="" gateway=172.16.1.1
         immediate-gw=172.16.1.1%ether8 distance=1 scope=30 target-scope=10 suppress-hw-offload=no

    DAc   dst-address=172.16.1.0/24 routing-table=main gateway=ether8 immediate-gw=ether8
         distance=0 scope=10 suppress-hw-offload=no local-address=172.16.1.2%ether8

    DAc   dst-address=172.16.2.0/24 routing-table=main gateway=ether7 immediate-gw=ether7
         distance=0 scope=10 suppress-hw-offload=no local-address=172.16.2.2%ether7

 1  As   dst-address=8.8.8.8/32 routing-table=myTable pref-src="" gateway=172.16.2.1
         immediate-gw=172.16.2.1%ether7 distance=1 scope=30 target-scope=10 suppress-hw-offload=no

上述配置还不够。你需要一种方法来强制流量使用新表。RouterOS 提供两种选择:

  • 防火墙 mangle —— 对用于引导流量的条件提供更多控制,例如按连接或按数据包进行负载均衡。示例请参见 防火墙标记。
  • 路由规则 —— 一组用于快速引导流量的基本参数。本示例使用路由规则。

除非必要,不要同时使用这两种方法。如果同时使用 mangle 和路由规则,默认情况下 mangle 具有更高的优先级。如果被 mangle 标记的流量能在表中解析,路由规则就永远不会看到该流量。执行顺序可以更改。

警告

路由表数量限制为 4096 个唯一表。

路由规则

路由规则根据基本参数(例如源地址、目的地址、入接口等)引导流量。

在此示例中,选择发往 8.8.8.8 的流量,并阻止回退到 main 表:

/routing/rule/add dst-address=8.8.8.8 action=lookup-only-in-table table=myTable

如果某个客户连接在 ether4 上,且只应让该客户将 8.8.8.8 路由到特定网关,请使用此规则:

/routing/rule/add dst-address=8.8.8.8 action=lookup-only-in-table table=myTable interface=ether4

如果表中使用的网关宕机,查找将失败,目的地址将变得不可达。在主备(active-backup)配置中,可以通过将操作从 lookup-only-in-table 改为 lookup 来允许流量回退到 main 表。

路由规则也可以充当基本防火墙。例如,阻止 ether4 上的客户访问 192.168.1.0/24:

/routing/rule/add dst-address=192.168.1.0/24 interface=ether4 action=drop