支持以下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.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;
}
代码: 全选
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;
}
代码: 全选
~/inadyn-mt$make
代码: 全选
Fri Feb 8 22:30:06 2008: I:INADYN: Alias 'hong.mooo.com' to IP '123.234.xxx.xxx' updated successfully.
在使用dyndns.org时,连公网IP获取阶段也不成功,更不要说去更新DNS记录了,这逼着我去找了个ip_server_name,也就是http://ip.discoveryvip.com/ip.asp,一度还在一个网站上写了个ip.asp,用来获取我的公网IP。在dyndns.org不成功后,我就想试试freedns.afraid.org,却发现只有使用代理才能更新的DNS记录。无奈之下,只好去更改原码,让inadyn只在更新记录时使用代理配置。
事情看上去很简单,却浪费了我一个下午的时间。于是,将过程记在这里,希望能对一些人有帮助。