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 检查账号权限、是否冲突等
之前一直好好的,最近几天无法正常解析网址了,dnspod查询发现还在上一个ip地址上(动态地址)。
运行ddnspod.sh显示:
[~] # /share/CACHEDEV3_DATA/dnspod-shell-master/ddnspod.sh
=== Check www.网址.cc ===
Fetching Host Ip
arWanIp4 - Invalid ip address
=== Check @.网址.cc ===
Fetching Host Ip
arWanIp4 - Invalid ip address
不知为何?
更新脚本,然后脚本编码改为utf-8试试?
运行后结果是这样,不懂,求教。
=== Check aaa.hefp.cn ===
Fetching Host Ip
Host Ip: 240e:3b10:2044:41fa:e11c:2246:2506:bfe3
Record Type: AAAA
Fetching RecordId
arDdnsLookup -
参考 https://github.com/rehiy/dnspod-shell/issues/113
请问我执行命令后显示获取了正确的ip地址,而dnspod里的记录未被更新是什么原因?(已填写正确的id和token)
打扰了,测试v6.1可以正常使用。::(狂汗)
昨天还可以用,今天出现了Host Ip: arWanIp4 - Can't get ip address,问下咋回事,我直接进入https://v4.myip.la等个几秒也能出ip地址,为啥报错了呢
脚本优先使用本地wan的ip,获取不到,才会从接口获取。可以更换一个你本地打开快一点的接口试试
我也是遇到同样的情况,换了其他接口也是一样,https://v4.myip.la我本地秒开,但是还是显示Host Ip: arWanIp4 – Can’t get ip address
我排查下看看
ddnspod.sh: line 14: arDdnsCheck: not found
这是未获取到我的域名吗?是因为dnspod的api使用https的原因吗?我该如何解决?
可能是缺少了函数文件,你把项目里的2个脚本放一起即可
大佬们,这是什么问题啊???
Domain Ids: arDdnsIds - {"status":{"code":"10","message":"\u8bb0\u5f55\u5217\u8868\u4e3a\u7a7a","created_at
可能需要选择网卡
解决了,是网卡选的不对。
//运行ifconfig,查看具有IPv6地址的网卡设备名,例如eth0等
//ddnspod.sh 69行,将 eth0 替换成本机的网卡设备名。确保单独运行该命令可以返回ipv6地址
好的
arDdnsIds - {"status":{"code":"8","message":"\u57df\u540d\u4e0d\u6b63\u786e\uff0c\u8bf7\u8f93\u5165\u4e3b\u57df\u540d\uff0c\u5982 dnspod.cn","created_at":"2021-08-15 01:34:34"}}
因为ipv6有三个地址
(第一个)inet6 240e:000:000a:26c0::114 prefixlen 128 scopeid 0x0
(第二个)inet6 240e:000:000a:26c0:25dd:f3b1:7f79:d4d6 prefixlen 64 scopeid 0x0
(本地地址)inet6 fe80::ac5b:4331:5f5d:115b prefixlen 64 scopeid 0x20
shell会自动上传第一个v6地址,导致无法联通,如何修改为上传第二个v6地址呢
用 计算下长度,排除掉一个
目前免费的DDNS 的TTL最低只能写到600秒,是不是这个原因导致报错 get record info failed。
可能和api变更有关系,你更新到最新的版本了么
是最新版的,
最近更新
2020/1/1
适配新版API(2019-11-26)
当wget不存在时,尝试使用curl提交
由于readlink不可靠,更改为手动设置路径
当无法从本地网卡获得外网ip时,尝试从外部api获取
上个月合并了一个pull,解决这个问题
经测试 a.abc.com 二级域名会出现 get record info failed abc.com 根域名不会