想在出差时连回家里的 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
两个必须注意的点:
proxied一定要设 false。Cloudflare 的小云朵代理只支持部分端口,开了之后非标准端口连不通- 排除临时地址: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 打通了吗?有没有遇到光猫改桥接客服不给改的情况?