多线接入的返程路由

来自深圳捷联讯通科技有限公司
跳转至: 导航搜索
当做RouterOS的PCC多线路负载均衡的时候,我们会发现一组规则,在ip firewall mangle 的input和output链表中出现的,这条规则用于非默认路
由的返程,即从那个三层口到路由器,就从那个三层接口返回。通常路由器默认路由只有一条(除 ECMP 外),返程路由可以保证数据不会被拒绝。
默认路由(Default Route):即网关设备的默认路由出口,如果要讲就需要把三层网络和路由长篇大论一番,但这里就不细说,可以去网上查查。


PCC返程路由配置

这里再次单独把 PCC 的返程路由配置列出,更详细点说明返程的配置, 假设我们有两条线路, 线路 A 和线

路 B, 做 PCC 负载均衡, PCC 的具体配置就不细说, 来看看这两条返程路由的规则和默认路由的区别

♠ 线路 A:1.1.1.2/24,网关 1.1.1.1,接口 wan1
♠ 线路 B:2.2.2.2/24,网关 2.2.2.1,接口 wan2
6-69.png
首先配置 PCC mangle 标记(配置省略),主要看看 PCC 中的 mangle 标记中有以下两组规则
6-70.png
input 链表配置的是进入 wan1 口的数据标记为 1st_conn,进入 wan2 接口的标记为 2nd_conn
6-71.png
在 output 链表中将 1st_conn 做路由标记到 pcc1,2nd_conn 标记到 pcc2
当然我们会把对应的标记指定到相同的网关上
6-72.png
注意正常情况下,我们会配置一条默认路由,例如:
6-73.png
路由表的情况如下:
6-74.png

返程路由原理

原理上面的实例来说明, 双线接入的路由器,有 WAN1 和 WAN2,路由器只能配置一条默认路由,这里配置的是 WAN1 的默认路由,
6-7661.jpg
上面场景告诉大家双线只有一条默认路由,无法同时访问两条线路的原因,如果 A 用户要访问路由器的WAN1 接口,是没有问题的,因为 WAN1 进入,默认路由走 WAN1 出去,但如果 B 要访问 WAN2,由于默认路由设置的是 WAN1,因此进入 WAN2 的数据包不是按照从 WAN2 进入,再从 WAN2 出去,而是,从 WAN2进入, WAN1 出去,通常路由器都会做 nat 规则,数据被伪装为 WAN1 接口的 IP(非 nat 的三层路由场景通常可以实现不对称路由),因此返回给 B 用户的源 IP,不是 2.2.2.2,而是 1.1.1.2,那么数据包是非法的,会被丢弃。


以上说明了失败的原因,那么解决此类问题需要通过策略路由完成



返程路由三种场景

返程路由问题,对于 RouterOS 多线接入情况下,遇到的问题最多,而且在不同的环境下,解决方案也有不同,这里我归纳了三种环境的返程路由问题,分别是路由器本地的返程路由, PCC 环境的端口映射返程路由,多线端口映射
环境 1:路由器本地返程路由
首先多线路接入到路由器,在使用多线的情况下,不涉及 nat 端口映射,仅仅是通过多线访问路由器进行管理,那只需要做 input 和 output 的 mangle 标记策略,如下图
6-7771.jpg
RouterOS 有两条线路 WAN1 和 WAN2,分别是 1.1.1.2 和 2.2.2.2,默认网关为 1.1.1.1,也就是访问路由只能通过 WAN1 进入,而 WAN2 没有配置路由,无法通过 2.2.2.2 访问路由器要实现通过 WAN2 的 2.2.2.2 访问路由器,需要配置返程路由,即标记从 WAN2 接口进入的连接,从WAN2 接口出去, 配置如下:
首先添加两条线路的 IP 地址
/ip address
add address=1.1.1.2/24 interface=wan1
add address=2.2.2.2/24 interface=wan2
需要添加 WAN1 的默认路由:路由器的默认路由走 WAN1,外部访问路由器默认 WAN1 线路是正常
ip route add gateway=1.1.1.1
配置 WAN2 线路的 mangle 标记, mangle 在 input 链表标记进入 WAN2 接口的连接为 wan2_con,WAN1 有默认路由,因此无需在配置策略
/ ip firewall mangle
add chain=input in-interface=wan2 action=mark-connection new-connection-mark=wan2_con
在 output 链表中将 wan2_con 做路由标记到 wan2_route
add chain=output connection-mark=wan2_con action=mark-routing new-routing-mark=wan2_route
把对应的标记指定到相同的网关上
ip route add gateway=2.2.2.1 routing-mark=wan2_route
路由表的情况如下:
6-7772.jpg
6-7773.jpg
路由配置完成了,从外网能同时通过 WAN1 和 WAN2 访问到路由器。该配置也适用用于 PCC 负载均衡策略的路由器
注意:这个配置仅仅能实现访问到路由器本身,但如果需要做 nat 映射到内网设备,这个配置是无法实现的
环境 2:多线路的 nat 端口映射
现在我们要把问题延申到内网的服务器,网络结构仍然不变,默认路由还是在 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
但结果是 A 用户,通过 WAN1 访问映射的服务器是 ok 的,但 WAN2 线路是失败的,之前不是配置了路由器的返程路由了,为什么会失败。这里我们要把到 WAN2 的路径分为两段,如下图
6-7774.jpg
从 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
环境 3, PCC 环境的端口映射
该环境是一个综合题, 我们在做 PCC 负载均衡的时候,如果不涉及端口映射和多线访问路由器本地,我们可忽略返程路由的配置, PCC 环境的路由器多线情况下只是需要访问路由器自身,用环境 1 的配置即可,但如果涉及到 nat 端口映射,那么我们又要重新考虑,考虑两种情况:
1. 被映射主机会匹配到 PCC 负载均衡策略,使用环境 1 的配置
2. 被映射主机不会匹配 PCC 负载均衡策略,使用环境 2 的配置
如果匹配到 PCC 策略,自然映射主机的路由会跟随 PCC 策略走到指定出口, 看看前面章节的 PCC 的策略标记原理。如果没有匹配到 PCC 策略,就会走默认路由出去,这里大家多思考下。
估计很多的看到这里,可能会被绕晕,不同的场景配置方法的确有差别,因为网络需求是在不断的变化的,适应不同的需求,就需要灵活的解决方案,这里我告诉了方法和原理,结果就需要大家去实践,喜欢 RouterOS就说因为解决问题的方法的确很多。


作者:余松

上一页 下一页