方永、南天紫雲

道亦有道

linuxFreeBSD下的dnspod动态域名客户端
2013年05月31日

單獨寫一篇文章出來,倒是有些沽名釣譽之嫌了。因爲之前的一篇文章已寫明了。無奈當今信息氾濫,深感往往沒有及時發現而造新輪子之痛,遂貿然用此標題。

此種客戶端,其工作過程非常簡單,無非是用URL之參數向dnspod傳遞一個更新的消息罷了。只是客戶端這邊環境複雜,不得不多判斷幾次了。

配置什麼的請參看這篇文章的2012年10月16日更新。

2013年6月8日更新:

完全脫離functions.sh,使用wget。無論是像OpenWrtdd-wrt這类busybox構建的環境,還是Ubuntu這樣的桌面發行版,還是优雅的FreeBSD,都可以暢快地奔跑。

配置文件(/etc/sddns.conf , $HOME/.sddns.conf):

### edit this variable
login_email='[email protected]'
login_password='oooooo'
main_domain='baidu.com'
sub_domain='b'       # b.baidu.com
 
### 
wanip='c.lexun.com/ip'
 
### DO NOT EDIT THIS

2013年8月2日更新

发布0.0.9版本,除了一些逻辑上的改动,主要增加了支持多个子域的功能。

配置文件如下:

login_email='[email protected]'
login_password='123'
main_domain='baidu.com'
sub_domain='a,b,c'
 
wanip='iframe.ip138.com/ic.asp'
 
### DOT NOT MODIFY THE FOLLOWING

一个子域不变, sub_domain='a' ,多个子域用逗号分隔 sub_domain='a,b,c' 。如果子域等配置参数有变化,需删除 ### DOT NOT MODIFY THE FOLLOWING 下所有内容。欢迎反馈问题。

至于动态监视内网网卡地址获得公网IP,可参考的东西如下:

获取eth0网卡IP地址:

ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'

监控网络配置变化:

ip monitor

更多的参考:DDNS 的工作原理及其在 Linux 上的实现

2013年8月7日更新

本次更新主要增加对curlwget的判断,優先用curl,若沒有安裝則使用wget

需要說明的是幾個環境中的使用:

在一般的已安裝curllinux中,需要註釋掉sddns.conf中的 addon_opt 行,即在有 addon_opt 這行前面加 # 號:

#addon_opt='--cacert /etc/ssl/cacert.pem'

而在OpenWrt中,若安裝了curl, addon_opt 這行不能被註釋掉,並且按照此選項指定的路徑增加這個文件, cacert.pem 這個文件在這裏下載。

若沒有curl,使用wget時一般情況下 addon_opt='--no-check-certificate' 這行的註釋要去掉。在OpenWrt中的話不能使用busybox的wget,需 opkg install wget 安裝一下wget。

2014年2月13日更新

  1. 不再使用wget。若系統中沒有安裝curl,會提示並退出。

  2. ip138的wanip是由於多了POST數據而導致獲致公網地址失敗,已修正。

  3. 檢測配置文件的讀權限。

2014年4月21日更新

  1. 配置文件 sddns.conf :首先检测用户目录是否存在 .sddns.conf ,若不存在,用 /etc/sddns.conf ,否则用 ${HOME}/.sddns.conf

  2. 增加 port 模式,读取当前设备的网口IP作为公网IP,并使用API的 value 参数传递。 sddns.conf 如下配置:

 port=eth0
 mode=port

wanip 在 port 模式下不生效,可在 sddns.conf 可删去。另外若 mode 指定为其它值,如 mode=value ,仍会从wan_ip取得公网地址,但会用value参数传递IP。

  1. 发布版本号: 0.0.9-2

2014年5月15日更新

  1. 發佈版本號: 0.0.9-3

  2. 修正多個子域情況下獲取record_id可能出錯的問題。

2015年5月24日更新

最近sddns无法正常更新dnspod的记录,原因如下:

  1. dnspod的api接口强制使用https协议,http访问链接会重定向到https,从而使用http协议且curl没有编译ssl协议的调用出错。

  2. dnspod的接口URL dnsapi.cn的域名证书过期,导致原来用 --cacert 的调用出错。

解决办法:

  1. 若因curl不支持https使用http的调用,需安装支持https的curl。

  2. 更新dnsapi.cn的根证书,已整理,下载链接见下方。

2015年6月25日更新

更新到0.0.9.4,改动如下:

  1. curl使用 -k 参数,忽略https证书验证的问题。所以现在本地没有根证书或dnspod的证书过期,都不会引发错误。

  2. 配置文件取消 mode ,只验证 port ,若设置了 port ,将忽略 wanip

  3. 配置文件增加 refresh 配置参数,若设置为不为零的值,那么每次执行sddns都会向dnspod的接口发起更新的请求。

  4. 配置文件与运行时缓存数据的文件分离,配置文件不再要求写权限,缓存数据文件默认为 /tmp/sddns.cache ,可在配置文件中用 runtime_file 指定。

  5. 增加curl及dnspod接口出错时的错误回显,方便查找原因。

  6. 配置文件中增加dnspod的 token 鉴权方式,token配置参数的格式为 ID,Token , 更多参见dnspod的说明。token鉴权的优先级高于用户名密码。

下載: http://files.vinoca.org/

相關文章:

OpenWrt使用dnspod的动态域名解析(ddns)功能

sddns(dnspod client for OpenWrt)使用说明