标题: 巧用curl代替ez-ipupdate更新动态dns[zt]

标题: 巧用curl代替ez-ipupdate更新动态dns
以前在我的FC3上一直用 www.3322.org上提供的ez-ipupdate做动态dns,解析家里因拨号不断改变的机器ip地址,没什么问题
但自从我昨天把机器升到FC6后,问题来了
一开始也没注意,后来想从公司远程登录主机发现死活登不上,dns解析出的地址不对
郁闷了一天,回到家发现貌似FC6新的LIBC和ez-ipupdate用的老的有些不兼容,运行失败

于是从3322.org上下了源码本来想自己编译,没想到居然编译也通不过
再仔细一看代码,原来这东西用的http协议,极其简单,curl即可代替

高兴之余,特此把经验拿来给大家分享:

ez-ipupdate被我放在/etc/ppp/ip-up.local里执行,每次PPPoE拨号上去就自动更新dns:
代码:/usr/local/bin/ez-ipupdate -i ppp0 -h myhost.3322.org -S qdns -u user:pass现在只要改成
代码:curl -su user:pass 'http://members.3322.org/dyndns/update?system=dyndns&hostname=myhost.3322.org' &> /dev/null &即可发送http包给3322.org的服务器,更新dns记录

-s是silence,不产生进度条等没用的输出
-u是http认证用户名密码
&> /dev/null &把所有输出扔掉并在后台运行,这样不浪费启动时间
url里的值都不要改,否则服务器可能会不认,除了最后一个hostname=myhost.3322.org改成自己的

其实wget也可以用来做这个,我已经用了curl就不高兴研究了,有兴趣的可以看看man wget,命令格式应该差不多

http://www.linuxsir.org/bbs/showthread.php?t=291951


我是这样解决的:

不用ez-ipupdate;

改用:
fetch "http://username:[email protected]/dyndns/update?system=dyndns&hostname=yourhost.ourdomain.ext&myip=ipaddress&wildcard=OFF"

username
password
yourhost.ourdomain.ext

这里不要忘记改成自己的啊!

再把这条命令写进cron,定时执行就行了。

希网动态域名——相关协议 Client的请求应该使用HTTP/1.0以上协议,Server的相应一定为HTTP/1.0

支持HTTP和基于SSL的HTTPS协议

需要事务处理,Client发送完整的请求,并且解析服务器端的相应,保证域名更新的成功

1. 通过URL认证 (所有的在一行)
http://username:[email protected]/dyndns/update?system=dyndns&hostname=yourhost.ourdomain.ext&myip=ipaddress&wildcard=OFF
&mx=mail.exchanger.ext&backmx=NO&offline=NO

2. HTTP GET 请求
1) dyndns, statdns
GET /dyndns/update?system=statdns&hostname=yourhost.ourdomain.ext
&myip=ipaddress&wildcard=OFF&mx=mail.exchanger.ext&backmx=NO
&offline=NO HTTP/1.1
Host: members.3322.org
Authorization: Basic username:pass
(note: username:pass must be encoded in base64)
User-Agent: myclient/1.0 [email protected]

2) webhop
GET /dyndns/update?system=webhop&hostname=yourhost.ourdomain.ext&url=dest_url
&title=cloak_title&cloak=cloak HTTP/1.1
Host: members.3322.org
Authorization: Basic username:pass
(note: username:pass must be encoded in base64)
User-Agent: myclient/1.0 [email protected]

3) subdom
GET /dyndns/update?system=subdom&hostname=yourhost.ourdomain.ext&ip1=address1&ip2=address2 HTTP/1.1
Host: members.3322.org
Authorization: Basic username:pass
(note: username:pass must be encoded in base64)
User-Agent: myclient/1.0 [email protected]


username:password System:All Optional: No
用户名和密码用来登录

system=dyndns|statdns|webhop|subdom System:All Optional: Yes
只能使用二者之一,否则出错。如果没有这个参数,缺省是dyndns
(webhop, subdomain只能使用web更新,而用户自己的域名(3322.org的custom方式)
可以归并到现有的四种方式)

hostname=host.3322.org System:All Optional: No
需要更新的域名

myip=ipaddr System:All Optional: Yes
域名对应的IP。如果不指定,则服务器将选择最佳的IP(一些Proxy会传递客户端的IP,
这会被服务器检测到)。如果传递的地址格式错误,则忽略这个参数,而用服务器检测
到的IP。

wildcard=ON|OFF System:DynDNS, StatDNS Optional: Yes
是否支持通配符,缺省为OFF。ON意为着 *.host.3322.org等同于host.3322.org

mx=mailexchanger System:DynDNS, StatDNS Optional: Yes
指明Mail eXchanger。必须能够解析到一个IP,否则被忽略。如果不提供该参数或者
不能解析到一个IP,mx记录会被删除。

backmx=YES|NO System:DynDNS, StatDNS Optional: Yes
指明前面的mx参数会被设置成备份邮件服务器,即邮件会首先发送到你的机器上,如果
不成功,才会发送到备份邮件服务器上。

offline=YES|NO System:DynDNS Optional: Yes
使域名暂时失效。

url=dest_url System:WebHop Optional: No
webhop指向的URL地址

cloak=YES|NO System:WebHop Optional: Yes
指明webhop时是否使用frame,将转向的url包装起来。缺省是YES

title=cloak_title System:WebHop Optional: Yes
cloak时,frame的标题。缺省是 "Bentium DynDns System"

ip1=address1 System:SubDom Optional: YES
第一个域名服务器的IP地址,必须是正确的IP。如果不指定,则服务器将选择最佳的IP
(一些Proxy会传递客户端的IP, 这会被服务器检测到)。如果传递的地址格式错误,
则忽略这个参数,而用服务器检测到的IP。

ip2=address2 System:SubDom Optional: YES
第二个域名服务器的IP地址,必须是正确的IP

返回码
http://www.3322.org/dyndnspage/codes.html
http://www.3322.org/dyndnspage/protocol.html

安装成功之后编辑 /etc/crontab 文件

vi /etc/crontab

加入

*/5 * * * * /usr/local/bin/lynx -mime_header -auth=username:password "http://www.3322.org/dyndns/update?system=dyndns&hostname=your.3322.org"

目的就是每 5 分钟自动更新一次 ip,username 与 password
分别为你在 3322.org 所注册的用户名与密码,your.3322.org
就是你所注册的 3322.org 域名。


标题: 用lynx实现3322动态域名指向[原创]
其实这是个老话题了,重复一下

适用于类Unix平台,已经在Gentoo Linux和FreeBSD上测试通过。

软件需求:
1、lynx
2、cron (各种cron都可以,此处以linux vixie-cron 和 freebsd 默认cron为例)
3、一个用来测试的web服务器,如apache。
4、系统能访问internet,也能被外网访问(不考虑防火墙)。

详细步骤:
1、建立一个文本文件,如3322.org,输入以下东西
代码:*/5 * * * * /PATH/TO/lynx -mime_header -auth=ACC:PASS "http://www.3322.org/dyndns/update?system=dyndns&hostname=MYDOMAIN.3322.org&mx=MYMAIL.3322.org"红色文字表示需要根据你的实际情况设定。描述如下:
a、5表示每隔5分钟更新一下
b、/PATH/TO/lynx 指 lynx的位置,FreeBSD下常在 /usr/local/bin/lynx
c、ACC:PASS 指你在3322.org上注册的用户名和密码。
d、MYDOMAIN指你在3322.org上设立的域名记录(域名)。
e、MYMAIL指你在3322.org上设置的mx邮件记录。

2、运行crontab,载入cron信息:
代码:$ crontab 3322.org
$ crontab -l //查看下是否已经载入,若有以下内容,说明成功。
*/5 * * * * /PATH/TO/lynx -mime_header -auth=ACC:PASS "http://www.3322.org/dyndns/update?system=dyndns&hostname=MYDOMAIN.3322.org&mx=MYMAIL.3322.org"如果要清空cron table ,可以用 crontab -r 命令。

3、过5分钟后,测试
代码:$ ping MYDOMAIN.3322.org //若能正确显示ip,则成功
$ host -t mx MYDOMAIN.3322.org //若有类似如下显示,则成功
MYDOMAIN.3322.org mail is handled by 10 MYMAIL.3322.org.4、用浏览器测试你的MYDOMAIN.3322.org指向的web服务器页面。

你可能感兴趣的:(#网络相关)