通过自有域名访问家庭联网设备

2020-09-08 16:50:36 +08:00
 Tumblr

以下仅分享个人使用的情况,方法可复制,但不是通用性的。

先决条件

  1. 自有域名一个,托管在 Cloudflare 上;
  2. 路由器,支持自定义脚本;
    目前我用的是 Netgear R7000,Merlin 固件
  3. 公网 IP 地址(目前只做了 IPv4 )。

参数获取

  1. 公网 IP 地址
    这个目前我是通过一些免费的 API 获取的。
  2. API token,这个可以在dashboard看到;
  3. DNS 的 Zone ID,可以登录 Cloudflare 查看,或者通过API获取;
  4. DNS 的 record ID,可以通过API获取。

脚本

#!/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: <username@domain.local>" \
-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 有变化,都可以更动更新我的域名记录,我随时也可以访问家里的设备了。

2285 次点击
所在节点    分享创造
12 条回复
goodryb
2020-09-08 17:33:24 +08:00
其实有很多集成好的 ddns 服务可以直接用
ferock
2020-09-08 17:36:36 +08:00
阿里 dns 解析,curl 一把梭。
腾讯 dnspod 解析,curl 一把梭。


并不需要那么麻烦。
Tumblr
2020-09-08 17:36:47 +08:00
@goodryb #1 是的,不过很多集成的是用现有的二级域名,这时候如果想自己弄个证书用 https 就不那么方便了。
我也是基于此,才用自有域名的。
goodryb
2020-09-08 17:40:58 +08:00
@Tumblr #3 可以把自己的域名 cname 到 服务的二级域名上
Tumblr
2020-09-08 17:46:15 +08:00
@goodryb #4 也对,也是个方法,学习了~
loveminds
2020-09-08 20:05:39 +08:00
@ferock Cloudflare 也很好用
cpstar
2020-09-08 20:12:05 +08:00
软路由 lede,域名 aliyun,光猫桥接
crontab 5 1,4,7-22 * * *
分配置脚本和更新脚本
使用 dig 检测远端 IP,然后使用 ip addr 获取本端 IP,比较差异。支持 A 记录和 AAAA 记录。
SenLief
2020-09-09 01:02:59 +08:00
ddns 就可以了。如果用的是软路由类的路由器固件,那可以自己签名。主要的问题是没有 80 和 443 端口这个最烦了。
Tumblr
2020-09-09 08:14:39 +08:00
@SenLief #8 自签名会报证书问题,这是不可接受的情况。当然,每个访问终端安装证书也不可接受。
SenLief
2020-09-09 11:10:47 +08:00
@Tumblr 不是 let's encrypt 签名,我就是路由器上跑 nginx,然后反代到 app 的,只不过因为封了 443 端口,所以只能用域名:port 的方式。
amorphobia
2020-09-09 16:03:31 +08:00
提供一个 namesilo 的 ddns 脚本

https://github.com/chreniuc/namesilo_ddns
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 回家之后再通过局域网访问...

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

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

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

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

© 2021 V2EX