文章讲在 iStoreOS 上安装 DDNS-GO,把会变化的公网 IPv4、IPv6 自动绑定到自有域名,并打通端口转发与防火墙放行,让 NAS、路由器后台、SSH、远程桌面真正可从外网访问。重点是装完后为何仍访问不了:IPv6 取错网卡、防火墙未放行、运营商封 80/443;同时强调无公网 IP 时应改用内网穿透,DDNS 帮不上忙。
家里宽带跑得好好的,某天出门想连 NAS,发现域名解析到了别人的地址——因为昨晚光猫重启,公网 IP 换了。IPv6 更夸张,运营商重拨一次,PD 前缀就变,家里所有设备的地址全跟着换。手动改解析不现实,DDNS 就是干这件事的:IP 随便变,域名永远指向最新的那个。
这篇讲在 iStoreOS 上装 DDNS-GO,把家里的动态 IPv4 和动态 IPv6 都绑到自己的域名上,再把端口转发和防火墙打通,让 NAS、路由器后台、SSH、远程桌面从外网真正可达。如果你家根本没有公网 IP(运营商大内网),DDNS 帮不了你,那种情况看 iStoreOS DDNSTO 教程:路由远程访问安装与网络配置,走内网穿透这条线。
这篇文章解决的问题
不是「怎么装一个插件」,而是「装完之后为什么还是访问不了」。很多人卡在三个地方:IPv6 拿错了网卡、防火墙没放行、运营商封了 80/443。这三处本文都会给具体做法。
目录导览
一、先判断:缺 DDNS 还是缺穿透
DDNS 只做一件事:把「当前公网 IP」写进 DNS 记录。它不改数据通路,所以前提是外面本来就能连到你家。判断方法很简单。
1. 有没有公网 IPv4
在路由器上看到 WAN 口拿到的地址,同时用任意一台内网设备打开 https://4.ipw.cn 之类的地址查询页,两边一致就是公网 IPv4。如果 WAN 口是下面这些段,说明运营商给你套了一层 NAT(CGNAT),做端口转发没用:
100.64.0.0/10:运营商级 NAT,家宽最常见10.0.0.0/8、172.16.0.0/12、192.168.0.0/16:私网地址
2. 有没有公网 IPv6
看「网络 → 接口」里有没有 240e:(电信)、2408:(联通)、2409:(移动)开头的全局地址。IPv6 不走 NAT,有地址基本就能通,只是默认被防火墙挡在门外。国内三大运营商的家宽 IPv6 覆盖率已经很高,很多「没有公网 IP」的家庭其实有公网 IPv6,只是没人用起来。
3. 三种情况,三套方案
| 家里情况 | 该用什么 | 要点 |
|---|---|---|
| 有公网 IPv4(会变) | DDNS-GO 解析 A 记录 + 端口转发 | 本文主线,最通用 |
| 只有公网 IPv6 | DDNS-GO 解析 AAAA 记录 + 防火墙放行 | 本文第五节,不用端口转发 |
| 都是大内网 | 内网穿透(DDNSTO / frp / 异地组网) | DDNS 在这一层帮不上忙 |
DDNS-GO 干活的流程其实很短:读当前 IP → 和上次比对 → 变了才去调服务商接口改记录。没变就不动,所以不会因为频繁请求被限流。

二、动手前的三样准备
1. 一个域名和它的 DNS 服务商
建议专门拿一个子域名玩这套,比如 nas.example.com,主域名以后换解析不影响。DDNS-GO 支持阿里云、腾讯云、DNSPod、Cloudflare、华为云、百度云、GoDaddy、Namecheap、EdgeOne 等二十多家,家里常用前四个。
2. 一套最小权限的 API 密钥
别拿主账号的密钥。按服务商各准备一份:
| 服务商 | 要什么 | 权限怎么给 |
|---|---|---|
| 阿里云 | AccessKey ID + Secret | 建个 RAM 子账号,只授予 AliyunDNSFullAccess,勾选「仅编程访问」 |
| DNSPod / 腾讯云 | ID + Token | DNSPod 控制台「密钥管理」创建,只给需要解析的域名 |
| Cloudflare | API Token | 模板选「编辑区域 DNS」,Zone 只勾目标域名 |
3. 路由器的系统时间要对
各家 API 都用签名校验,时间偏差超过几分钟就会返回 SignatureDoesNotMatch 之类的错误。iStoreOS 默认开了 NTP,一般没问题;如果你关过 NTP 或者路由器刚上电没联网,先在「系统 → 系统 → 时间同步」里刷一下。
三、在 iStoreOS 上装 DDNS-GO
1. 应用商店装(推荐)
iStoreOS 自带 iStore 应用商店,这是最省事的方式:打开 iStore → 全部软件,搜索 ddns-go,点「安装」。安装包由社区维护(作者 sirpdboy),装完会在菜单里出现入口。

装完从 服务 → DDNS-GO 进管理页(个别固件把它归在「网络」菜单下)。进不去就直接用浏览器打开 http://192.168.11.1:9876,把 IP 换成你路由器的 LAN 地址——DDNS-GO 本体固定监听 9876 端口。
2. 命令行装(商店没包或装不上)
DDNS-GO 是 Go 写的纯静态二进制,OpenWrt 上直接跑没问题。先确认架构,再去 GitHub Releases 下对应文件:
opkg print-architecture
# aarch64_generic / aarch64_cortex-a53 → 下 arm64 包
# x86_64 → 下 x86_64 包
# mipsel_24kc → 下 mipsle 包
以 ARM 软路由为例(版本号换成 Releases 页面上的最新版):
cd /tmp
wget https://github.com/jeessy2/ddns-go/releases/download/v6.12.2/ddns-go_6.12.2_linux_arm64.tar.gz
tar -zxvf ddns-go_6.12.2_linux_arm64.tar.gz
chmod +x ddns-go
./ddns-go -s install
-s install 会把它注册成开机自启的服务。想改监听端口或同步间隔,装服务时带参数:
./ddns-go -s install -l :9876 -f 300
从 6.x 之前升级要注意
iStore 页面写得很清楚:6.x 之前的老版本升级需要卸载重装,直接覆盖可能读不了旧配置。重装前先把配置文件备份出来。
3. 首次进入要设密码
打开 http://路由器IP:9876,第一次会让你设置管理员用户名和密码。设完登录,界面里默认已经勾选「禁止从公网访问」——这个勾别去掉,9876 只在内网用。
密码忘了不用重装,命令行能重置:
cd /opt/ddns-go # 换成你的实际安装目录
./ddns-go -resetPassword 新密码
/etc/init.d/ddns-go restart
顺带一提,群晖上跑 ddns-go 忘密码是另一套办法,改 yaml 就行,见 群晖 ddns-go 用户名密码忘记怎么找回。
四、五分钟配完:域名绑到家宽
DDNS-GO 的配置页看着项多,其实只有五项是必须填的,其余保持默认。

1. 填服务商和密钥
顶部选 DNS 服务商,比如「阿里云」,把 AccessKey ID 和 Secret 粘进去。保存时它会验证一次,密钥错会当场报出来,不用等日志。
2. 填域名
域名框里写 nas.example.com。多个域名用英文逗号隔开,一行一个也行;多个域名共用同一份解析值时,一次更新会全改掉,很省事。IPv4 和 IPv6 可以填不同域名(比如 v4.example.com 和 v6.example.com),调试时更容易分辨是哪条记录生效。
3. 选获取 IP 的方式
这是全篇最容易选错的一项:
- IPv4 选「通过接口获取」:请求公网 IP 查询接口拿结果,默认地址就能用。某些接口国内访问慢或限流,可以换成
https://4.ipw.cn这类。 - IPv6 选「通过网卡获取」:IPv6 不能靠查询接口——那返回的是网站看到的出口地址,不一定是你家设备能被动访问的地址。必须从本机网卡上读。
4. 保存,看日志
点保存后等几秒,页面上方的日志会滚动输出。看到「IPv4 地址更新成功」这类提示就说明解析已经写进去了。之后每 5 分钟自动比对一次,IP 不变就不动。
验证解析是不是真的改了,别只看网页,直接查权威结果:
nslookup nas.example.com 223.5.5.5
# 查 AAAA 记录(Linux / macOS)
dig +short AAAA nas.example.com @2400:3200::1
TTL 设小一点,调试期少等十分钟
默认 TTL 常常是 600 秒以上,改完记录要等缓存过期才生效。调试阶段把域名 TTL 调到 60~120 秒,确认没问题再改回去,能省掉大量「明明改对了却打不开」的困惑。
五、IPv6 这一趟:AAAA 与三个坑
1. 前缀会变,后缀通常不变
运营商下发的是 PD 前缀,重拨就可能换一段。家用设备多半用 EUI-64 或 SLAAC 生成地址,后缀跟网卡 MAC 绑着,前缀换了后缀还在。所以「一个域名指向一台设备」在 IPv6 下是可行的,但前缀一变解析就得跟着更新——这正是 DDNS 要干的事。
2. 网卡这一项要选对
「通过网卡获取」的下拉框里会列出所有接口,选错了解析出来的就是内网地址或者 fe80:: 链路本地地址,外面永远连不上。判断规则:
| 家里怎么拨号 | 网卡选哪个 | 说明 |
|---|---|---|
| iStoreOS 自己 PPPoE 拨号 | pppoe-wan |
最常见,地址直接挂在拨号口上 |
| 光猫拨号,路由当二级 | wan 或 br-lan |
取上游下发的全局地址,看哪个口有 240x 开头 |
| DHCPv6 客户端模式 | wan6 |
IPv6 地址在 wan6 这个别名接口上 |
拿不准就去「网络 → 接口」逐个点开,找那个有 240x: 开头 /64 或 /128 全局地址的接口。列表里出现 fe80: 开头的说明看的是链路本地地址,不能用。
3. 防火墙默认是拒绝入站的
IPv6 不需要端口转发(没有 NAT),但 OpenWrt 的 wan 区域默认 input 是 reject,外面主动进来一律被丢。要在「网络 → 防火墙 → 通信规则」加一条放行。命令行等价写法(把端口和设备地址换成你自己的):
uci add firewall rule
uci set firewall.@rule[-1].name='Allow-NAS-IPv6'
uci set firewall.@rule[-1].src='wan'
uci set firewall.@rule[-1].dest='lan'
uci set firewall.@rule[-1].proto='tcp'
uci set firewall.@rule[-1].dest_port='5001'
uci set firewall.@rule[-1].family='ipv6'
uci set firewall.@rule[-1].target='ACCEPT'
uci commit firewall
/etc/init.d/firewall reload
只想放行单台设备,可以在 LuCI 里把「限制地址」填成设备的 IPv6。但那串地址会随前缀变,维护起来很烦——更省心的做法见下一节,把入口收敛到路由器上做反向代理。
六、让外网真的能访问
1. IPv4:端口转发
解析通了只是第一步,数据要进得来还得做端口映射。图形界面在「网络 → 防火墙 → 端口转发」,uci 写法:
uci add firewall redirect
uci set firewall.@redirect[-1].name='NAS-5001'
uci set firewall.@redirect[-1].src='wan'
uci set firewall.@redirect[-1].src_dport='5001'
uci set firewall.@redirect[-1].dest='lan'
uci set firewall.@redirect[-1].dest_ip='192.168.11.10'
uci set firewall.@redirect[-1].dest_port='5001'
uci set firewall.@redirect[-1].proto='tcp'
uci set firewall.@redirect[-1].target='DNAT'
uci commit firewall
/etc/init.d/firewall reload
外部端口不必等于内部端口,比如外面用 15001、里面还是 5001,能少被扫一批。做多了端口记不住,可以看 Socat 端口转发:在 OpenWrt 上把 TCP/UDP 转明白,用一个入口把不同端口分给不同设备。
2. 多设备:别给每台机器开一个洞
家里 NAS、路由器后台、监控、下载机各开一个端口,暴露面会失控。三种收敛方式,按推荐程度排:
| 做法 | 长什么样 | 适合 |
|---|---|---|
| 子域名反向代理 | nas.example.com、router.example.com 都指向路由,由路由上的 Nginx 按域名分流转发 |
设备多、想要一个 443 入口 |
| 不同外部端口 | example.com:5001 → NAS,:5002 → 路由器 |
设备少,够用就行 |
| 先连 VPN 再访问 | WireGuard 拨回家,内网地址随便开 | 只给自己用,安全最高 |
反向代理的最小配置长这样(Nginx,跑在路由器或任意内网机器上):
server {
listen 8443 ssl;
server_name nas.example.com;
ssl_certificate /etc/nginx/cert/nas.crt;
ssl_certificate_key /etc/nginx/cert/nas.key;
location / {
proxy_pass http://192.168.11.10:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
好处是只需要在防火墙上开一个端口,新设备加一段 server 块就行;而且入口做了 TLS,内网设备本身可以是 http。证书走 DNS-01 验证申请,用的还是 DDNS-GO 那个 API 密钥,很适合家宽这种没有 80 端口的场景。
3. 四条安全底线
- 9876 不对外:DDNS-GO 的「禁止从公网访问」保持勾选。真要远程管,挂在反代后面加一层认证。
- 路由器的 80 / 22 不要映射出去:管理面暴露在公网,被爆破只是时间问题。SSH 用密钥登录,参考 群晖公钥私钥登录 SSH 的教程,思路通用。
- 选高位端口:家宽的 80、443、8080 大概率被运营商封了,用 8443、15001 这类,映射出去能通。
- NAS 自身加固:关掉默认 admin、开二次验证、限制登录失败次数。DDNS 只是把门牌号固定了,门锁还得自己上。
在家用域名打不开?是 NAT 回环
很多固件的端口转发不支持 hairpin NAT:出门用域名能连,坐家里用同一个域名反而失败。这不是 DDNS 的问题,临时用内网 IP 访问即可;想彻底解决要在路由器上做 DNS 劫持,把域名在内网解析到内网地址。
七、排错对照表
DDNS 这类问题基本集中在「记录没更」「更了连不上」两类,按现象对照查比较快。
| 现象 | 常见原因 | 怎么处理 |
|---|---|---|
| 日志说「未改变」,但 IP 明明变了 | 查询接口返回的地址不对,或走了代理 | 换个 IP 查询接口;IPv6 改成网卡方式 |
| 报 403 / SignatureDoesNotMatch | 密钥权限不足、系统时间偏差 | 核对 RAM 授权范围;同步 NTP |
| 解析更新了,外面还是连不上 | 端口没映射、防火墙没放行、运营商封端口 | 先内网测服务,再从 4G 网络测端口 |
| 只有 IPv6 能通 | IPv4 本身是 CGNAT | 正常,走 IPv6 或内网穿透 |
| 重拨后十几分钟才恢复 | 同步间隔 5 分钟 + TTL 缓存 | 缩短间隔、降低 TTL |
| 手机流量能通,公司网不通 | 公司网络只有 IPv4 或封了端口 | 换 IPv4 域名,或换端口 |
解析到了 fe80:: |
IPv6 网卡选错 | 改选有 240x 全局地址的接口 |
八、进阶:一域名多用 + 通知
1. 子域名分设备
在域名框里填 nas.example.com,ssh.example.com,cam.example.com,一次更新三条一起改。配合上面的反向代理,每个子域名对应一台设备,出门记一个域名就够了。
2. IP 变了推个消息
Webhook 里填 Bark 的地址,IP 变化时手机直接收到通知:
https://api.day.app/你的KEY/家里IP变了/#{ipv4Addr}/#{ipv4Result}
Bark 的路径依次是「标题 / 正文」,中文会自动编码;Bark 的路径依次是「标题 / 正文」,中文会自动编码;钉钉、飞书、Server 酱、PushPlus、Discord 的模板官方 README 里都有,RequestBody 留空就是 GET 请求,填了 JSON 就按 POST 发。变量支持 #{ipv4Addr}、#{ipv4Result}、#{ipv6Addr}、#{ipv6Domains} 等。
3. 同步频率别乱拉高
默认 5 分钟一次,对家宽足够。想做到「IP 一变就更新」,别把间隔压到 10 秒——那是让接口被限流的写法。官方给的折中方案是「勤检查、少比对」:
./ddns-go -s install -f 10 -cacheTimes 180
意思是每 10 秒看一次本机 IP,每 180 次(半小时)才去服务商那边比对一次,变化能立刻发现,又不会把 API 打爆。
4. 换设备时记得备份
配置就一个 yaml 文件,默认在 ddns-go 的工作目录里(.ddns_go_config.yaml),里面有密钥和域名。换路由器、重刷固件前把它拷出来,恢复时放回去再启动服务就行。用 -c 参数可以把配置放到你想放的位置,放在持久化分区更稳。
九、装完之后
到这里,家里的动态 IPv4 和动态 IPv6 都已经绑在域名上了,端口通、防火墙放行、入口收敛到反代,剩下的就是把这些入口用起来:
最后提醒一句:DDNS 解决了「地址会变」,解决不了「安全」。公网可达的设备越少越好,能走 VPN 的就别开端口,能放反代后面的就别直接暴露。家里的网络一旦被扫到,脚本爆破是 24 小时不停的。
- 文章名称:iStoreOS 安装 DDNS-GO:动态 IP 也能远程访问家里设备
- 文章永久网址:https://www.997wan.com/istoreos-ddns-go-dynamic-ip-remote-access/
- 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长 997笔记 进行删除处理。
- 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
- 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
- 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
- 如无特别声明本文即为原创文章仅代表个人观点,版权归《997笔记》所有,欢迎转载,转载请保留原文链接。