找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 15281|回复: 28

[策略设置] 【RouterOS】ADSL多线详解,无脚本更新IP,无脚本断线自动切换

  [复制链接]
发表于 2010-9-13 14:14:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 mching 于 2010-9-13 14:25 编辑

本文转自mching08的空间http://mching08.com,作者michael。
原文链接http://mching08.com/routeros/201009196.html

前言:当你手里面有多条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 disabled=no interface=wan mtu=1500 name=vlan10 vlan-id=10
  3. add arp=enabled disabled=no interface=wan mtu=1500 name=vlan20 vlan-id=20
  4. add arp=enabled disabled=no interface=wan mtu=1500 name=vlan30 vlan-id=30
  5. add arp=enabled disabled=no interface=wan mtu=1500 name=vlan40 vlan-id=40
复制代码
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 only-one=default \
  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 only-one=default \
  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 only-one=default \
  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 only-one=default \
  12. remote-address=4.4.4.4 use-compression=default use-encryption=default \
  13. use-vj-compression=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的报文,是由应用层来控制的,如看在线电影,丢掉一两个包也许没有问题,丢的多了可能会缓冲或者再发起一条连接这样。不过线路断了,本来就不是好的兆头,断了就应该处理,所以断线切换始终是一个临时的解决方案。
routeros
发表于 2010-9-13 15:02:27 | 显示全部楼层
断线了游戏也不掉线么,太强了
routeros
回复

使用道具 举报

发表于 2010-9-13 16:11:19 | 显示全部楼层
没有NAT规则?
routeros
回复

使用道具 举报

 楼主| 发表于 2010-9-13 16:25:17 | 显示全部楼层
回复 2# WGHBOY

游戏你连上以后正在玩的时候这条线断了,是有可能断的。也有可能不会断,这要看对方服务器设计的系统是如何操作的了。

如果对方的游戏服务器有再生机制,比如qq游戏的时候大家都知道,如果断线了你迅速连上来的时候还是可以玩的~~
routeros
回复

使用道具 举报

 楼主| 发表于 2010-9-13 16:26:03 | 显示全部楼层


有nat规则啊,就是
  1. /ip firewall nat
  2. add action=masquerade chain=srcnat comment="" disabled=no src-address=192.168.0.0/24
复制代码
只需要这一条就足够了。
routeros
回复

使用道具 举报

发表于 2010-9-13 16:35:26 | 显示全部楼层
标记下,
routeros
回复

使用道具 举报

发表于 2010-9-13 16:45:20 | 显示全部楼层
VLAN这部份没有看明白是如何设置的;
routeros
回复

使用道具 举报

 楼主| 发表于 2010-9-13 17:07:37 | 显示全部楼层
VLAN这部份没有看明白是如何设置的;
luiwendi0329 发表于 2010-9-13 16:45


各种交换机的型号设置是不一样的~~
routeros
回复

使用道具 举报

发表于 2010-9-13 17:18:26 | 显示全部楼层
连接RouterOS外线网卡的端口设置成trunk模式,并且允许以上vlan通过

你说的TRUNK模式在那里,最好上个图哟
routeros
回复

使用道具 举报

 楼主| 发表于 2010-9-13 17:44:41 | 显示全部楼层
连接RouterOS外线网卡的端口设置成trunk模式,并且允许以上vlan通过

你说的TRUNK模式在那里,最好上个图 ...
luiwendi0329 发表于 2010-9-13 17:18


这个是在交换机上设置的,不是routeros上面的!
routeros
回复

使用道具 举报

发表于 2010-9-24 13:07:03 | 显示全部楼层
很细心,很实用...这种分享精神无价..........
routeros
回复

使用道具 举报

发表于 2010-9-24 14:30:24 | 显示全部楼层
本文转自mching08的空间写在后面的话:
1、本文只提供了一些负载均衡的思路,想直接套脚本的可能会让你失望 ...
mching 发表于 2010-9-13 14:14


2.x 的做法 3.x不用这样做了
routeros
回复

使用道具 举报

发表于 2010-9-24 16:28:09 | 显示全部楼层
学习VLAN这个做法
routeros
回复

使用道具 举报

发表于 2010-9-24 17:06:08 | 显示全部楼层
学习了啊。
routeros
回复

使用道具 举报

发表于 2010-12-11 14:27:29 | 显示全部楼层
帮顶一下。
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-5-3 12:58 , Processed in 0.084726 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表