RouterOS V6 PCC负载均衡

提示:PCC负载均衡在国内要求是相同运营商带宽做叠加,不能做不同运营商的叠加,因为涉及到不同的DNS解析,返回的IP也不同,用电信DNS解析返回的是本区域的电信IP,联通DNS则返回本区域的联通IP,移动同理,跨运营商访问路径延迟也不同,导致访问失败和延迟增大情况。

下面的事例,是一个双线的PCC负载均衡策略事例,这里立两条WAN出口分别是wan1和wan2,网络结构如下:

 

  • ISP1地址200.15.99/24,网关:10.200.15.1;
  • ISP2地址200.100.99/24,网关:10.200.100.2;
  • 内网IP地址192.168.100.1/24;
  • 启用DNS缓存功能,用192.168.100.1作内网DNS解析;

基本配置

首先进入ip address添加相应接口的IP地址:

在ip dns中配置DNS为:61.139.2.69,并启用选择allow-remote-requests,启用dns本地解析。

Mangle标记配置

接下来我们进入ip firewall mangle标记连接和路由,使用per-connection-classifier双向地址进行分类做连接分类标记。一共需要创建4条mangle规则,2条PCC连接标记和2条关联的路由标记。

第一组PCC标记

首先,在prerouting链表,标记第一条PCC连接标记策略,设置src-address=192.168.100.0/24

然后进入advanced菜单下,可以看到per-connection-classifier分类器,选择both-addresses,设置参数为2/0(both-addresses,代表取目标IP和源IP地址的哈希值,2/0意思是,2代表两条线路,那么引入一个除法算式“哈希值/2”余数为0的标记一条线路,余数为1标记第二条),线路数增加就改变除数值,依次类推:

接着,进入extra菜单下,选择dst-address-type=!local,即排除目标是本地地址:

最后,进入action菜单设置action=mark-connection,并取名new-connection-mark=pcc1

紧跟着,添加第一条关联的路由标记,仍然是在perrouting链表添加规则,设置src-address= 192.168.100.0/24,connection-mark=pcc1

设置该规则的action=mark-routing,new-routing-mark=route1

第一组线路的PCC规则设置完成

第二组PCC标记

双线的per-connection-classifier分类是第一条线为2/0,第二条为2/1,第二条规则也是类似方式添加,只是创建PCC策略时,设置2/1,继续创建第二组的pcc连接标记,修改new-connection-mark为pcc2,以及new-routing-mark为route2

创建关联的路由标记规则:

最后添加完成如下:

下面命令配置,第一条线路的连接标记取名为pcc1,并从连接里提取路由标记名位route1,设置:per-connection-classifier=both-addresses:2/0。

/ip firewall mangle

add action=mark-connection chain=prerouting comment=”” disabled=no

    src-address=192.168.100.0/24 new-connection-mark=pcc1 passthrough=yes

    per-connection-classifier=both-addresses:2/0

add action=mark-routing chain=prerouting comment=”” connection-mark=pcc1

    disabled=no src-address=192.168.100.0/24 new-routing-mark=route1 passthrough=yes

第二条线路的连接标记取名为pcc2,并从连接里提取路由标记名位route2,设置:per-connection-classifier=both-addresses:2/1。

/ip firewall mangle

add action=mark-connection chain=prerouting comment=”” disabled=no

    src-address=192.168.100.0/24 new-connection-mark=pcc2 passthrough=yes

    per-connection-classifier=both-addresses:2/1

add action=mark-routing chain=prerouting comment=”” connection-mark=pcc2

    disabled=no src-address=192.168.100.0/24 new-routing-mark=route2 passthrough=yes

返程路由设置

定义IP数据报从那个接口进入,就按原路从那个接口回去,即保证每个外网口的数据能得到正确的路由。

/ ip firewall mangle

add chain=input in-interface=wan1 action=mark-connection new-connection-mark=pcc1

add chain=input in-interface=wan2 action=mark-connection new-connection-mark=pcc2

标记完进入接口的连接后,将这些连接接指定到相应的路由标记上:

add chain=output connection-mark=pcc1 action=mark-routing new-routing-mark=route1    

add chain=output connection-mark=pcc2 action=mark-routing new-routing-mark=route2

路由配置

配置完标记路由后,我们进入ip route配置路由,首先设置负载均衡的标记路由,首先设置第一条线路的路由标记,设置routing-mark=route1:

设置第二条线路的路由标记,设置routing-mark=route2:

配置默认网关,默认网关的distance设置为1,并设置check-gateway=ping,通过ping监测网关状态,注意默认路由是RouterOS路由器自身的出口路由,之前配置的routing-mark是对路由器下用户的策略,和RouterOS路由器没有关系:

备份网关的distance设置为2,并设置check-gateway=ping,通过ping监测网关状态:

配置完成后的路由标如下图:

注意:如果是PPPoE拨号方式,gateway参数可以选择pppoe-out接口作为网关

配置nat

最后配置nat转换规则,进入ip firewall nat中配置action=masquerade,分别对2条线路做伪装:

/ip firewall nat

add action=masquerade chain=srcnat out-interface=wan1

add action=masquerade chain=srcnat out-interface=wan2

如果内网有多个IP地址段,以上PCC策略配置后,会导致内网无法互访的问题,请参考

https://blog.tonnp.com/2022/routeros-celueluyou-nwhfsx-pcc/

发表评论