|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
来了论坛几个星期了,学到了不少东西,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 编辑 ] |
|