返程路由问题,对于RouterOS多线接入情况下,遇到的问题最多,而且在不同的环境下,解决方案也有不同,这篇文章探讨遇到问题最多的一种多线端口映射(不涉及PCC负载均衡情况,PCC的情况在配置了input和output策略后,大部分多线映射是可以解决的)

网络结构情况是,默认路由还是在WAN1上,我们需要映射TCP/3389到内网服务器192.168.1.8,配置情况如下:

首先要配置默认的src-nat的伪装规则隐藏内网地址

/ip firewall nat

add chain=srcnat action=masquerade

 

配置相应的端口映射规则

/ip firewall nat

add chain=dstnat dst-address=1.1.1.2 dst-port=3389 protocol=tcp action=dst-nat to-addresses=192.168.1.8  to-ports=3389

add chain=dstnat dst-address=2.2.2.2 dst-port=3389 protocol=tcp action=dst-nat to-addresses=192.168.1.8 to-ports=3389

 

WAN1作为默认路由出口,A用户通过WAN1访问映射的服务器是ok的,但WAN2作为策略路由(通常路由器只会配置一条默认路由,除非ECMP场景)线路是失败的,按照PCC提到的input和output返程路由策略路由器本地双线访问是ok的,为什么在端口映射会失败。这里我们要把到WAN2的路径分为两段,如下图

从B用户到路由器是ok,因为有input和output策略,但从服务器到路由器这部分出问题了,内网服务器查询的是默认路由。因为input和output链表只管入和出路由器本地数据,而不管通过路由器转发的数据,因此我们要把标记策略进行修改

接下来需要在mangle标记wan2线路的策略,注意这里我们使用链表不再是input,而是prerouting,即路由之前,标记连接为wan2_con

/ ip firewall mangle

add chain=prerouting in-interface=wan2 action=mark-connection new-connection-mark=wan2_con

 

prerouting链表配置的是进入wan2口的数据标记的wan2_con,通过output链表标记返回的路由,和之前的PCC一样,取名wan2_route

/ip firewall mangle

add chain=output connection-mark=wan2_con action=mark-routing new-routing-mark=wan2_route

 

这样的配置并没有完,之前说过,由于output链表不会理会转发到互联网的数据,只是处理路由器本地路由,因此我们需要补充一条内网映射主机到外网的路由策略,也要返回到wan2口,配置如下:

/ip firewall mangle

add chain=prerouting connection-mark=wan2_con src-address=192.168.1.8/32 action=mark-routing new-routing-mark=wan2_route

 

再把对应的标记指定到相同的网关上

/ip route add gateway=2.2.2.1 routing-mark=wan2_route