宽带公网 IP,有没有开源的类似 ddns 实现脚本,自动获取 ip,并把 ip 写入到 cloudflare 的 dns 记录里

2021-08-31 20:59:54 +08:00
 guanyin9cn
RT,
有 公网 ip,但 ip 是变化的,有没有 脚本 获取 本机 ppp+ 上的 ip 地址,通过 cloudflare api 修改 dns 记录
4016 次点击
所在节点    程序员
37 条回复
wangbenjun5
2021-08-31 21:15:57 +08:00
自己写个很简单啊,你在服务器上面写个 web 服务,获取请求者的 ip,记录下来,如果变了就请求 api 修改 dns 记录不就行了。

然后自己路由器(智能路由)用 crontab 整个定时访问这个服务。。。

完美解决!
guanyin9cn
2021-08-31 21:25:57 +08:00
@wangbenjun5 谢谢,你说的略显麻烦,我刚自行搜了下,找到了方法,发在了宽带区

v2ex.com/t/799135
wangbenjun5
2021-08-31 21:36:02 +08:00
@guanyin9cn 只要能获取 ip,都好办,自己服务器写个 web 服务,用 go 或者 php 也就几行代码,胜在稳定可控。至于光猫或者路由器上面直接命令获取,必须得改路由器上面拨号,有点麻烦。
f165af34d4830eeb
2021-08-31 21:42:04 +08:00
openwrt 的 ddns 插件符合你的要求,而且支持多家 dns 服务商。
jakehu
2021-08-31 21:55:24 +08:00
boris93
2021-08-31 21:58:01 +08:00
正好我自己写的一个小玩意完美符合需求
https://github.com/boris1993/dnsupdater
代码可能有点丑,但确实能用
FrankAdler
2021-08-31 23:26:42 +08:00
https://gist.github.com/fengqi/0d5979c1a15c678db2c260970f98183b 我正在用的脚本,跑在 openwrt 上,jq 命令自己想办法装上或者替换成 awk
Tink
2021-08-31 23:33:25 +08:00
这个随便一搜一大堆。。。
flynaj
2021-08-31 23:49:13 +08:00
ddns 是路由器的基本功能。openwrt 直接支持。
Tumblr
2021-08-31 23:59:44 +08:00
大佬们的好厉害啊,一个小功能也可以写成鸿篇巨制,我只有几行:
#!/bin/sh
myip=`curl 'https://api.ipify.org'` > /dev/null 2>&1
curl -X PUT https://api.cloudflare.com/client/v4/zones/<zone_id>/dns_records/<record_id> \
-H "X-Auth-Email: <username@domain.local>" \
-H "X-Auth-Key: <auth_token>" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"<DNS_record>\",\"content\":\"$myip\",\"ttl\":120,\"proxied\":false}" \
> /dev/null 2>&1
guanyin9cn
2021-09-01 00:10:21 +08:00
@FrankAdler #7 用 sed 正则表达式匹配,代替 jq 处理 json
获取
zone_id=echo $zone_response | sed -E "s/.+\"result\":\[\{\"id\":\"([a-f0-9]+)\".+/\1/g"
record_id=echo $record_response | sed -E "s/.+\"result\":\[\{\"id\":\"([a-f0-9]+)\".+/\1/g"
实测可用
hasdream
2021-09-01 08:36:59 +08:00
老毛子( PADAVAN ) 路由器固件支持这个功能 (愉快使用 2 年多了)
iphoneXr
2021-09-01 09:13:32 +08:00
@Tumblr 我的第一反应也是找到 cloudflare 的 api 接口 直接 curl 一下
感谢实现了
guanyin9cn
2021-09-01 09:48:04 +08:00
@Tumblr #10 zone_id 一般不会变,除非删除了域名。record_id 会随着删除 A 记录而发生变化。写的简单,维护起来麻烦。
guanyin9cn
2021-09-01 09:50:17 +08:00
@boris93 go 语言实现,json 解析起来会比较方便。
black938
2021-09-01 10:37:14 +08:00
https://github.com/jeessy2/ddns-go
go 语言实现 打包个二进制扔路由器跑都行
Loku
2021-09-01 10:39:38 +08:00
@Tumblr 我也是这样写的
superszy
2021-09-01 10:41:19 +08:00
现成的啊,openwrt 的 ddns 也有 cf,编译时候选上就行了。

如果想自己 docker 部署的话也很多,比如这个 https://github.com/wddwycc/cf_ddns
Tumblr
2021-09-01 11:06:32 +08:00
@guanyin9cn #14 为什么要删除 A 记录呢? 😅 直接 modify 就好了。
如果有多个域名,其它的 cname 到一个固定的 A 就可以了。
sam014
2021-09-01 11:19:25 +08:00
ddns-go

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/799132

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX