#Dnspod-DDNS-with-BashShell#利用DNSPOD-API进行 linux 动态IP解析/shell版本

玩机经验 来源:零散坑 1年前 (2018-09-22) 270次浏览 0个评论 扫描二维码
文章目录[隐藏]

之前一篇是 php 版本的 DNSPOD 的 API 实现ddns动态解析,但是试用以后每次都提示 record_id 错误,没办法只好另寻办法,下面这个shell版本的脚本可以自动获取 record_id,设置简单,可以一试。

使用方法

本脚本分为两个版本,一个是获取自己外网 ip 的版本dnspod_ddns.sh,一个是直接获取自己网卡设备上的 ip 的版本dnspod_ddns_line.sh(对于多拨或者路由器网关用户适用)。

获取 api 的 ID 和 Token

api 的 ID 和 Token 可以在 DNSPOD 后台获取:
创建一个 Token,依次点击 用户中心 -> 安全设置 -> API Token:

点击创建一个 Token,输入 Token 名称即可,名称仅用来标记 Token,方便用户管理 Token ,不参与鉴权。

点击 “确定” 之后,Token 创建成功,会弹出如下提示框:

参数说明

dnspod_ddns.sh

在脚本开头#CONF START 到#CONF END 之间为用户所需填写的参数:

参数填写说明
API_ID在个人中心后台的安全设置里面获取 ID
API_Token在个人中心后台的安全设置里面获取 Token
domain你所注册的主域名,例如baidu.comqq.comchina.edu.cnexample.com
host主机记录名,例如www.baidu.com的主机记录名是 www,image.www.weibo.com的主机记录是image.wwwhome.example.com的主机记录名是home
Email填写你的邮箱。(根据 API 规范要求)
CHECKURL用于检查自己的外网 IP 是什么的网址,注释掉该参数会跳过所有检查(仅验证域名记录是否存在)直接执行更新记录(会导致高频率调用更新);建议的备选 CHECKURL:http://ip.3322.org http://myip.ipip.net http://ip.xdty.org
OUT指定使用某个网卡设备进行联网通信(默认被注释掉)。注意,一些系统的负载均衡功能可能会导致该参数无效。推荐使用ip a命令查看网卡设备名称。

部署方法

把如上所述的参数填好即可。
本脚本没有自带循环,因为 linux 平台几乎都有 Crontab(计划任务),利用计划任务可以实现开机启动、循环执行脚本、并设定循环频率而无需常驻后台。

命令参考
假设脚本已经填写好参数并加了可执行权限(chmod +x ./dnspod_ddns.sh),并位于/root/dnspod_ddns.sh:
新建计划任务输入crontab -e   按 a 进入编辑模式,输入
*/1 * * * * /root/dnspod_ddns.sh &> /dev/null
意思是每隔一分钟执行/root/dnspod_ddns.sh 并屏蔽输出日志。当然,如果你需要记录日志可以直接重定向至保存路径。 然后按 Esc,输入:wq 回车保存退出即可。
更多关于 Crontab 的使用方法此处不再详述。
另外对于一些带有 Web 管理界面嵌入式系统(比如 openwrt),有图形化的计划任务菜单管理,可以直接把脚本粘贴进去。

工作过程

1、用CHECKURL检查自己的外网 ip 和本地解析记录是否相同,相同则退出;
2、使用 API 获取域名在 Dnspod 平台的 ip 记录,如果 ip 记录和本地解析记录或者外网解析记录相同则退出;获取记录异常也会退出并返回错误信息(例如域名不存在 No Record);
3、执行 DNS 更新,并返回执行结果。

注意事项

本脚本不会自动创建子域名,请务必先到后台添加一个随意的子域名 A 记录,否则会提示 No Record 如果你看到API usage is limited的报错,是由于调用 API 频率过高账号被冻结(一小时后解封)

多网卡版

仅说明与上面脚本参数不同的地方。
因该脚本是用于获取网卡设备 ip,所以没有CHECKURL参数。

参数说明

dnspod_ddns_line.sh

参数填写说明
DEV从网卡设备(例如 eht0)上获取 ip,并与 DNS 记录比对更新。推荐使用ip a命令ifconfig命令查看网卡设备名称。

日志参考

现象说明
[DNS IP]为 Get Domain Failed本地 DNS 解析出现问题(断网、DNS 服务器不工作、域名记录错误)
[URL IP]为空访问 CHECKURL 失败,检查网络访问 CHECKURL 是否正常
No Record不存在该域名或者该主机记录(本脚本不会自动创建子域名,请务必先到后台添加一个随意的子域名 A 记录)
API usage is limited调用 API 频率过高账号被冻结(一小时后解封),正常使用一般不会出现
[URL IP]或者[DEV IP] 和[DNS IP]不一样但和[API IP]一样DNS 有缓存,DNS 记录是已经更新,属正常现象,会提示 IP SAME IN API,SKIP UPDATE.自动忽略

关于

项目地址:


如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:#Dnspod-DDNS-with-BashShell#利用 DNSPOD-API 进行 linux 动态 IP 解析/shell 版本
本文短地址:
喜欢 (2)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址