以下仅分享个人使用的情况,方法可复制,但不是通用性的。
#!/bin/sh
#Check public IP address
myip=`curl 'https://api.ipify.org'` > /dev/null 2>&1
#Update DNS record
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_name>\",\"content\":\"$myip\",\"ttl\":120,\"proxied\":false}" \
> /dev/null 2>&1
#return status to router
if [ $? -eq 0 ]; then
/sbin/ddns_custom_updated 1
else
/sbin/ddns_custom_updated 0
fi
(后面的部分是因为我要返回给路由器更新状态,如果只是做域名更新,可以不需要。)
这样,每次 IP 有变化,都可以更动更新我的域名记录,我随时也可以访问家里的设备了。
1
goodryb 2020-09-08 17:33:24 +08:00
其实有很多集成好的 ddns 服务可以直接用
|
2
ferock 2020-09-08 17:36:36 +08:00
阿里 dns 解析,curl 一把梭。
腾讯 dnspod 解析,curl 一把梭。 并不需要那么麻烦。 |
3
Tumblr OP @goodryb #1 是的,不过很多集成的是用现有的二级域名,这时候如果想自己弄个证书用 https 就不那么方便了。
我也是基于此,才用自有域名的。 |
7
cpstar 2020-09-08 20:12:05 +08:00
软路由 lede,域名 aliyun,光猫桥接
crontab 5 1,4,7-22 * * * 分配置脚本和更新脚本 使用 dig 检测远端 IP,然后使用 ip addr 获取本端 IP,比较差异。支持 A 记录和 AAAA 记录。 |
8
SenLief 2020-09-09 01:02:59 +08:00
ddns 就可以了。如果用的是软路由类的路由器固件,那可以自己签名。主要的问题是没有 80 和 443 端口这个最烦了。
|
9
Tumblr OP @SenLief #8 自签名会报证书问题,这是不可接受的情况。当然,每个访问终端安装证书也不可接受。
|
10
SenLief 2020-09-09 11:10:47 +08:00
@Tumblr 不是 let's encrypt 签名,我就是路由器上跑 nginx,然后反代到 app 的,只不过因为封了 443 端口,所以只能用域名:port 的方式。
|
11
amorphobia 2020-09-09 16:03:31 +08:00
|
12
JimmyTinsley 2020-09-10 15:54:06 +08:00
openwrt 用户可以用这个来做 cloudflare 的 ddns
https://openwrt.org/packages/pkgdata/ddns-scripts_cloudflare.com-v4 另外我因为怕被封宽带, 只对外开放了 ssh, ftp 和 vpn 服务的端口, web 界面一律 vpn 回家之后再通过局域网访问... |