动态域名用dns-update更新脚本的解释[原创]--脚本的风采
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
#定义全局变量dialInerface,赋值PPPoe-out 的名字
:log info ("find dial interface: " . $dialInterface)
#在log里输出dialInterface的值
:global ac 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 (<=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 address]
#设置b为全局变量,内容是新的IP,如果上面语句使用了域名解析出来的IP,那么这里就要用下面这条语句来代替global p [:pick address] 0 [:find 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 (!="") 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 编辑 ] 首先感谢技术分享的精神。还有点不明白,为啥你的这个脚本恁复杂? :D 非常感谢 学习,不会也学
页:
[1]