V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Tumblr
V2EX  ›  分享创造

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

  •  
  •   Tumblr ·
    tumblr · 2020-09-08 16:50:36 +08:00 · 2297 次点击
    这是一个创建于 1566 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    先决条件

    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: <[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 有变化,都可以更动更新我的域名记录,我随时也可以访问家里的设备了。

    12 条回复    2020-09-10 15:54:06 +08:00
    goodryb
        1
    goodryb  
       2020-09-08 17:33:24 +08:00
    其实有很多集成好的 ddns 服务可以直接用
    ferock
        2
    ferock  
       2020-09-08 17:36:36 +08:00
    阿里 dns 解析,curl 一把梭。
    腾讯 dnspod 解析,curl 一把梭。


    并不需要那么麻烦。
    Tumblr
        3
    Tumblr  
    OP
       2020-09-08 17:36:47 +08:00
    @goodryb #1 是的,不过很多集成的是用现有的二级域名,这时候如果想自己弄个证书用 https 就不那么方便了。
    我也是基于此,才用自有域名的。
    goodryb
        4
    goodryb  
       2020-09-08 17:40:58 +08:00
    @Tumblr #3 可以把自己的域名 cname 到 服务的二级域名上
    Tumblr
        5
    Tumblr  
    OP
       2020-09-08 17:46:15 +08:00
    @goodryb #4 也对,也是个方法,学习了~
    loveminds
        6
    loveminds  
       2020-09-08 20:05:39 +08:00
    @ferock Cloudflare 也很好用
    cpstar
        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 记录。
    SenLief
        8
    SenLief  
       2020-09-09 01:02:59 +08:00
    ddns 就可以了。如果用的是软路由类的路由器固件,那可以自己签名。主要的问题是没有 80 和 443 端口这个最烦了。
    Tumblr
        9
    Tumblr  
    OP
       2020-09-09 08:14:39 +08:00 via iPhone
    @SenLief #8 自签名会报证书问题,这是不可接受的情况。当然,每个访问终端安装证书也不可接受。
    SenLief
        10
    SenLief  
       2020-09-09 11:10:47 +08:00
    @Tumblr 不是 let's encrypt 签名,我就是路由器上跑 nginx,然后反代到 app 的,只不过因为封了 443 端口,所以只能用域名:port 的方式。
    amorphobia
        11
    amorphobia  
       2020-09-09 16:03:31 +08:00
    提供一个 namesilo 的 ddns 脚本

    https://github.com/chreniuc/namesilo_ddns
    JimmyTinsley
        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 回家之后再通过局域网访问...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1201 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:45 · PVG 01:45 · LAX 09:45 · JFK 12:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.