找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4343|回复: 5

[策略设置] 电信和网通双线动态网关设置详解!

[复制链接]
发表于 2007-3-7 11:39:35 | 显示全部楼层 |阅读模式

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

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

×
      来了论坛几个星期了,学到了不少东西,ros也给我带来了很大的帮助.吃水不忘打井人,我把我制作"关于电信和网通双线动态网关"的脚本(部分是参照论坛前辈们的代码)和大家一起共享一下,希望大家多多提意见,争取把它做成一个经典的脚本.
      凡是大家提出的修改的好意见,我会把它加入到代码中,并做版本更新.
      目的是为了更多的人,做更好的精品,这个主题永远属于大家,代码归大家所有.

流程:提前在winbox中设置一个marking为double的路由,随便设置,ROS开机执行Script1(定义一个判断网关是否改变的参照网关),每20秒执行Script2用来检查真实的网关是否改变,如果有改变则用真实的网关设置当前负载均衡并把参照网关的值改为当前值.

版本0.0.0,代码如下:

把Script1加入到system的script里面,用New Terminal在system的scheduler中设置"set Script1 start-time=startup",目的是让脚本1在路由开机时运行一次.
Script1(Define_Globals)
:global old-ppp-xa-gateway 0.0.0.0
:global old-ppp-cnc-gateway 0.0.0.0


把Script2加入到system的script里面,用New Terminal在system的scheduler中设置"set Script2 interval=00:00:20"目的是让脚本2每20秒运行一次.
Script2(Auto_checking_gateway)
:log info "checking default gateway;"
在log中显示"checking default gateway;",良好的习惯,便于判断脚本是否运行
:local ppp-xa-gateway [/ip address get[/ip address find interface=pppoe-xa] network]
:local ppp-cnc-gateway [/ip address get[/ip address find interface=pppoe-cnc] network]

得到当前的网关,因为是动态的,所以要在这里通过一下,这里在 "ip address" 中找是最明智的,在routes 和interface中找都不是很理想.
:if ([:typeof $ppp-xa-gateway]=nil) do={
:log info ("pppoe-xa not work please check")
:set ppp-xa-gateway 0.0.0.0
}

:if ([:typeof $ppp-cnc-gateway]=nil) do={
:log info ("pppoe-cnc not work please check")
:set ppp-cnc-gateway 0.0.0.0
}

这里 "[:typeof $ppp-xa-gateway]=nil" 是用来判断网络是否连通,如果网络不能连通的话,ppp-xa-gateway变量的值是 "nil",:typeof是用来判断变量类型的一个涵数,2.9的说明中对它讲的很少,如果你的变量值是192.168.0.1的话,那么:typeof后的结果是"ip",其它大家自己试吧!这两句的意思是如果网络没有连通的话,就设置当前的网关值为0.0.0.0
:if(($ppp-cnc-gateway!=$old-ppp-cnc-gateway)||($ppp-xa-gateway!=$old-ppp-xa-gateway)) do={
/ip route set [/ip route find routing-mark=double] gateway=($ppp-xa-gateway . "," . $ppp-cnc-gateway)

这句就简单了,当两条线路,任何一个的当前网关值与旧的值不符的时候,就改为最新的值并做负载均衡.
:global old-ppp-xa-gateway $ppp-xa-gateway
:global old-ppp-cnc-gateway $ppp-cnc-gateway
}
当两条线路,任何一个的当前网关值与旧的值不符的时候,就把新网关的值传递给旧的网关变量.


好吧,我把斜体全正过来好了!


[ 本帖最后由 yaoyao117 于 2007-3-8 08:57 编辑 ]
routeros
发表于 2007-3-7 13:03:35 | 显示全部楼层
大哥。你的字看不清哦。。打几个字就这么困难吗?
routeros
回复

使用道具 举报

发表于 2007-3-7 15:37:11 | 显示全部楼层
顶一下
写的不错
就是字体设置的有问题
routeros
回复

使用道具 举报

发表于 2007-3-8 17:11:02 | 显示全部楼层
应该不是,我在有的论坛发贴,即使把字号调到最小也比别人正常的大。
routeros
回复

使用道具 举报

发表于 2007-6-14 22:13:26 | 显示全部楼层
把Script1加入到system的script里面,用New Terminal在system的scheduler中设置"set Script1 start-time=startup",目的是让脚本1在路由开机时运行一次.
Script1(Define_Globals)
:global old-ppp-xa-gateway 0.0.0.0
:global old-ppp-cnc-gateway 0.0.0.0

把Script2加入到system的script里面,用New Terminal在system的scheduler中设置"set Script2 interval=00:00:20"目的是让脚本2每20秒运行一次.
Script2(Auto_checking_gateway)
:log info "checking default gateway;"
在log中显示"checking default gateway;",良好的习惯,便于判断脚本是否运行
:local ppp-xa-gateway [/ip address get[/ip address find interface=pppoe-xa] network]
:local ppp-cnc-gateway [/ip address get[/ip address find interface=pppoe-cnc] network]
得到当前的网关,因为是动态的,所以要在这里通过一下,这里在 "ip address" 中找是最明智的,在routes 和interface中找都不是很理想.
:if ([:typeof $ppp-xa-gateway]=nil) do={
:log info ("pppoe-xa not work please check")
:set ppp-xa-gateway 0.0.0.0
}
:if ([:typeof $ppp-cnc-gateway]=nil) do={
:log info ("pppoe-cnc not work please check")
:set ppp-cnc-gateway 0.0.0.0
}
这里 "[:typeof $ppp-xa-gateway]=nil" 是用来判断网络是否连通,如果网络不能连通的话,ppp-xa-gateway变量的值是 "nil",:typeof是用来判断变量类型的一个涵数,2.9的说明中对它讲的很少,如果你的变量值是192.168.0.1的话,那么:typeof后的结果是"ip",其它大家自己试吧!这两句的意思是如果网络没有连通的话,就设置当前的网关值为0.0.0.0
:if(($ppp-cnc-gateway!=$old-ppp-cnc-gateway)||($ppp-xa-gateway!=$old-ppp-xa-gateway)) do={
/ip route set [/ip route find routing-mark=double] gateway=($ppp-xa-gateway . "," . $ppp-cnc-gateway)
这句就简单了,当两条线路,任何一个的当前网关值与旧的值不符的时候,就改为最新的值并做负载均衡.
:global old-ppp-xa-gateway $ppp-xa-gateway
:global old-ppp-cnc-gateway $ppp-cnc-gateway
}
当两条线路,任何一个的当前网关值与旧的值不符的时候,就把新网关的值传递给旧的网关变量.

好吧,我把斜体全正过来好了!


[ 本帖最后由 火飞寒 于 2007-6-14 22:14 编辑 ]
routeros
回复

使用道具 举报

发表于 2007-6-14 22:42:53 | 显示全部楼层
要是有一条网线断了呢?
routeros
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-16 12:12 , Processed in 0.067227 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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