当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [分享]介绍一款Linux上的DDNS客户端工具
帖子发表于 : 2008-02-09 1:18 

注册: 2006-12-03 23:00
帖子: 277
送出感谢: 0 次
接收感谢: 0 次
inadyn是一款动态DNS客户端工具,可以按照设定的时间间隔,检查当前的实际IP与域名解析出的IP是否一致,如果发现不一致则更新DNS记录。inadyn-mt则是在inadyn基础上开发的。
支持以下DDNS服务商:
dyndns.org
freedns.afraid.org
zoneedit.com
no-ip.com
3322.org
easydns.com
下载地址: http://sourceforge.net/projects/inadyn-mt/
下载的原码包中,bin/linux/inadyn是一个可运行的二进制文件,无须安装,可直接运行。

1、在上面的服务商中,任选一个,注册一个帐号,添加要进行解析域名(二级域名应该都是免费的)。
2、配置inadyn
inadyn的配置可以在命令行中以参数的方式指定,也可以定义为一个配置文件。默认的配置文件为/etc/inadyn.conf。以下是我的配置(有删减):
代码:
# Basic configuration file for inadyn
#
# /etc/inadyn.conf
# 调试用,置为非0值,输出更多信息。
#verbose 5
# 代理服务器设定,如果你那里需要设定代理服务器的话,请改成你的代理服务器。
#proxy_server 127.0.0.1:8118
# 用来获取当前IP地址的HTTP访问地址,该地址返回的内容中包含有当前公网IP
# 这里即使你在路由器后面,也可以获得真正的公网地址。
ip_server_name ip.discoveryvip.com:80 /ip.asp
#更新地址的间隔时间,时间单位为秒。
update_period_sec 120
#你注册的用户名、登录口令
username <YourAccountName>
password <YourPassword>
#指定使用的DDNS服务商,不同的服务商有不同的标识,可以在inadyn --help中找到。
#我使用的是freedns.afraid.org
dyndns_system default@freedns.afraid.org
#要映射到本机的域名,我使用的是二级域名,也可以用一级域名,如果你有的话。
#可以是多个,也就是说指定的这些域名的DNS记录都要被更新为当前IP
#alias <YourDomainName>
alias hong.mooo.com
#指定的一个日志文件位置,要注意该文件的访问权限。
log_file /var/log/inadyn.log

dyndns_system用来标识不同的服务器,形式为ID@serverName。
可用的有:
dyndns.org: dyndns@dyndns.org OR statdns@dyndns.org OR customdns@dyndns.org.
freedns.afraid.org: default@freedns.afraid.org
zoneedit.com: default@zoneedit.com
no-ip.com: default@no-ip.com
easydns.com: default@easydns.com
3322.org: dyndns@3322.org

username、password为在服务商网站上注册的用户名、登录口令 ,alias指要更新的IP的域名,也就是你在服务商那里添加的域名,只有DDNS服务商允许,可以有多个域名指向同一个IP。
ip_server_name,多数情况下也可以不指定,但是默认的那些在我这里都不能用,没有办法只好换成上面的那个了。

3、以上配置完成后,在终端里输入:

代码:
~/inadyn-mt$bin/linux/inadyn &

正常情况下,应该是没有问题的。如果你是这样的话,那恭喜你成功了。

而我这里就不幸运了,日志里显示更新IP总是不成功。
从dyndns.org、到freedns.afraid.org都以失败告终。
沮丧之下,想起还有个GFW,于是加了个proxy_server试试(见上面配置文件中的)。
再一看结果,成功了。
然而,这样的成功,并没有给我带来喜悦,而是悲哀。

立即用nslookup测试了一下,解析成功。
可惜的是,指向的IP不是我的公网IP,而代理服务器的IP。

原来,inadyn获得本地址时,也使用了代理服务器配置,这个结果可不是我们想要的。
幸好有原码,动手改吧!
4、更改inadyn源码,使得获取IP地址时,弃用代理服务器:
为src/dyndns.c添加两个方法:
代码:
RC_TYPE dyn_dns_settingProxy(DYN_DNS_CLIENT *p_self){

    if (strlen(p_self->info.proxy_server_name.name) > 0)

    {

        http_client_set_port(&p_self->http_to_ip_server, p_self->info.proxy_server_name.port);

        http_client_set_remote_name(&p_self->http_to_ip_server, p_self->info.proxy_server_name.name);



        http_client_set_port(&p_self->http_to_dyndns, p_self->info.proxy_server_name.port);

        http_client_set_remote_name(&p_self->http_to_dyndns, p_self->info.proxy_server_name.name);

    }
    return RC_OK;

}
RC_TYPE dyn_dns_noProxy(DYN_DNS_CLIENT *p_self){

        http_client_set_port(&p_self->http_to_ip_server, p_self->info.ip_server_name.port);

        http_client_set_remote_name(&p_self->http_to_ip_server, p_self->info.ip_server_name.name);



        http_client_set_port(&p_self->http_to_dyndns, p_self->info.dyndns_server_name.port);

        http_client_set_remote_name(&p_self->http_to_dyndns, p_self->info.dyndns_server_name.name);   

   return RC_OK;
}

然后,再更改src/dyndns.c中的方法dyn_dns_update_ip(DYN_DNS_CLIENT *p_self)
代码:
RC_TYPE dyn_dns_update_ip(DYN_DNS_CLIENT *p_self)
{

        .... ...
   do{
      ... ...
      /*在获取本机的公网地址时,不使用代理服务器配置*/
      rc = dyn_dns_noProxy(p_self);
      /***********************************************/
      /*ask IP server something so he will respond and give me my IP */
            rc = do_ip_server_transaction(p_self);

      ... ...
      /*在更新DNS记录时,使用代理服务器配置*/
      rc = dyn_dns_settingProxy(p_self);
      /**************************************/
      /*step through aliases list, resolve them and check if they point to my IP*/

      rc = do_check_alias_update_table(p_self);

      ... ...
   }while(0);



   return rc;

}

好了,可以make了。
代码:
~/inadyn-mt$make

生成可运行的二进制文件为 bin/linux/inadyn-advanced,运行该文件后,查看日志显示DNS记录更新成功。
代码:
Fri Feb  8 22:30:06 2008: I:INADYN: Alias 'hong.mooo.com' to IP '123.234.xxx.xxx' updated successfully.


5、后记
在使用dyndns.org时,连公网IP获取阶段也不成功,更不要说去更新DNS记录了,这逼着我去找了个ip_server_name,也就是http://ip.discoveryvip.com/ip.asp,一度还在一个网站上写了个ip.asp,用来获取我的公网IP。在dyndns.org不成功后,我就想试试freedns.afraid.org,却发现只有使用代理才能更新的DNS记录。无奈之下,只好去更改原码,让inadyn只在更新记录时使用代理配置。
事情看上去很简单,却浪费了我一个下午的时间。于是,将过程记在这里,希望能对一些人有帮助。


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-02-09 1:44 

注册: 2006-09-17 21:14
帖子: 90
送出感谢: 0 次
接收感谢: 0 次
http://magicgod.javaeye.com/blog/154601

3322.org更方便,提供了web接口。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-02-09 14:10 
头像

注册: 2006-10-19 14:08
帖子: 416
地址: 西夏
送出感谢: 0 次
接收感谢: 0 次
这是个什么概念呢
3322的域名转向?
花生壳一类?


_________________
学习linux中。。。
http://blog.sina.com.cn/u/1259792077
http://hi.baidu.com/bwchaos
http://bwchaos.yo2.cn


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-02-09 15:14 
头像

注册: 2007-07-07 11:46
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
dyndns....

有很多境外的ddns提供商事被GFW的。包括上面这个。

FxxK 囗囗囗


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-02-09 15:15 
头像

注册: 2007-07-07 11:46
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
呵呵, 我写的#G#F#W#, 变成了"水产"


页首
 用户资料  
 
6 楼 
 文章标题 : Re: [分享]介绍一款Linux上的DDNS客户端工具
帖子发表于 : 2009-02-05 8:43 

注册: 2009-02-05 8:39
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
感谢楼主,提供好东西.实验通过.


页首
 用户资料  
 
7 楼 
 文章标题 : Re: [分享]介绍一款Linux上的DDNS客户端工具
帖子发表于 : 2009-02-05 9:12 
头像

注册: 2007-11-29 9:41
帖子: 8455
送出感谢: 0 次
接收感谢: 0 次
收藏一下


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译