技术交流

家里没公网 IPv4 也能远程访问:IPv6 直连 NAS 的完整配置

🦋admin LV1 · 2 次浏览 · 2 条回复

想在出差时连回家里的 NAS 拿个文件,问运营商要公网 IPv4,客服的回答是「个人宽带不提供,可以升级专线」。专线一个月几百块,就为拿个文件,显然不值。

后来发现一件被忽略的事:运营商其实已经给我们发了公网 IPv6,而且是免费的——只是大部分人从没用过,还默认在光猫上把它防火墙关上了。

先确认你到底有没有

最直接的办法:手机关掉 WiFi,用蜂窝流量打开这个地址:

https://test-ipv6.com/

如果显示「支持 IPv6」,那你的手机网络没问题。再回到家里 WiFi 下测一遍,两边都通才说明链路完整。

也可以在电脑上直接看:

# Windows
ipconfig | findstr "IPv6"
# 看到 2408: / 2409: / 2001: 开头的是公网地址
# fe80: 开头的是链路本地地址,只在局域网内有效,不算

关键判断:地址是不是 2xxx: 开头。 只要不是 fe80:: 开头,基本就是公网可达的。电信常见 240e:,联通 2408:,移动 2409:。

为什么 IPv6 能直连而 IPv4 不行

原因很简单:地址够多了。

IPv4 只有 42 亿个地址,早就分完,运营商只能给家庭宽带做 NAT——一栋楼共用一个出口 IP,你在外面根本找不到自己家那台机器。

IPv6 有 2 的 128 次方个地址,运营商的做法是直接给每一台设备发一个公网地址。你的 NAS、手机、电脑,每台都有一个能直接从外网访问到的地址,中间没有任何 NAT 转换。

所以只要知道地址,就能直接连——不需要内网穿透、不需要中转服务器、带宽跑满自家的上行。

实测对比(家里 500M 宽带,上行 50Mbps,从外面拉一个 2GB 的文件):
- frp 中转(云服务器 5Mbps 带宽):约 55 分钟,还占云服务器流量
- IPv6 直连:约 6 分钟,跑满上行 50Mbps
- 延迟:中转 38ms,直连 12ms

第一步:让光猫放行 IPv6

这是最容易卡住的地方。很多光猫默认开启 IPv6 防火墙,把外面进来的连接全挡了。

两条路:

A. 找运营商改桥接(推荐)
打电话给客服说「光猫改桥接模式,我自己拨号」。改完之后用自己的路由器拨号,IPv6 的控制权就完全在你手上了。大部分运营商会远程给你改,几分钟的事。

B. 自己登光猫(看运气)
光猫背面有管理地址和账号,超级密码一般需要搜机型对应的默认密码。进去之后找「安全 → 防火墙」,把 IPv6 防火墙关掉或者设成「允许」。

改完一定要重启光猫,不然配置可能不生效。

第二步:给 NAS 配一个稳定的名字

IPv6 地址很长,而且运营商会定期更换地址前缀(一般几天到几周变一次)。所以不能直接记地址,要配 DDNS——动态域名解析。

流程是:设备定期把自己的 IPv6 地址上报给 DDNS 服务,你访问一个固定域名,DNS 返回当前地址。

群晖、威联通自带 DDNS,也可以用第三方工具。我自己用的是 Cloudflare 的 API,写了个定时任务:

#!/bin/bash
# 取本机 IPv6 公网地址(排除临时的隐私地址)
IP=$(ip -6 addr show scope global | grep -v temporary | \
     awk '/inet6/{print $2}' | cut -d/ -f1 | head -1)

# 调 Cloudflare API 更新 AAAA 记录
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  --data "{\"type\":\"AAAA\",\"name\":\"nas.你的域名.com\",\"content\":\"$IP\",\"ttl\":120,\"proxied\":false}"

放进 crontab,每 5 分钟跑一次:

*/5 * * * * /root/ddns6.sh >> /var/log/ddns6.log 2>&1

两个必须注意的点:

  1. proxied 一定要设 false。Cloudflare 的小云朵代理只支持部分端口,开了之后非标准端口连不通
  2. 排除临时地址:Linux 默认会生成「临时隐私地址」,那个地址会频繁变化且不能入站。用 grep -v temporary 过滤掉

第三步:放行防火墙

设备上有两道墙要开:

路由器 / 光猫:允许外部访问目标设备的指定端口(比如 NAS 的 5000、5001)

NAS 本身:Windows 的防火墙默认拦掉所有入站,Linux 的话看 iptables / firewalld

Windows 上验证端口开没开,用另一台机器(走流量的手机也行):

Test-NetConnection -ComputerName nas.你的域名.com -Port 5001

三个真实会遇到的坑

坑一:对方的手机网络不支持 IPv6
这是 IPv6 最大的现实问题。虽然三大运营商的移动网络基本都支持了,但公司 WiFi、酒店 WiFi、部分老路由器是不支持的。在这些网络下你连不上家里。

我的做法是留个备用方案:IPv6 直连为主,frp 中转留着当兜底,两条路都配好,哪条通走哪条。

坑二:地址前缀变了但 DDNS 还没更新
运营商换前缀之后,旧的 IPv6 地址立刻失效,而 DDNS 最快也要等下一个 5 分钟周期。所以 TTL 要设短(120 秒),更新周期也要短。

坑三:整个家庭网络暴露
这是安全上必须想清楚的。IPv6 没有 NAT 遮挡,家里每一台有公网地址的设备理论上都能被扫到。所以:

  • 只给需要远程访问的设备开端口,其余一律不开
  • 服务本身要有强密码 + 二次验证
  • 定期检查哪些端口是开着的(nmap -6 扫一下自己的地址)

到底适不适合你

适合的情况:手机流量支持 IPv6、家里设备能长期开机、愿意折腾一次换长期收益。

不适合的情况:经常在公司/酒店网络下访问(那里 IPv6 覆盖率不高)、或者对网络配置完全不熟、出了问题没法马上处理。

跑通之后最大的感受是:终于不用看云服务器的带宽脸色了。以前走中转,传个大文件得算着流量;现在直接连回家,速度取决于自家上行,传完就完事。

你们那边 IPv6 打通了吗?有没有遇到光猫改桥接客服不给改的情况?

回复 (2)

  • 夜航船 #1

    关于移动网络支持率,我这两年断断续续测过一些地方,体感是这样:

    三大运营商的蜂窝数据基本都通,但公司 WiFi 和酒店 WiFi 大概一半一半。很多企业的无线控制器默认只发 IPv4,或者虽然发了 IPv6 但出口没有真正通。酒店里那种老胖 AP 更常见的是完全没有。

    所以兜底方案确实不能省。我的做法是两套 DDNS 记录:同一个域名同时解析 AAAA 和 A 记录,A 记录指向 frp 服务器。客户端支持 IPv6 就优先走 AAAA,不支持自动落回 A,不用手动切。

  • 硬盘收藏家 #2

    DDNS 那块推荐一个更省事的工具:ddns-go。

    一个 Go 写的单文件程序,十来兆,自带 Web 界面,支持 Cloudflare、阿里云、腾讯云、Dnspod 等一堆服务商。不用手写 API 调用,也不用记 ZONE_ID 和 RECORD_ID(那两个值每次都得去翻控制台,很烦)。

    它还能自动区分 IPv4 / IPv6、自动排除临时地址、支持多网卡选择。装完浏览器打开配置页填个 token 就完事,五分钟搞定。对不想写脚本的人来说比自己撸 curl 舒服太多。

登录后即可参与讨论

去登录 注册账号

相关帖子