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