| RouterOS多ADSL拨号分流配置经典实例 |
| 作者:Javanew 文章来源:www.routerbbs.com, 点击数: 更新时间:2008-8-12 9:38:01 |
|
|
|
|
|
|
#------------------------------------------------------------------- # 多ADSL拨号分流自动 设置网关及 路由 适用于3.7(2.9按备注说明修改一处) # 注意:可选一个ADSL自动添加路由,以备本地服务使用 # 要达到分流效果,还需要配置IP->Firewall->Mangle->prerouting # 和IP->Routes->Rules,具体脚本稍微放出 # Javanew 2008.4.29 # 本文源自 www.routerbbs.com,转帖请注明出处!
#------------------------------------------------------------------- /interface pppoe-client; #设置未找到的变量 :global noFinded [:find "" "*"]; #是否存在ADSL掉线 :global isDisconnected false; #网关 :global gateway ""; #路由标记 :global routingMark ""; #查找所有ADSL拨号设备 :foreach pppoeClient in [find] do={ #获取ADSL名称 :local pppoeClientName [get $pppoeClient name]; #获取ADSL网卡接口 :local pppoeInterface [get $pppoeClient interface]; #获取网卡接口备注,不能备注在ADSL下,否则会重新拨号 :local interfaceComment [/interface get [/interface find name=$pppoeInterface] comment]; #获取ADSL是否被禁用 :local pppoeDisable [get $pppoeClient disable]; #如果ADSL是允许的,2.9.*系列用“no”,3.*系列用false :if ($pppoeDisable=false) do={ #监听ADSL设备 monitor $pppoeClientName once do={ #查找网卡接口备注中是否存在"-"符号 :local findIndex [:find $interfaceComment "-"]; #设置历史状态 :local oldStatus ""; #设置历史IP :local oldIP ""; #设置ADSL拨号的当前公网IP地址及掩码 :local ipAddress ""; #设置ADSL拨号的当前公网IP地址 :local newIP ""; #如果网卡接口备注中存在"-"符号 :if ($findIndex!=$noFinded) do={ #获取历史状态 :set oldStatus [:pick $interfaceComment 0 $findIndex]; #获取历史IP :set oldIP [:pick $interfaceComment ($findIndex+1) [:len $interfaceComment]]; } else={ #获取历史状态 :set oldStatus $interfaceComment; } #如果ADSL拨号成功 :if ($status="connected") do={ #获取ADSL拨号的当前公网IP地址及掩码 :set ipAddress [/ip address get [/ip address find interface=$pppoeClientName dynamic=yes] address]; #从ADSL拨号的当前公网IP地址及掩码中提取IP地址部分 :set newIP [:pick $ipAddress 0 [:find $ipAddress "/"]]; #设置网关 :set gateway $newIP; #设置路由标记 :set routingMark ($pppoeClientName . "_Routing_Mark"); } else={ #设置有ADSL掉线 :set isDisconnected true; } #如果ADSL当前状态和历史状态不相同 或 ADSL当前状态和历史状态为连接状态且当前IP和历史IP不相同 :if ($status!=$oldStatus||($status="connected"&&$oldStatus="connected"&&$oldIP!=$newIP)) do={ #如果历史状态为在线 :if ($oldStatus="connected") do={ #删除历史IP地址网关 /ip address remove ($pppoeClientName . "_IP_Address"); #删除历史路由标记 /ip route remove ($pppoeClientName . "_Route"); } #如果ADSL当前状态为在线 :if ($status="connected") do={ #增加IP地址做网关 /ip address add comment=($pppoeClientName . "_IP_Address") address=$ipAddress network=$newIP broadcast=$newIP interface=$pppoeClientName disabled=no; #增加路由标记指向新网关 /ip route add comment=($pppoeClientName . "_Route") gateway=$newIP routing-mark=($pppoeClientName . "_Routing_Mark") disabled=no; #设置ADSL网卡接口备注为“在线-IP地址”,不能备注在ADSL下,否则会重新拨号 /interface set [/interface find name=$pppoeInterface] comment=($status . "-" . $newIP); } #如果ADSL当前状态为掉线或正在拨号中 :if ($status="disconnected"||$status="dialing...") do={ #设置ADSL网卡接口备注为掉线或拨号中 /interface set [/interface find name=$pppoeInterface] comment=$status; } } } } else={ #如果ADSL网卡接口备注不为空 :if ($interfaceComment!="") do={ #如果ADSL网卡接口备注中标明为在线 :if ([:find $interfaceComment "connected"]!=$noFinded) do={ #如果存在历史ADSL网关 :if ([/ip address find ($pppoeClientName . "_IP_Address")]!="") do={ #删除历史网关 /ip address remove ($pppoeClientName . "_IP_Address"); } #如果存在历史路由 :if ([/ip route find ($pppoeClientName . "_Route")]!="") do={ #删除历史路由 /ip route remove ($pppoeClientName . "_Route"); } } #清空ADSL网卡接口备注 /interface set [/interface find name=$pppoeInterface] comment=""; } } } #如果有ADSL掉线 :if ($isDisconnected) do={ #设置频率 :local frequency 1000; #循环 :for i from 0 to 5 do={ #按频率报警 :beep length=100ms frequency=$frequency; #频率增加 :set frequency ($frequency+1000); #延时 :delay 100ms; } }
|
| 文章录入:dnbm 责任编辑:dnbm |
|
上一篇文章: RouteOS光纤和ADSL双线备份的实现 下一篇文章: 没有了 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |