【RouterOS】ADSL多线详解,无脚本更新IP,无脚本断线自动切换

【RouterOS】ADSL 多线详解,无脚本更新 IP,无脚本断线自动切换 前言:当你手里面有多条 ADSL 的时候,你会如何去利用他们呢?同时,怎么最大化利用他 们呢?今天我们就来说说这个话题。 说到多线策略,就需要提及到两个概念,一个是负载均衡一个是带宽叠加。就我个人理解, 负载均衡是在多个人用有限的几条线时,如何使这几条线的利用率都最大化。比如我有 A、 B、C、D 四条线,在做负载均衡以前,可能 A、B 是满负荷工作,而 C、D 是空的;做了负载 均衡以后,A、B、C、D 都有流量,而不会出现一个压的喘不过气,一个没事做的情况了。 带宽叠加是在一个人用多条线的时候, 能将多条线的带宽加起来, 从而达到提高下载速度或 减少网页打开的时间。 在 ROS 中,以该路由器为中心,可以分为上下两部分,下面一部分是内网限速(最典型的就 是 DSCP Over HTB),这里不做讨论,如有需要以后分析;另一部分就是 ADSL 向上的那一 部分,下面我就以 ADSL 这部分的 NTH 均衡来做下实例,希望抛砖引玉,希望更好的策略能 够提供给有需要的读者。 在设置 ADSL 多线的时候,你将可能会遇到以下问题: 1、你可能没有四张网卡,需要用到 Vlan 交换机; 这个需要你的交换机支持 802.1Q,所需要拨号的四个交换机端口(也就是连着四个 ADSL 猫 的端口) 都设置成 access 模式, vlanID 分别是 10、 20、 30、 (当然, 40 其他的数字也可以) 。 连接 RouterOS 外线网卡的端口设置成 trunk 模式,并且允许以上 vlan 通过,在 routeros 的 wan 口建立 4 个 vlan,vlanID 分别为 10、20、30、40(需要与交换机上的对应),这样 就保证的了多个猫之间不会互相干扰,但是都可以和 routeros 上的虚拟 vlan 接口通讯。 1. /interface vlan 2. add arp=enabled vlan-id=10 3. add arp=enabled vlan-id=20 4. add arp=enabled vlan-id=30 5. add arp=enabled vlan-id=40

disabled=no interface=wan mtu=1500 name=vlan10 disabled=no interface=wan mtu=1500 name=vlan20 disabled=no interface=wan mtu=1500 name=vlan30 disabled=no interface=wan mtu=1500 name=vlan40

复制代码 2、ADSL 无法拨上号,因为用来拨号的 mac 都一样; 如果你的 vlan 都是附着在 wan 口上面的,因此所有 vlan 虚拟接口的 MAC 地址都是同一个, 因此电信局端检测到两个相同的 mac 在尝试用两个不同的账号同时拨号的时候就会断掉其 中一个,这也是为什么有的无法同时拨号的原因。 解决办法就是通过添加桥即 bridge,我感觉添加图片太麻烦,给出个脚本吧: 1. /interface bridge 2. add name=bridge10 admin-mac=11:11:11:11:11:11 disabled=no 3. add name=bridge20 admin-mac=22:22:22:22:22:22 disabled=no

4. add name=bridge30 admin-mac=33:33:33:33:33:33 disabled=no 5. add name=bridge40 admin-mac=44:44:44:44:44:44 disabled=no 6. /interface bridge port 7. add bridge=bridge10 interface=vlan10 disabled=no 8. add bridge=bridge20 interface=vlan20 disabled=no 9. add bridge=bridge30 interface=vlan30 disabled=no 10. add bridge=bridge40 interface=vlan40 disabled=no 复制代码 这样,设置拨号的时候,选择 interface 为 bridge10- bridge40,而不是 vlan10-vlan40, 这样子的话,拨号就不会存在 mac 地址冲突而无法拨号的情况了。 3、你可能不会写脚本来动态更新路由的网关,即 ADSL 的 IP; 因为 ADSL 是动态拨号的,貌似电信设置的为每两天断一次,然后拨号又获得一个新的 IP 地址,那样话网关也变了,如果我们用脚本来监测的话,未免有些浪费资源。其实只需要改 变 pppoe 拨号的 profile 就可以将动态 IP 当静态来用。 首先需要建立四个 ppp profiles: 1. /ppp profile 2. add change-tcp-mss=default comment="" name=ppp1 3. remote-address=1.1.1.1 use-compression=default use-encryption=default \ 4. use-vj-compression=default 5. add change-tcp-mss=default comment="" name=ppp2 6. remote-address=2.2.2.2 use-compression=default use-encryption=default \ 7. use-vj-compression=default 8. add change-tcp-mss=default comment="" name=ppp3 9. remote-address=3.3.3.3 use-compression=default use-encryption=default \ 10. use-vj-compression=default 11. add change-tcp-mss=default comment="" name=ppp4 12. remote-address=4.4.4.4 use-compression=default use-encryption=default \ 13. use-vj-compression=default

only-one=default \

only-one=default \

only-one=default \

only-one=default \

复制代码 在设置 pppoe 拨号的时候, profile 不要选择 default, 而是选择 ppp1-ppp4。 然后我们 ADSL 的网关就可以变成 1.1.1.1,2.2.2.2,3.3.3.3 和 4.4.4.4 了。 在建立 NAT 的时候,只需要将伪装内网地址,action 选为 masquerade 即可。 1. /ip firewall nat 2. add action=masquerade chain=srcnat comment="" disabled=no src-address=192.168.0.0/24

复制代码 4、你可能不会标记,不明白 NTH 是什么; 以下脚本的含义为当建立一个新连接的时候,标记为 1,在建立一条的时候标记为 2,一直 到 4,然后回到 1,以此反复(1 2 3 4)(1 2 3 4) (1 2 3 4)(1 2 3 4)…… 注意,我这里用的是连接,而不是数据包,passthrough 全部是 yes,测试的版本为 3.22。 1. /ip firewall mangle 2. add action=mark-connection chain=prerouting connection-state=new disabled=no 3. in-interface=lan new-connection-mark=1 nth=4,1 passthrough=yes 4. add action=mark-routing chain=prerouting comment="" connection-mark=1 \ 5. disabled=no in-interface=lan new-routing-mark=1 passthrough=yes 6. add action=mark-connection chain=prerouting connection-state=new disabled=no 7. in-interface=lan new-connection-mark=2 nth=4,2 passthrough=yes 8. add action=mark-routing chain=prerouting comment="" connection-mark=2 \ 9. disabled=no in-interface=lan new-routing-mark=2 passthrough=yes 10. add action=mark-connection chain=prerouting connection-state=new disabled=no 11. in-interface=lan new-connection-mark=3 nth=4,3 passthrough=yes 12. add action=mark-routing chain=prerouting comment="" connection-mark=3 \ 13. disabled=no in-interface=lan new-routing-mark=3 passthrough=yes 14. add action=mark-connection chain=prerouting connection-state=new disabled=no 15. in-interface=lan new-connection-mark=4 nth=4,4 passthrough=yes 16. add action=mark-routing chain=prerouting comment="" connection-mark=4 \ 17. disabled=no in-interface=lan new-routing-mark=4 passthrough=yes 复制代码 5、最后将标记的内容用到路由策略中去。 以下的路由策略就是按照上面的标记分别走不同的 ADSL 线路。 1. /ip route 2. add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=1.1.1.1 \ 3. routing-mark=1 scope=255 target-scope=10 4. add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=3.3.3.3 \ 5. routing-mark=3 scope=255 target-scope=10 6. add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=2.2.2.2 \

7. routing-mark=2 scope=255 target-scope=10 8. add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=4.4.4.4 \ 9. routing-mark=4 scope=255 target-scope=10 10. add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=\ 11. 1.1.1.1,2.2.2.2,3.3.3.3,4.4.4.4 scope=255 target-scope=10 复制代码 写在后面的话: 1、本文只提供了一些负载均衡的思路,想直接套脚本的可能会让你失望。 2、为什么可以带宽叠加?因为在用迅雷下载或者其他下载工具的时候,通常会发起多个线 程同时下载,每发起的一个连接占用一条线路,这样就可以起到带宽叠加的作用,而直接 IE 右键另存为下载的时候,是由 IE 发起的单线程下载,因此并不会起到叠加的作用。用 IE 打开网页的时候,也并不是只有一个连接,也是有多个连接同时发起的,所以也可以看到有 带宽叠加的效果。 3、为什么其中一条线断了不管,照样可以用?因为根据 TCP 的原理,它是有重传机制的, 如果某一条连接不可用了, 它重传的时候会被自动标记到下一条连接, 而下一条连接不可用 时,再递归到下一条,这样就能保证不会断线,不过会增加一点延时。而对于 UDP 的报文, 是由应用层来控制的,如看在线电影,丢掉一两个包也许没有问题,丢的多了可能会缓冲或 者再发起一条连接这样。不过线路断了,本来就不是好的兆头,断了就应该处理,所以断线 切换始终是一个临时的解决方案。


相关文档

ROS_ADSL断线自动电话报警脚本
多线ADSL拨出动态IP自动负载均衡脚本
两个Windows下自动切换IP小脚本[1]
两个Windows下自动切换IP小脚本
详细分析多ADSL动态IP接入脚本
真正多线ADSL掉线自动修改PCC参数
软路由routerOS IP分流方法
RouterOS上网设置(ADSL+PPPOE详解)
ROS多线ADSL宽带PCC负载智能安装脚本
RouterOS设置实战篇(ADSL拨号和固定IP设置)
电脑版