使用RouterOS实现多拨负载均衡
负载均衡
负载平衡(Load balancing)是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。
一般来说,如果运营商不限制多次拨号(例如校园网不限制拨号数),或者多线接入,即可使用多拨技术有效将各个账号的带宽结合起来以提高网络速度。
RouterOS中提供了多种方式进行负载均衡:
ECMP(Equal-Cost Multi-path):ECMP是通过在route列表添加多网关的静态路由,然后由路由协议建立劢态的多线路由。这种负载均衡有个缺点,缺点就是每十分钟内核会重新均衡线路,使一些连接会被指定到其他路线,出现频繁掉线的情况。
NTH:NTH是采用第N次链接的负载均衡,它不仅可以实现基于IP的负载均衡,同时还能实现对端口负载均衡和对nat指定有序的访问。这样基本实现了不掉线的真正负载均衡。但是NTH存在着一个弊端,就是在某些对IP要求严格的网站会反复要求验证。比如,网银。这样我们需要通过策略将一些IP或者端口指定走固定的线路出去,从而避开网站繁琐的验证。
PCC(Per connection classified): PCC是通过判断源地址或者目的地址、源端口或者目的端口对数据进行分类来实现负载均衡,对每个连接进行分类大多保持了连续性,这样大大弥补了NTH 的不足。
RouterOS设置
本文使用RouterOS的vrrp进行单端口三拨,eth-wan1作为wan口,ether2-5为lan口
Interfaces菜单下添加三个vrrp拨号。
Name Interface VRID vrrp1 eth-wan1 1 vrrp2 eth-wan1 2 vrrp3 eth-wan1 3

Interfaces菜单下添加三个PPPOE Client,分别填写User和Password,不要勾选Dial On Demand、Use Peer DNS和Add Default Route。
Name Interfaces pppoe-out1 vrrp1 pppoe-out2 vrrp2 pppoe-out3 vrrp3

在IP->Addresses下设置接口的ip地址。
Interface Address Network eth-wan1 192.168.100.1/24 192.168.100.0 vrrp1 192.168.100.2/24 192.168.100.0 vrrp2 192.168.100.3/24 192.168.100.0 vrrp3 192.168.100.4/24 192.168.100.0

IP->Firewall->Mangle下添加Change MSS标记。

添加三条线路的连接标记和路由标记。PCC设置中,N条线的值分别为N/(0~N-1)。
Chain In. Interface Per Connection Classifier Dst. Address Type Action New Connection Mark prerouting bridge both addresses 3/0 local invert mark connection PCC_1 prerouting bridge both addresses 3/1 local invert mark connection PCC_2 prerouting bridge both addresses 3/2 local invert mark connection PCC_3

Chain In. Interface Connection Mark Action New Routing Mark prerouting bridge PCC_1 mark routing PCC_ROUTE1 prerouting bridge PCC_2 mark routing PCC_ROUTE2 prerouting bridge PCC_3 mark routing PCC_ROUTE3

结果如图:

IP->Routes添加路由。
Gateway Routing Mark pppoe-out1 PCC_ROUTE1 pppoe-out2 PCC_ROUTE2 pppoe-out3 PCC_ROUTE3 
再添加三条空路由
Gateway Distance pppoe-out1 1 pppoe-out2 2 pppoe-out3 3 结果如图:

IP->Firewall->NAT伪装地址。
Chain Out. Interface Action srcnat pppoe-out1 masquerade srcnat pppoe-out2 masquerade srcnat pppoe-out3 masquerade

IP->DNS设置Servers为114.114.114.114,223.5.5.5。勾选Allow Remote Requests。
IP->Pool设置IP地址池。

IP->DHCP Server设置DHCP服务器。

IP->Firewall->Mangle中设置input和output路径。
Chain In. Interface Action New Connection Mark input pppoe-out1 mark connection PCC_1 input pppoe-out2 mark connection PCC_2 input pppoe-out3 mark connection PCC_3

Chain Connection Mark Action New Routing Mark output PCC_1 mark routing PCC_ROUTE1 output PCC_2 mark routing PCC_ROUTE2 output PCC_3 mark routing PCC_ROUTE3

把出入口标记拖到MSS下面。

测试
只有部分支持多线程的下载软件可以同时利用多路速度,例如百度网盘、迅雷等。

可以看到,三条线均达到了我这里的理论带宽(20~30M),叠加后的速度为70M。