Linux 纯 Shell 实现 DNSPod 动态域名

开发背景:

公司有台嵌入式拨号上网设备,内置 busybox 和完整 wget 命令(支持https协议),但没有 curl、python、ruby、php 等扩展工具可用。网上现有基于DNSPod实现的Linux脚本无法在该设备上运行,于是写了个Shell版动态域名客户端(ddnspod-shell),现在发布出来希望能给需要的朋友带来一些方便。

项目源码:

https://github.com/rehiy/dnspod-shell

DnsPod 官方文档

https://docs.dnspod.cn/api/update-dns-records/

功能介绍:

  • 优雅的函数封装,灵活的更新策略
  • 基于DNSPod最新用户API实现动态域名客户端
  • 支持基于系统计划任务实现更新,防止脚本意外终止
  • 可运行于多数类 unix 系统中,包括部分嵌入式小型系统
  • 依赖 ip/sed/wget 命令,wget 也可使用 curl 替代

常见问题:

record line invailid 将脚本保存为utf-8格式即可
record id invalid 检查账号权限、是否冲突等

文章作者: 若海; 原文链接: https://www.rehiy.com/post/62/; 转载需声明来自技术写真 - 若海

已有 95 条评论

  1. wztx

    你好,请问DNSPOD一个域最多支持动态解析几个域名?

    1. 理论上没有限制

      1. wztx

        不能正常更新的LOG
        Jan 18 03:30:25 admin: 开始更新dnspod 的域名IP指向
        Jan 18 03:30:26 admin: 目前的IP: 106.88.200.95
        Jan 18 03:30:26 admin: 原来的IP: 125.84.13.184
        Jan 18 03:30:27 admin: 提交的IP:

        能正常更新的LOG
        Jan 18 03:31:11 admin: 开始更新dnspod 的域名IP指向
        Jan 18 03:31:11 admin: 目前的IP: 125.84.15.126
        Jan 18 03:31:11 admin: 原来的IP: 14.105.89.225
        Jan 18 03:31:14 admin: 125.84.15.126
        Jan 18 03:31:14 admin: 提交的IP:

      2. wztx

        好像是超过三个就不行了,我五台设备,最多成功三个

  2. edward

    你好 我重新编写了一个适合自己小米路由的版本 但是不知道为什么传上去会显示record line invalid
    已经尝试过utf-8的问题了
    链接: http://pan.baidu.com/s/1sjDU1Wx 密码: m64a

  3. jenkins

    出错信息Record id invalid 怎么回事呢?

    1. 可能会账号没有权限,冲突

  4. 要更新主域名,直接把lab换成空字符串就可以

    1. 雷迅

      root@OpenWrt:~# dnspod
      nslookup: can't resolve '.leixunpc.com': Name or service not known
      hostIP: 113.225.147.137
      lastIP: 114.114.114.114 puic1.114ds.com
      postRS: 113.225.147.137
      hostIP: 113.225.147.137
      lastIP: 113.225.147.137

      主域名 换成@ 和空格都有这样的提示

      1. 去掉.试试,因为这个脚本使用的第三方解析服务造成的。

  5. 娃娃脾气

    如何设置顶级域名?使用“@”好像提示未找到。

  6. 上面所示的项目源码没有执行循环、开机启动等行为吧?
    原谅我不想学shell

    1. 亲,没有的。。

  7. astankvai

    要么就出现wget: illegal option -- -
    BusyBox V1.12.1
    Usage: wget [-csq] [-O file] [-Y on/off] [-P DIR] [-U agent] url

    ...

    1. 这是 wget 不支持 https 协议造成的,换用 curl 或者编译独立的 wget 可以解决的

  8. astankvai

    我的出现 line 68: syntax error: Unterminated quoted string.请问这个怎么解?确定代码没有写错。

    1. 修改下文件的编码,或者把中文去掉,或者就是把文件改成使用linux换行

  9. Jack Sun

    我的也出现"postRS: Record line invalid" 报错, 请问是怎么回事? 谢谢

    1. 经测试,record line invailid是脚本里中文字符导致的,将脚本保存为utf-8格式即可

  10. dhf

    赞!何不将代码丢到github

添加新评论