[分享]介绍一款Linux上的DDNS客户端工具

上网、浏览、聊天、下载等
回复
qdzheng
帖子: 277
注册时间: 2006-12-03 23:00

[分享]介绍一款Linux上的DDNS客户端工具

#1

帖子 qdzheng » 2008-02-09 1:18

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只在更新记录时使用代理配置。
事情看上去很简单,却浪费了我一个下午的时间。于是,将过程记在这里,希望能对一些人有帮助。
magicgod
帖子: 90
注册时间: 2006-09-17 21:14

#2

帖子 magicgod » 2008-02-09 1:44

http://magicgod.javaeye.com/blog/154601

3322.org更方便,提供了web接口。
头像
bwchaos
帖子: 416
注册时间: 2006-10-19 14:08
来自: 西夏

#3

帖子 bwchaos » 2008-02-09 14:10

这是个什么概念呢
3322的域名转向?
花生壳一类?
头像
yenan1001
帖子: 3
注册时间: 2007-07-07 11:46

#4

帖子 yenan1001 » 2008-02-09 15:14

dyndns....

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

FxxK 囗囗囗
头像
yenan1001
帖子: 3
注册时间: 2007-07-07 11:46

#5

帖子 yenan1001 » 2008-02-09 15:15

呵呵, 我写的#G#F#W#, 变成了"水产"
shangnong_2009
帖子: 1
注册时间: 2009-02-05 8:39

Re: [分享]介绍一款Linux上的DDNS客户端工具

#6

帖子 shangnong_2009 » 2009-02-05 8:43

感谢楼主,提供好东西.实验通过.
头像
lerosua
论坛版主
帖子: 8455
注册时间: 2007-11-29 9:41
联系:

Re: [分享]介绍一款Linux上的DDNS客户端工具

#7

帖子 lerosua » 2009-02-05 9:12

收藏一下
回复