Chinaunix首页 | 论坛 | 博客
  • 博客访问: 143288
  • 博文数量: 123
  • 博客积分: 5770
  • 博客等级: 大校
  • 技术积分: 1240
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-12 16:31
个人简介

闲情逸致 http://EZ38.com

文章分类

全部博文(123)

文章存档

2014年(1)

2010年(122)

我的朋友
最近访客

分类: LINUX

2010-03-05 16:19:06

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

 
以前在我的FC3上一直用上提供的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 '' &> /dev/null &
即可发送http包给3322.org的服务器,更新dns记录

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

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




我是这样解决的:

不用ez-ipupdate;

改用:
fetch ""

username
password
yourhost.ourdomain.ext

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

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

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

支持HTTP和基于SSL的HTTPS协议

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

1. 通过URL认证 (所有的在一行)


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 me@null.net

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 me@null.net

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 me@null.net


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

返回码



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

vi /etc/crontab

加入

*/5 * * * * /usr/local/bin/lynx -mime_header -auth=username:password ""

目的就是每 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 "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 "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服务器页面。



curl -k -u fanjunfeng:? \&set=1\&offline=0 
阅读(2730) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~