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. 长城

    你好。我用的路由器启用 DNSPod 域名解析 然后也添加A套餐了。

     

    A套餐的地址是当前ip然后不能我把路由器解析了。A套餐还是显示我当前地址啊。。。

  2. shit23

    admin@CntR6300V2:/jffs/scripts# ./ddnspod.sh
    Linux
    ddnspod.sh: line 96: command: not found
    ddnspod.sh: line 96: command: not found
    ddnspod.sh: line 96: command: not found
    ddnspod.sh: line 96: command: not found
    ddnspod.sh: line 96: command: not found
    hostIP: 192.168.1.6 192.168.6.1
    lastIP:
    postRS: Record line invalid

    我出现这写问题,我的路由器的上级路由器链接外网

  3. shit

    admin@CntR6300V2:/jffs/scripts# ./ddnspod.sh
    Linux
    ddnspod.sh: line 96: command: not found
    ddnspod.sh: line 96: command: not found
    ddnspod.sh: line 96: command: not found
    ddnspod.sh: line 96: command: not found
    ddnspod.sh: line 96: command: not found
    hostIP: 192.168.1.6 192.168.6.1
    lastIP:
    postRS: Record line invalid

    我出现这写问题,我的路由器的上级路由器链接外网

  4. shit

    admin@CntR6300V2:/jffs/scripts# ./ddnspod.sh
    Linux
    ./ddnspod.sh: line 96: command: not found
    ./ddnspod.sh: line 96: command: not found
    ./ddnspod.sh: line 96: command: not found
    ./ddnspod.sh: line 96: command: not found
    ./ddnspod.sh: line 96: command: not found
    hostIP: 192.168.1.6 192.168.6.1
    lastIP:
    postRS: Record line invalid

    我出现这写问题,我的路由器的上级路由器链接外网

    1. deangelx

      把 ddnspod.sh 的第96行的

      DIR=$(dirname -- "$(rreadlink "$0")")

      改为 DIR=$(dirname -- "$0") 就可以了

  5. copperfiled

    如何把脚本改为直接读取wan口的ip,而不是在网站获取外网ip,因为路由有开ss,经常把ss的外网识别到域名上去,而不是真正的wan口自己拨号的外网ip。

    1. 可以使用 ifconfig 来读取wan口ip,然后使用grep取出来。

  6. dts

    2.dnspod.com没有提供可视化的token生成界面,也得通过api的方式获取。

    https://www.dnspod.com/docs/info.html#get-the-user-token

    可是.sh代码应该怎么写呢……

    1. 请从github上获取更新,支持token

  7. dts

    感谢!在树莓派Raspbian 上完美工作。

    请教几个问题:1.我发现dnspod.com(国际版)的api和dnspod.cn是一样的,只是地址不同。所以我尝试使用dnspod.com的账户和api,并改动了ddnspod.sh第121行,结果(以账户、密码方式dns.conf):

    Linux hostIP: 116.12.x.x lastIP: postRS: Missing user token, login failed

    查源码,对比中英的api文档也找不到问题所在。我只是个初学者,请教有什么解决办法或者方向么?谢谢

  8. silence

    咨询一下:

    复制dns.conf.example到同一目录下的dns.conf并根据你的配置修改即可。

    同一目录下的dns.conf 这句话没明白。(新手不好意思)

  9. shupan

    我想上面的原因可能是因为我在另外一台PC上也登陆了一个dnspodclient客户端导致的。将它停止后没有再报这个错误。

  10. shupan

    没有使用说明呀。。我改了ddnspod.sh最后的设置用户参数ermail和erpass为dnspod的账户和密码,然后检查更新域名改成了自己的域名。运行起来有显示hostIP,lastIP不显示。postRS提示Record id invalid 失败了。CentOS 7

    1. 一般情况下,需要检查账号是否错误,域名是否有权限设置。网络是否可达。

添加新评论