提示: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地址168.100.1/24;
  • 启用DNS缓存功能,用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策略配置后,会导致内网无法互访的问题,请参考策略路由导致内网段互访失效(包括PCC负载均衡)