找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4222|回复: 3

[脚本] 动态域名用dns-update更新脚本的解释[原创]--脚本的风采

[复制链接]
发表于 2007-1-29 00:17:23 | 显示全部楼层 |阅读模式

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

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

×
routeros2.927环境:
有空来http://j3173980.spaces.live.com个人ros学习空间坐坐!

在看这个之前,首先要感谢网络上的关于用EMAIL来更新域名的方法,同时还要感谢louyc他经过数天研究写出来的这个脚本.
内容注释全为本人自己注释,并进行了一些提议及修改.
首先要建立PPPOE拔号
然后再使用下面这个脚本,在脚本里"UserID","Password","A Record","Domain"都要填写你真实的内容(即到www.changeIP.com上申请的一些内容)

#begin
/system script add name="ddnsInit" source={
#在system script里添加ddnsInit脚本,脚本的内容如下
:log info "ddnsInit: Creating Dynamic DNS update system."
#在log里写入内容
:global u "UserID"
#定义全局变量U,赋值你在www.ChangeIP.com上的用户名
:global p "Password"
#定义全局变量p,赋值你在www.ChangeIP.com上的密码
:global n "A Record"
#定义全局变量n,赋值“*1”(表示编号为1)等。即ddns-host,例如abc.changip.com,这里就写abc
:global z "Domain"
#定义全局变量Z,赋值Domeain,例如abc.changip.com,这里就写changip.com
:global dialInterface [/interface pppoe-client get pppoe-out name]
#定义全局变量dialInerface,赋值PPPoe-out 的名字
:log info ("find dial interface: " . $dialInterface)
#在log里输出dialInterface的值
:global ac [/ip address get [/ip address find interface=$dialInterface] address]
#定义全局变量ac,赋值名字为$dialInterface的IP值
:global a [:pick $ac 0 [:find $ac "/"]]
#定义全局变量a,将变量ac的值,去除子网硽码,并赋值给a;find $ac "/"是输出ac的值里第一个出现“/”的位置。
}
#ddnsInit脚本结束
/system script add name="ddnsSendUpdate" source={
#在系统里添加ddnsSendUpdate脚本,脚本的内容如下(下面这条最重要,是用DNS-UPDATE更用动态IP)
:log info ("ddnsSendUpdate: External IP Address is " . $a)
#在log里写入内容
/tool dns-update name=$n zone=$z address=$a key-name=$u key=$p
#用dns-update命令将前面所赋的值提交到changeIP.如变量u就是在changip上申请的用户名,变量p就是密码,
}
/system script add name="ddnsCheck" source={
#在system script里添加ddnsCheck脚本,脚本的内容如下
:if ([/system scheduler get ddnsJob run-count]<=1) do={
#如果/system/scheduler下的ddnsJob这个脚本的执行次数小于或者等于1的话,则执行/system script 下的ddnsInit和ddnsSendUpdate脚本,并激活/system schedule下的ddnsRetry脚本
/system script run ddnsInit
/system script run ddnsSendUpdate
/system scheduler enable ddnsRetry
}
:global temp $ac
#设置temp为全局变量,内容即现在域名解析出来的IP,并将变量ac的值赋值给temp;这条语句可以使用:global temp [:resolve abc.changeip.net]
:global b [/ip address get [/ip address find interface=$dialInterface] address]
#设置b为全局变量,内容是新的IP,如果上面语句使用了域名解析出来的IP,那么这里就要用下面这条语句来代替global p [:pick [/ip address get [/ip address find interface=$dialInterface] address] 0 [:find [/ip address get [/ip address find interface=$dialInterface] address] ]]目的是为了去除子网硽码
:if ($temp != $b) do={
#如果temp与b不相同,即IP地址不同
:global ac $b
#将变量b的值赋值给变量ac
:global a [:pick $ac 0 [:find $ac "/"]]
#去除ac变量的子网硽码,如果上面使用说明的语句,那么这条语句就可以不要了。
:log info ("ddnsCheck: Found new IP address: " . $a)
#在LOG里输出信息
/system script run ddnsSendUpdate
#运行/system script里的ddnsSendUpdate脚本进行更新动态域名的IP地址
}
}
/system script add name="ddnsReset" source={
#在system script里添加ddnsReset脚本,用于初始化的脚本的内容如下
:if ([/system scheduler find name=ddnsJob]!="") do={
/system scheduler remove ddnsJob
}
#判断system scheduler里有没有ddnsJob这个脚本,如果已有了,就删除他
/system scheduler add name=ddnsJob interval=30s on-event=ddnsCheck
#在system scheduler里添加ddnsJob的脚本,每30秒运行一次/system script里的ddnsCheck脚本
:global u
:global p
:global n
:global z
:global dhcpInterface
:global a
:global ac
:global b
:global temp
#定义全局变量
}
/system script add name="ddnsApp" source={
#在system script里添加ddnsApp脚本,用于判断域名上的IP是不是与本地相同,如果不同就进执行ddnsSendUpdate脚本
:if (([:resolve ($n . "." . $z)]) != $a) do={
/system script run ddnsSendUpdate
}
}
/system scheduler add name=ddnsJob interval=30s on-event=ddnsCheck
#在system scheduler里添加ddnsJob的脚本,每30秒运行一次/system script里的ddnsCheck脚本
/system scheduler add name=ddnsRetry interval=1m on-event=ddnsApp disabled=yes
#在system scheduler里添加ddnsRetry的脚本,每60秒运行一次/system script里的ddnsApp脚本
#end


请注明出处

[ 本帖最后由 cracks 于 2007-11-4 12:46 编辑 ]
routeros
发表于 2007-1-29 10:22:35 | 显示全部楼层
首先感谢技术分享的精神。还有点不明白,为啥你的这个脚本恁复杂?
routeros
回复

使用道具 举报

发表于 2007-2-2 18:56:49 | 显示全部楼层
非常感谢
routeros
回复

使用道具 举报

发表于 2007-11-4 12:46:08 | 显示全部楼层
学习,不会也学
routeros
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 11:17 , Processed in 0.068561 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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