再次感谢各位,学到了不少东西,尤其是对 sed regex pattern 处理 json 有了新的理解。以前写 grok 语法接触到一点 regex pattern, 但理解不够深入。比如要获取 json 的 某个 key 对应的 vlaue。
echo $update_v4 | sed -E "s/.+\"success\":[ ]*([a-z]+).+/\1/g"
1
wangbenjun5 2021-08-31 21:15:57 +08:00
自己写个很简单啊,你在服务器上面写个 web 服务,获取请求者的 ip,记录下来,如果变了就请求 api 修改 dns 记录不就行了。
然后自己路由器(智能路由)用 crontab 整个定时访问这个服务。。。 完美解决! |
2
guanyin9cn OP |
3
wangbenjun5 2021-08-31 21:36:02 +08:00
@guanyin9cn 只要能获取 ip,都好办,自己服务器写个 web 服务,用 go 或者 php 也就几行代码,胜在稳定可控。至于光猫或者路由器上面直接命令获取,必须得改路由器上面拨号,有点麻烦。
|
4
f165af34d4830eeb 2021-08-31 21:42:04 +08:00
openwrt 的 ddns 插件符合你的要求,而且支持多家 dns 服务商。
|
5
jakehu 2021-08-31 21:55:24 +08:00
|
6
boris93 2021-08-31 21:58:01 +08:00 via iPhone
|
7
FrankAdler 2021-08-31 23:26:42 +08:00
https://gist.github.com/fengqi/0d5979c1a15c678db2c260970f98183b 我正在用的脚本,跑在 openwrt 上,jq 命令自己想办法装上或者替换成 awk
|
8
Tink 2021-08-31 23:33:25 +08:00
这个随便一搜一大堆。。。
|
9
flynaj 2021-08-31 23:49:13 +08:00
ddns 是路由器的基本功能。openwrt 直接支持。
|
10
Tumblr 2021-08-31 23:59:44 +08:00 2
大佬们的好厉害啊,一个小功能也可以写成鸿篇巨制,我只有几行:
#!/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: <[email protected]>" \ -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 |
11
guanyin9cn OP @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" 实测可用 |
12
hasdream 2021-09-01 08:36:59 +08:00
老毛子( PADAVAN ) 路由器固件支持这个功能 (愉快使用 2 年多了)
|
14
guanyin9cn OP @Tumblr #10 zone_id 一般不会变,除非删除了域名。record_id 会随着删除 A 记录而发生变化。写的简单,维护起来麻烦。
|
15
guanyin9cn OP @boris93 go 语言实现,json 解析起来会比较方便。
|
16
black938 2021-09-01 10:37:14 +08:00
https://github.com/jeessy2/ddns-go
go 语言实现 打包个二进制扔路由器跑都行 |
18
superszy 2021-09-01 10:41:19 +08:00
|
19
Tumblr 2021-09-01 11:06:32 +08:00
@guanyin9cn #14 为什么要删除 A 记录呢? 😅 直接 modify 就好了。
如果有多个域名,其它的 cname 到一个固定的 A 就可以了。 |
20
sam014 2021-09-01 11:19:25 +08:00
ddns-go
|
21
boris93 2021-09-01 12:17:11 +08:00 via iPhone
@guanyin9cn #15 更主要的原因是性能要求低。最早我是让它跑在路由器上的,Java 和 python 不可能,c 我不会,最后选择 go
|
23
notgoda 2021-12-12 18:09:27 +08:00 via iPhone
@boris93
@FrankAdler @guanyin9cn 各位 V 友,https://api.cloudflare.com / cf 这个 api 在国内会不会被干扰? 官网在有些地区已经打不开了。 |
27
Tumblr 2021-12-12 23:04:07 +08:00
@notgoda #26 这个很难给建议,举个例子,比如我这边公网 IP 的租期是 3 天,但是我每天都要用,所以我会倾向于每天早上跑一次。
如果你对于公网 IP 的需求不是太强烈,当然可以按你的公网租期来跑,但是如果需要强烈,建议 hourly 检测公网 IP (比如 IP 存入文件,每次比对完之后覆盖),发现变化了就更新,否则就不执行操作。 当然,这种频繁检测的还要留意获取公网 IP 的 API 是否有限制。 |
28
notgoda 2021-12-12 23:23:38 +08:00 via iPhone
@Tumblr 我看了一下你用的那个 api 对次数没有任何限制的。那为什么要 ip 写入文件比对呢?直接每分钟执行一下这个脚本不是更好吗?
|
29
Tumblr 2021-12-12 23:33:06 +08:00
@notgoda #28 这个是我个人习惯,不做无谓地更新,既然 IP 地址没变,就不用对 DNS 的 ISP 发出请求。
当然,如果每次都请求更新 DNS 记录,肯定也是没有问题的。 |
30
notgoda 2021-12-12 23:34:06 +08:00 via iPhone
@boris93 谢谢大佬回复。请问 cf ddns cron job 支持的间隔最低可以设置为多少?
|
31
notgoda 2021-12-12 23:35:17 +08:00 via iPhone
@Tumblr 谢谢大佬,请问你这个脚本该怎么改才能同时支持 v4 和 v6 公网地址 dns 更新?
|
32
notgoda 2021-12-12 23:39:42 +08:00 via iPhone
|
37
Tumblr 2022-12-09 10:58:00 +08:00
|