提示: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策略配置后,会导致内网无法互访的问题,请参考