什么是NTH?
我们从所有的连接中,提取每次新建立的连接connection=new,并对他们做nth的标记,将这些连接中相关的奇数(odd)包和偶数(even)包分离开,并走两个不同的网关(GatewayA与GatewayB)出去。这样就能保持每次连接的持续性。
实验环境
虚拟设备:
1. RouterOS 2.9.27 三台
2. winxpXP 一台
虚拟机网络连接:
RouterOS - 1 Ether1桥接 物理主机 IP 192.168.0.164/24
RouterOS – 1 Ether2 分配给 VMnet2 IP 1.0.0.1/24
RouterOS – 2 Ether1桥接 物理主机 IP192.168.0.165/24
RouterOS – 2 Ether2 分配给 VMnet3 IP 11.0.0.1/24
RouterOS – 3 Ether1 分配给 VMnet4 IP 172.16.0.254/24
RouterOS – 3 Ether2 分配给 VMnet2 IP PPPOE自动获取
RouterOS – 3 Ether3 分配给 VMnet3 IP 11.0.0.50/24
WINXP 网卡1 分配给 VMnet4 ip pppoe 自动获取
实验前已配置好的环境
1. 确认各个接口已PING通后删除ROUTEROS - 3接口配置,未实现NTH负载均衡。
2. ROUTEROS – 1 和 ROUTEROS - 3 的PPPOE拨号服务器已配置好
3. ROUTEROS – 1 和 ROUTEROS – 2的NAT 已经配置完,可以让WINXP 通过 ROUTEROS -3 Ether3 的固定IP访问外部真实局域网。
配置过程(以下操作均在ROUTEROS – 3进行)
1. 配置pppoe-client 在Ether2上,给Ether1和Ether3配置IP,(以下所有注释不要更改为其他的)。
2. 标记奇偶连接数据包(NTH)。因为是双线,所以标记两条。再加一条
3. 配置NAT。1是随便设~TO-ADDRESS用脚本自动修改,2就不能乱设了~要设置固定接口的IP,添加3这条是单线时 用到
4. 添加静态路由表。//3是用于单线,双线时自动停用。1、2做路由分发,这个不用选标记的路由包,MARK空
5. 添加balance脚本,PPPOE拨号掉线IP、网关、NAT自动修改。
:local assign-address
:local new-address
:local status
:local adckip
:local new-gateway
:local x
:set x 1
#如果 從1加1到等于变量x时 则做,同时将X赋值给i
:for i from=1 to=$x do={
#查找接口名称=pppoe-out加i的接口是否激活,比如i循环到1那么就是pppoe-out1.将结果赋给
:set status [/interface get [/interface find name=("pppoe-out" . $i)] running]
#如果status激活=真,则做
:if ($status=true) do={
#设置new-address,从IP地址列表里查找dynamic等于yes的接口,并取得该接口的IP地址
:set new-address [/ip address get [/ip address find dynamic=yes interface=("pppoe-out" . $i)] address]
# 将取得的IP地址,取总字符长度再减3
:set new-address [:pick $new-address 0 ([:len $new-address] -3)]
# //查找非动态接口地址,将它赋值给assign-address
: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)]
#取拨号的动态网关,可以将pppoe-out1改为(“pppoe-out”.$i)
:set new-gateway [/ip address get [/ip address find dynamic=yes interface=pppoe-out1] network]
#取netwatch状态检查PPPOE拨号的host参数
:set adckip [/tool netwatch get [/tool netwatch find comment=$i] host]
#//如果pppoe-out加$i的$assign-address静态地址不等于 $new-address,则做,将地址\子网\广播地址都设置为$new-address取得的地址.
: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 fir nat set [/ip fir nat find comment=$i] to-addresses=$new-address
}
#如果新的网关不等于$adckip则将PPPOE拨号链路状态检查IP设为新的
:if ($new-gateway != $adckip) do={/tool netwatch set [/tool netwatch find comment=$i] host=$new-gateway]
}
}
}
6. 添加光纤当线脚本fdown,自动停用NTH负载所需的参数
:local new-gateway
:set new-gateway [/ ip address get [/ip address find dynamic=yes interface=pppoe-out1] network]
#固定IP的链路当掉后将网关默认路由的下一跳的网关设为PPPOE获取的网关
/ip route set [/ip route find comment=3] gateway=$new-gateway
/ip route enable [/ip route find comment=3]
/ip route dis [/ip route find comment=1]
/ip route dis [/ip route find comment=2]
/ip firewall nat enable [/ip firewall nat find comment=3]
/ip firewall nat dis [/ip firewall nat find comment=1]
/ip firewall nat dis [/ip firewall nat find comment=2]
7. 添加ADSL当线脚本adsldown,ADSL掉线后将默认路由下一跳网关设为固定IP的网关
/ip route set [/ip route find comment=3] gateway=11.0.0.1
/ip route enable [/ip route find comment=3]
/ip route dis [/ip route find comment=1]
/ip route dis [/ip route find comment=2]
/ip firewall nat enable [/ip firewall nat find comment=3]
/ip firewall nat dis [/ip firewall nat find comment=1]
/ip firewall nat dis[/ip firewall nat find comment=2]
8..添加双线判断正常脚本linkup。即两条线路UP的时候开启NTH负载均衡。
:global a
:global b
#取当前两条链路状态
:set a [/tool netwatch get [/tool netwatch find comment=1] status]
:set b [/tool netwatch get [/tool netwatch find host=11.0.0.1] status]
#如果两条线路都为UP,则启用NTH负载均衡设置。
:if (($a="up") && ($b="up")) do={
/ip route dis [/ip route find comment=3]
/ip route ena [/ip route find comment=1]
/ip route ena [/ip route find comment=2]
/ip firewall nat dis [/ip firewall nat find comment=3]
/ip firewall nat ena [/ip firewall nat find comment=1]
/ip firewall nat ena [/ip firewall nat find comment=2]}
9.为balance脚本设置定时运行
10.设置定时检查两条线路的状态,UP或down则触发事件,运行脚本。//
加注释1,一定要加不然不会自动更改host,因为这条是ADSL的线路。
好设置完毕,还要运行下脚本,初始化,先fdown,再linkup,OK了,现在测试nth负载均衡,,一个失误~,哈哈没改成1
郁闷,可能是论坛没开,所以打不开网页
得了~看流量,刚刚的配置生效需要一点时间,
测试下载文件,我这个XP的拨号是限制最大4M下载流量的,等我开HTTP服务器先~
看到了把,ether2是ADSL,ether3是固定IP因为XP的拨号帐号是最大下载4M,所以两条线下载的不会超4M
好了,现在测试其中掉线切换为单线,先停掉1.0.0.1的路由器!,当掉后自动停用了路由表。只起用3
打开论坛试试
ping 真实局域网的IP 192.168.0.158OK
再开启1.0.0.1
等下UP了之后就会启用负载均衡,稍等~看!
关掉固定IP的路由器11.0.0.1稍等
启用单线了~再开启11.0.0.1测试负载均衡!稍等UP了
测试负载均衡!成功!演示完毕~
由于比较忙,没时间做详细的演示,如果有不懂的地方可以加QQ交流 9113800 banchen
本文来源:未知 作者:佚名