路由器是连接两个或两个以上IP网段的三层设备,只要两个网段的IP配置到路由器上,且该网段下的网络设备默认网关指向路由器,他们之间是可以互通的。如果路由器上有192.168.99.0/24和192.168.88.0/24的网段,当192.168.88.0/24走线路2,因为策略路由原因会导致无法访问到192.168.99.0/24的网段,如果要解决这个问题,需要在mangle标记时排除内网段IP地址

现在假设192.168.88.0/24源地址走线路2出去,会导致192.168.88.0/24能通过线路2的网关20.20.0.1出去上网,但无法通过路由访问192.168.99.0/24的局域网,因为RouterOS已经将192.168.88.0/24的地址段路由重定向到20.20.0.1的网关上,不在查询路由器默认的main主路由表。

因此这里我们需要使用mangle规则的路由标记,来排除访问192.168.99.0/24的路由,除了192.168.99.0/24都去src_mangle路由表查询,而192.168.99.0/24去main表查询路由。mangle标记配置如下:

如上图,我们在dst-address设置了到目标192.168.99.0/24,并在前方勾选 ”!“(代表非),排除192.168.99.0/24,通过mangle参数就可排除策略路由导致访问内网失效的问题。

如果有多个内网ip地址段,可使用/ip firewall address-list,在address-list定义一个lan的地址列表:

然后在mangle规则里调用lan地址列表,src-address=192.168.88.0/24,同时排除dst-address-list为lan地址列表:

这样排除了目标路由是内网IP段的标记,也可用于排除外网某个主机IP,要求去main表查询路由,而不标记到策略路由表查询。

因此基于mangle标记的策略路由,可以调用很多参数,适应各种网络情况,这也是RouterOS在处理策略路由方面非常灵活的一个表现。

注:该实例,和PCC导致内网多IP段互通失败问题是同理,也适用于PCC的解决方案。PCC要求内网地址段都做负载均衡,在mangle配置PCC规则里调用lan地址列表,src-address-list为lan地址,同时并排除dst-address-list为lan地址列表: