如今ROS在网吧当中的应用普及程度非常高,原因就是用这软件做个路由太便宜了,我曾经在心里盘算过,如果还能到全新P3的主板和CPU,那么配一台全新超稳定的路由仅需硬件成本300元之内,而加上普遍应用的多条ADSL叠加后总成本不过1千元之内,而这仅1千元的成本却能让一家小型网吧拥有10M以上的宽带网络,网费却只有光纤的1/4左右。我想,就是凭着在各方面都能省的特点,软路由风靡中国网吧行业是理所应当的事。
曾经有一个在县城里开了一家70台机器网吧的朋友问过我,他说:“现在我们县城拉一条4M光纤每月要交2千以上,现在我们这ADSL拉一条100多元,你能不能帮我做一个8条ADSL叠加的方法啊,这样算来每条ADSL有2M左右的下行和512K上行,8条加起来就有十几M下载和4M的上传,应该足够我的网吧用了,而且这样每个月费用才1千元以内,如果能做就太适合网吧了。”听了朋友说完,我发现已经有很多人在开发这种自制的8WAN口软件路由器了。当然,如果做到8条线叠加不太容易,因为一般很少有主板能插8块网卡的,但是5-6条线应该问题不大。
以下我将以实例操作为大家详解如何在ROS2.9版本当中配置多线软路由,也许城市当中的大型网吧根本用不到这些技术,但在一些乡镇当中,尤其是网管朋友自己回家开一间小网吧却用处很大,而且目前这种技术还是很值钱的,听说人做一台这样的路由器单软件成本就要1千以上,以下以双线为例,配置整体过程然后再解释其中道理,自然就可以实现“多线均衡负载”这种路由技术了。另外讲一些题外话,目前配置多WAN软路由很流行,学会了这个可以算得上一门手艺,到哪都有饭吃了。
平台介绍:搭建软路由首先得用大家都熟悉的ROS2.9,是基于LINUX平台的路由软件,开源而且目前在网吧业主应用普遍,用这个软件也有另一个好处就是方便学习,因为用的人多,所以当你遇到问题时可以求助的途径就多。安装软件和配置以及连接WINBOX过程在这里就省略了,总之在这些都完成后才可以进行。硬件方面,板载网卡加上两块PCI网卡,装完驱动后再进系统最好,其中板载做内网网关,两块PCI网卡接ADSL。环境介绍到此,当然ROS一些路由表和其他基本配置都要做好才能开始以下关于ADSL线路均衡负载的配置过程。
原理介绍:如何实现多线ADSL均衡负载然后实现多条ADSL网速叠加,全靠ROS灵活的策略路由来实现,实现的原理就是在每一次数据连接过程中,将每个数据包分别打上一个标记,例如我们有2条ADSL,那就将数据包分别打上“1”和“2”的标记,然后将数据放入各地的池内,在路由过程中每个池走自
己的线路,这样就可以实现负载均衡了,也就是你一个人上网,却同时使用两条ADSL线路,因为你的数据是分别走两条线的。明白了这个道理就可以明白如果接3条线或更多的线,就把数据包分别打上“1、2、3……”等标记,然后让他们分别从不同的线路出去,这样就可以实现多线负载均衡,等于每位用户都可以享受到3根线的速度,从而实现高速网络。
以下配置过程分为WINBOX设置过程和命令行设置过程,两部分是相同的设置,之所以分为两部分同时讲解就是想让大家摆脱WINBOX,因为命令行设置才能做出更复杂更加适合自己的路由策略。
第一步设置PPPOE拔号:外网(WAN1,WAN2)两个网卡添加pppoe client第一个命名为ADSL1 并且加上拔号的用户名和密码,第二条命名为ADSL2 同时加上拔号的用户名和密码,这里要注意把Add Default Route 去掉. 如图,就是填好ADSL账号和密码,如下图:
以下是用命令行配置ADSL帐号和密码的过程,相对来说比较易懂:
#设置ADSL拔号
/ interface pppoe-client add name="pppoe-out1" interface=wan1 user="11111" password="111111" add-default-route=no disabled=no
/ interface pppoe-client enable pppoe-out1
/ interface pppoe-client add name="pppoe-out2" interface=wan2 user="22222" password="22222" add-default-route=no disabled=no
/ interface pppoe-client enable pppoe-out2
/ interface pppoe-client add name="pppoe-out3" interface=wan3 user="33333" password="333333" add-default-route=no disabled=no
/ interface pppoe-client enable pppoe-out3
/ interface pppoe-client add name="pppoe-out4" interface=wan4 user="44444" password="44444" add-default-route=no disabled=no
/ interface pppoe-client enable pppoe-out4
第二步标记连接和路由:配置MANGLE来实现为每个数据包做标记,并配置相应的路由信息,这里的路由信息指的就是“池”,然后在后面的路由表当中实现将“池”中的包分配到相应的线路当中。下图两个ADSL线路的配置过程:
以下是命令行下配置过程,详细解释第一条就是每隔一个包建立一个新的会话,并用“1”做标记,因此所有属于同一会话的连续的数据包将被放到标记为1的连接中,注意,我们将这些数据包传递给第二条和第三条规则(passthrough=yes)。第二条规则在prerouting链表将所有标记属于“1”的连接放入routing mark的“1”标记中,并将以上连接在此停止处理。而第二条规则当中则是每隔一个包建立一个新的会话,并用“1”做标记,其他相就都处理成以2为标记的连接和池中,就这样将所有包连续不断的处理并做标记为路由做好前期准备。
/ ip firewall mangle
add chain=prerouting in-interface=lan connection-state=new nth=3,4,0 \
action=mark-connection new-connection-mark=1 passthrough=yes
add c
hain=prerouting in-interface=lan connection-mark=1 action=mark-routing \
new-routing-mark=1 passthrough=no
/ ip firewall mangle
add chain=prerouting in-interface=Local connection-state=new nth=3,4,1 \
action=mark-connection new-connection-mark=2 passthrough=yes
add chain=prerouting in-interface=Local connection-mark=2 action=mark-routing \
new-routing-mark=2 passthrough=no
add chain=prerouting in-interface=Local connection-state=new nth=3,4,2 \
action=mark-connection new-connection-mark=3 passthrough=yes
add chain=prerouting in-interface=Local connection-mark=1 action=mark-routing \
new-routing-mark=3 passthrough=no
/ ip firewall mangle
add chain=prerouting in-interface=Local connection-state=new nth=3,4,3 \
action=mark-connection new-connection-mark=4 passthrough=yes
add chain=prerouting in-interface=Local connection-mark=4 action=mark-routing \
new-routing-mark=4 passthrough=no
第三步配置网关规则:因为是2条ADSL,所以要加2条规则,分别对应两个pppoe获得的地址,如果你们自己设就要先获得地址然后在这里设好规则,特点是address=network=broadcast,这样设置的目的是让ros能够根据这里所设的网关分别路由,并且在自动修改IP和网关的脚本当中还可以实现断线重连,所以在这里规则很重要,另外此步骤不能在命令行下实现,。下图为例:
以下是以命令行模式配置网关规则:
/ ip address
add address=192.168.1.1/24 network=192.168.1.0 broadcast=192.168.1.255 interface=lan
add address=116.21.32.241/24 network=218.17.119.1 broadcast=0.0.0.0 interface= pppoe-out1
add address=121.32.177.37/24 network=218.17.119.1 broadcast=0.0.0.0 interface= pppoe-out2
add address=117.21.32.241/24 network=218.17.119.1 broadcast=0.0.0.0 interface= pppoe-out3
add address=122.32.177.37/24 network=218.17.119.1 broadcast=0.0.0.0 interface= pppoe-out4
第四步配置srcnat(ip伪装):这步的意思就是将已经做完标记的数据包进行IP头修改,这样可以保证返回的数据包每个数据包可以到自己的线路,如果不做那就是只有出没有进了,因为包回来后不到自己的路由了。
以下为命令行模式下的配置:
/ ip firewall nat
add chain=srcnat connection-mark=1 action=src-nat to-addresses=116.21.32.241 \
to-ports=0-65535
add chain=srcnat connection-mark=2 action=src-nat to-addresses=121.32.177.37 \
to-ports=0-65535
add chain=srcnat connection-mark=3 action=src-nat to-addresses=117.21.32.241 \
to-ports=0-65535
add chain=srcnat connection-mark=4 action=src-nat to-addresses=122.32.177.37 \
to-ports=0-65535
第五步配置路由规则:经过前四步的详细配置完成后,现在就是要实现将“1”和“2”两个池中的数据包分别走不同的路线了,就是路由策略的意思,我们的策略是被标记为“1”的数据用116.21.32.241为
网关,同样,被标记为“2”的数据从121.32.177.37这个网关出去,为了防止有些包没有打上标记,所以再加上一条没有标记的包从121.32.177.37这个网关出去,也就是说121.32.177.37为默认网关。配置
完成后如下图:
以下为命令行模式下的配置:
/ ip route
add dst-address=0.0.0.0/0 gateway=116.21.32.241 scope=255 target-scope=10 routing-mark=1
add dst-address=0.0.0.0/0 gateway=121.32.177.37 scope=255 target-scope=10 routing-mark=2
add dst-address=0.0.0.0/0 gateway=117.21.32.241 scope=255 target-scope=10 routing-mark=3
add dst-address=0.0.0.0/0 gateway=122.32.177.37 scope=255 target-scope=10 routing-mark=4
/ ip route
add dst-address=0.0.0.0/0 gateway=122.32.177.37 scope=255 target-scope=10
第六步填加防掉线脚步:脚本是ROS官方提供的,虽然短短几行代码,但具体是怎样的工作原理我也实在没弄通,不过好在脚本是通用的,将脚本设置成自动运行就可以了,以下是配置图:
route add命令实例:local assign-address
:local new-address
:local status
:local x
:set x 4
:for i from=1 to=$x do={
:set status [/interface get [/interface find name=("pppoe-out" . $i)] running]
:if ($status=true) do={
:set new-address [/ip address get [/ip address find dynamic=yes interface=("pppoe-out" . $i)] address]
:set new-address [:pick $new-address 0 ([:len $new-address] -3)]
:set assign-address [/ip address get [/ip address find dynamic=no interface=("pppoe-out" . $i)] address]
:set assign-address [:pick $assign-address 0 ([:len $assign-address] -3)]
:if ($assign-address != $new-address) do={ /ip address set [/ip address find comment=$i] address=$new-address network=$new-address broadcast=$new-address
/ip route set [/ip route find comment=$i] gateway=$new-address
/ip route set [/ip route find comment="3"] gateway=$new-address
/ip fir nat set [/ip fir nat find comment=$i] to-addresses=$new-address
}
}
}
至此,所有配置工作完成,由于ROS基础配置过程较多,所以在这里只针对ADSL配置和负载平衡进行了详细的介绍,由于实际当中配置多条ADSL多为重复过程,所以在这里只以两条线为例,如果配置多条ADSL来实现叠加网速,还要注意一些细节,可以说按照以上流程,再详细掌握了以下细节后就可以应用自如了。
按照以上标准流程,三条或者多条线路的负载均衡则需要修改第二步标记连接和路由中的参数,例如三条线就要加三个标记,而重要的是NTH参数,比如是三条线路则要在规则当中加入三条,分别将NTH值修改为: nth=2,3,0. 2,3,1. 2,3,2,如果是4条线那么规就要设置为4条,NTH的值为:nth=3,4,0. 3,4,1.3,4,2 3,4,3,至于为什么要这样设置具体NTH值的意义可以查阅相关资料。其他方面就是网关、IP伪装、路由规则等,都要按多条线的模式来设置
,这样就可以完成多线均衡负载了,经过实测最多可以完成8条线均衡负载,网速可以达到12M以上。
看到这里,希望大家应该明白一点,ROS命令行模式在设置复杂的路由当中要比图形界面设置简单一些,尤其是在设置多条线路的时候,只需要修改相应命令值就可以了。另外以上配置如果细细钻研完全可以研制出自己的成品路由器,目前很多业内人士并不愿意贡献出详细的配置教程原因就在于此,这个配置方案可以真正实现多条ADSL线路同时工作,即使只有一个人在上网,所以也可以解决ADSL常掉线不适合网吧的问题,在此我将详细过程加以解释,目的是为了让更多的网管朋友们学习用的,希望大家不要借此卖钱,应该抱着交流学习的态度帮助更多网管朋友提升技术水平。
很多人都不明白这些脚本的意思,我在这解释一下。这样可以方便其它人的修改。
:local assign-address #设本地变量名
:local new-address #设本地变量名
:local status #设本地变量名
:local x #设本地变量名
:set x 2 #给变量赋值为2
:for i from=1 to=$x do={ #做x的循环x的数为多少就做多少次循环 $为变量调用符
:set status [/interface get [/interface find name=("pppoe-out" . $i)] running] #获取PPPOE-out $i是否为运行状态 每运行一次循环,i的值加1,现在i的值应为1,所以就是做PPPOE-out1的运行状态的获取。
:if ($status=true) do={ #前一句得到了PPPOE-out1的状态情况,这句就是对其状态的处理,如果运行状态为运行,那么就去行do={里的命令,如果为false的直接结束。
:set new-address [/ip address get [/ip address find dynamic=yes interface=("pppoe-out" . $i)] address] #获取 PPPOE-out $1的动态IP地址。这个IP是带有掩码的
:set new-address [:pick $new-address 0 ([:len $new-address] -3)] #去除掉刚才得到的IP的掩码。得到一个纯IP地址。
:set assign-address [/ip address get [/ip address find dynamic=no interface=("pppoe-out" . $i)] address] #获取pppoe-out的静态IP。
:set assign-address [:pick $assign-address 0 ([:len $assign-address] -3)] 去除静态IP的掩码。
:if ($assign-address != $new-address) do={ #对比PPPOE-out的静态IP和动态IP是否一样。一样就不修改。直接到结束
/ip address set [/ip address find comment=$i] address=$new-address network=$new-address broadcast=$new-address #把动态IP写给静态IP。
/ip route set [/ip route find comment=$i] gateway=$new-address #把动态IP写给标记了的网关 用comment号进行区别,第一次运行这条语句时$i为1所以就是修改comment=1的那个网关。
/ip route set [/ip route find comment="3"] gateway=$new-address #这句话是我在原作者的基础上增加的,目的是将没
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论