robert_cao 发表于 2009-1-3 00:12:36

发一个简单的动态域名更新脚本

本帖最后由 zooyo 于 2009-1-5 09:18 编辑

在论坛潜水N久了,学到不少东西。现在是时候回报论坛了。

最近在搞ROS的动态域名更新,因为很菜,搞了两星期,才弄明白怎么一回事。

现在把脚本放出来,希望新手少走弯路。

说说我的网络环境。我用的是ROS 2.9.27,三条ADSL,同网关,做NTH负载均衡。

首先,要在www.changeip.com上申请一个帐号,收到确认的邮件后激活帐号。

然后在"Add our free domains"里输入你的子域名,并选择一级域名,这里我选择changeip.org。
提醒一下,这里不要搞错了,不要输错到"Add your own domain"里去了,那个域名只有七天的试用期。

下面做的一步,就是确认你的ROS能用DDNS。
到winbox里,IP-Addrss,查看一下拨号得到的IP。

点击"New Terminal",输入:
/tool dns-update name=yourname.changeip.org(你的域名) address=10.10.10.10 key-name=用户名 key=密码

输入回车后,应该没有什么反应。
点击log,应该可以看到“DNS update sucessful”

如果出现connect error或timeout,请检查一下ROS设置和防火墙。



点击system-scheduler,新增一个计划任务,间隔Interval这里我选择00:03:00(每三分钟)更新一次,脚本如下:

#定义changeip的帐号:
:global ddns-user "username"

#定义changeip的密码:
:global ddns-pass "userpassword"

#定义你的二级域名:
:global ddns-host "username.changeip.net"
:global ddns-lastip [:resolve $ddns-host]


#外网网卡的名称,如果是ADSL拨号,就填写PPPOE拨号网卡的名称:
:global ddns-interface "pppoe-out1"


#--------下面的脚本请照抄,不用变。
#定义一个临时变量获取网卡的IP地址,得到的格式是x.x.x.x/32:
:global ddns-tempip [ /ip address get address ]

#因为上面的IP格式是x.x.x.x/32,所以要变成x.x.x.x:
:global ddns-ip [:pick $ddns-tempip 0 [:find $ddns-tempip "/"] ]

:if ($ddns-ip != $ddns-lastip) do={
/tool dns-update name=$ddns-host address=$ddns-ip key-name=$ddns-user key=$ddns-pass
:log info "DDNS: Update sucessful!"
} else={
:log info "DDNS: No change"
}

在天之鸟 发表于 2009-1-3 08:38:46

先谢了,有没有国内的DDNS厂商的脚本呢?

zooyo 发表于 2009-1-3 10:01:37

那要等ROS和国内的DDNS合作了先。

robert_cao 发表于 2009-1-3 14:54:04

3322的DDNS更新我也做出来了,不过有点麻烦,可能很多人不愿去做。

zooyo 发表于 2009-1-3 19:32:12

说说你的方法呢

robert_cao 发表于 2009-1-3 21:00:26

本帖最后由 robert_cao 于 2009-1-3 21:05 编辑

根据hcb前辈的提示做成的,原贴见下面连接:
http://bbs.router.net.cn/thread-27033-1-2.html

不过我觉得他的方法麻烦了一点,我改了一种更简单的方法来做。
首先要用一张linux的livecd光盘启动进入linux,再把那些文件放入ROS中,再改一下属性为可执行。

详细的教程等忙完了最近的事后再发出来,请大家耐心等一下。

zooyo 发表于 2009-1-3 23:23:06

鼓励大家原创,谢谢对论坛的支持。

georgetan 发表于 2009-1-4 00:33:32

看了不顶不行哪。呵呵。。我要问一下我没搞过ddns所以不太清楚。。因为我最近才搞ROS的。 而且没你那样的真实环境..所以我要问一下你 : $ ddns-lastip 这个从那里来的。是系统本身就存在的了吗。。? 我看到别人那里的是 :local dnsip(相当于你的ddns-lastip) [:resolve ($domain)]
就是这一点我看到有点模糊。。请斑主说一下。以解决我的疑问?谢谢。。对了。你说还有你的那个3322的域名你也做了。 拿出来大家看看嘛。。!! 呵呵。。。

robert_cao 发表于 2009-1-4 21:34:17

8# georgetan

sorry,少了脚本里少了一句:
:global ddns-lastip [:resolve $ddns-host]

请zooyo兄帮忙修改一下贴子,加在这句话之后,现在我已经不能修改了:
#--------下面的脚本请照抄,不用变。
:global ddns-lastip [:resolve $ddns-host]

georgetan很细心,谢谢。
我的做法很简单。ddns-lastip就是现有DDNS的IP,可以用[:resolve hostname]获得。ddns-ip就是拨号所得到的IP。它们两个比较,如果一致就不用更新DDNS,如果不一致就更新DDNS。

至于3322的DDNS,因为是用linux做出来的,还没有把图片存下来,近期还不能上传,请georgetan耐心等一下。

brqtpt007 发表于 2010-8-28 09:33:59

记录一下

peckpock 发表于 2010-8-28 11:30:10

我的DDNS~3.30~
页: [1]
查看完整版本: 发一个简单的动态域名更新脚本