适用前提:你的宽带已经是 IPv4 + IPv6 双栈(不确定就先去 IPv6 检测工具 测一次)
目标:从外网用 IPv6 直接连到家里的 NAS —— 不做端口映射、不装 frp、不买中转
耗时:30 分钟左右,其中一半时间花在"确认地址到底变不变"上
先把一个误会说清楚:IPv6 不需要端口映射,但需要防火墙放行
很多人第一次配 IPv6 直连时会卡在同一个地方:路由器里找了半天"IPv6 端口映射",结果根本没有这个菜单,于是以为自己路由器不支持。
其实是概念对不上。
IPv4 时代之所以要做端口映射(NAT 转发),是因为你家里所有设备共用一个公网 IPv4,路由器必须知道"外面来的 5000 端口该丢给哪台机器":
外网 → 公网IPv4:5000 → 路由器查 NAT 表 → 192.168.1.100:5000(NAS)
↑ 这一步就是端口映射
IPv6 下每台设备自己就有公网地址,路由器不需要翻译,只需要决定"这个包放不放进来":
外网 → [2408:xxxx:xxxx:xxxx::100]:5000 → 路由器 IPv6 防火墙 → NAS
↑ 只有"放行/拦截",没有翻译
所以:
路由器 IPv6 防火墙默认是"全部入站拒绝"的,这是设计如此、也是应该的。你要做的就是给 NAS 那个地址、那几个端口开一个口子。找菜单的时候别找"端口映射",找 "IPv6 防火墙"。
直连比中转快在哪
这里不吹具体倍数(不同线路差别太大,任何统一数字都是编的),只说结构上的差别:
- 走中转/穿透:你的数据
NAS → 中转服务器 → 你,多绕一圈,且上限被中转节点的带宽和它的付费套餐卡死 - 走 IPv6 直连:
NAS → 你,走运营商骨干,上限是你家宽带的上行带宽
家宽上行通常是 30–50 Mbps(千兆宽带),这个数才是你直连看片、拉文件的天花板。中转方案往往连这个数都跑不满,这才是"直连更快"的真正来源。
第一步:确认你确实是双栈
打开 17NAS 的 IPv6 检测,看结果属于哪一类:
注意一个陷阱:这个测试测的是"你现在这台设备"的出口。手机连 WiFi 测出来有 IPv6,不代表 NAS 也有 —— NAS 可能插在一台不转发 IPv6 的交换机/软路由后面,或者本身把 IPv6 关了。所以下一步要单独确认 NAS。
顺带记住测出来的地址前缀(2408:/240e:/2409: 这些),后面对照 NAS 地址会用到。
第二步:确认 NAS 拿到的是"公网 IPv6"
IPv6 地址不是有就行,得是公网可路由的那一种。三类地址一定要分清:
fe80::fd00:: ~ fdff::2000::/3(即 2xxx: 240e: 2408: 2409: 240c: 等)各平台查看方法
群晖 DSM:控制面板 → 网络 → 网络界面 → 选中局域网 → 编辑 → IPv6,模式选"自动",下方会显示获取到的地址。
威联通 QTS:控制台 → 网络和虚拟交换机 → 接口 → 对应网卡 → IPv6。
飞牛 / Linux / 群晖 SSH:
ip -6 addr show scope global
Windows(如果 NAS 是 Windows 或软路由虚拟机):
ipconfig /all
如果 NAS 只有 fe80:: 开头的地址,说明路由器没有向内网下发 IPv6 前缀。回到路由器:
- WAN 口 IPv6 连接类型:选 DHCPv6 或 SLAAC(国内运营商基本都是 DHCPv6-PD)
- 前缀获取方式:DHCPv6-PD(前缀委派),前缀长度一般
/60或/56 - LAN 口分配方式:SLAAC 或 SLAAC + 无状态 DHCPv6
改完等 1–2 分钟,NAS 上重新查。还是没有就把 NAS 网卡禁用再启用一次。
第三步(最容易被跳过的一步):让 NAS 的地址稳定下来
配好之后过两天突然连不上了,八成栽在这里。IPv6 地址由两部分拼成:
2408:8210:1234:5678 : a1b2:c3d4:e5f6:0789
└── 前缀(运营商给) ──┘ └── 接口 ID(设备自己定)──┘
两部分都可能变,但原因和对策完全不同。
变化一:接口 ID 变(IPv6 隐私扩展)
为了防止被通过固定地址追踪,很多系统默认启用"临时地址 / 隐私扩展",接口 ID 每天甚至每几小时换一次。桌面电脑上这是好事,NAS 上是灾难 —— 你的 DDNS 永远追不上。
怎么判断自己中招了:
ip -6 addr show scope global
输出里如果出现 temporary 或 secondary 字样,就是临时地址。另一个土办法:地址中间含有 ff:fe 的是 EUI-64 地址(由网卡 MAC 推导,天生稳定);一串看不出规律又天天变的,就是临时地址。
关掉它:
Linux / 飞牛 / 群晖 SSH:
# 临时生效,先验证
sudo sysctl -w net.ipv6.conf.all.use_tempaddr=0
sudo sysctl -w net.ipv6.conf.default.use_tempaddr=0
# 确认没问题后写进 /etc/sysctl.conf 永久生效
echo "net.ipv6.conf.all.use_tempaddr=0" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.default.use_tempaddr=0" | sudo tee -a /etc/sysctl.conf
Windows(管理员 PowerShell / CMD):
netsh interface ipv6 set global randomizeidentifiers=disabled
netsh interface ipv6 set privacy state=disabled
群晖 DSM / 威联通默认使用 EUI-64,接口 ID 一般是稳定的,但仍建议按上面的方法确认一遍,不同版本行为不一样。
变化二:前缀变(运营商换 IP)
这个你控制不了。电信/联通/移动的家宽在光猫重拨、线路割接、长时间在线后,都可能换一个新前缀。表现是:地址后半截没变,前面 4 组变了。
对策只有一个:DDNS(第七步细讲)。别想着手动配静态 IPv6 —— 前缀一变,静态配的地址立刻作废。
如果路由器支持"IPv6 接口 ID 手动指定"(OpenWrt、爱快、部分华硕机型有),可以把 NAS 的接口 ID 固定成好记的值比如 ::100,这样前缀变了地址也只是变前半截,排查起来省事很多。
第四步:路由器 IPv6 防火墙放行
核心动作:允许远程访问 NAS 的完整 IPv6 地址 的 指定端口。
先确定要开哪些端口。常见的:
能只开一个 443 走反代,就别开一堆。 每多开一个端口,就是多一个被扫的入口。
各品牌操作位置
华硕(ASUS)
防火墙 → IPv6 防火墙 → 启用 IPv6 防火墙 = 是 → 添加规则:
::100)5001TP-LINK
IPv6 设置 → 防火墙 / "IPv6 转发规则"(不同固件叫法不一),填 NAS 的 IPv6 地址和端口。部分老固件只有"IPv6 防火墙 开/关"总开关。
小米 / 红米
常规路由 → 高级设置 → IPv6 设置,多数机型只有防火墙总开关。若只能关总开关,务必把安全防护做在 NAS 侧(第八步)。
华为
更多功能 → 安全设置 → IPv6 防火墙,选"自定义"后添加放行规则;选"关闭"等于全放行,不推荐。
OpenWrt / iStoreOS(最精确,推荐)
SSH 上去执行:
uci add firewall rule
uci set firewall.@rule[-1].name='Allow-NAS-DSM'
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_ip='2408:xxxx:xxxx:xxxx::100'
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 restart
其中 dest_ip 换成你 NAS 的实际地址。前缀变了这条规则会失效 —— 更稳的写法是只匹配接口 ID,OpenWrt 支持用 ::100/::ffff:ffff:ffff:ffff 这种掩码形式,具体版本差异较大,配完务必用第六步的方法实测。
光猫也可能拦一道
如果你的光猫是路由模式(自己拨号),那么数据要先过光猫再过路由器,光猫上的 IPv6 防火墙同样会拦。这种双层结构非常难调。
强烈建议先把光猫改成桥接、由路由器拨号,只留一层。参考:教你 10 分钟搞定光猫改桥接。
⚠️ 不要图省事直接把 IPv6 防火墙整个关掉。 那等于把 NAS 上所有监听端口(包括 SMB、SSH、数据库、Docker 里那一堆容器)全部暴露到公网。宁可多点两下加规则。
第五步:别忘了 NAS 自己的防火墙
路由器放行了,NAS 自己还有一道。这是"路由器规则明明加了却还是不通"的高频原因。
群晖 DSM:控制面板 → 安全性 → 防火墙。检查规则里的"来源 IP",如果你之前只写了 IPv4 网段(比如 192.168.1.0/24),IPv6 流量会被默认规则拦掉。需要新增一条允许对应端口、来源为"所有"的规则。
威联通:控制台 → 系统 → 安全性 → 允许/拒绝清单。
Linux(ufw):
sudo ufw allow proto tcp to any port 5001
sudo ufw status verbose
注意 /etc/default/ufw 里的 IPV6=yes 必须打开(新版默认开),否则规则只作用于 IPv4。
Docker 部署的服务要单独验证。容器网络的 IPv6 行为取决于 Docker 版本和 daemon 配置,-p 5001:5001 在有的环境下 IPv6 能通、有的不能,不要凭经验假设,直接用下一步的方法实测。如果实测不通,两个常见解法:
- 容器改用
network_mode: host(最省事) - 在
/etc/docker/daemon.json里开启 IPv6 支持("ipv6": true配合"ip6tables": true),改完重启 dockerd
第六步:验证 —— 从公网真实回连
这一步别用"我在家连一下试试"糊弄过去。内网能通不代表公网能通:你在家访问 NAS 的 IPv6 地址,包压根没出过路由器,防火墙规则有没有生效完全测不出来。
必须从外部验证。下面两条命令直接在 NAS 上(SSH 或群晖的终端)执行,是最快的办法:
1. 先确认 NAS 自己有 IPv6 出口,并拿到它的公网地址
curl -6 https://v6.17nas.com
正常会直接回一个地址,比如 2408:8210:1234:5678:a1b2:c3d4:e5f6:789。
- 报错 / 超时 → NAS 根本没有 IPv6 出口,回第二步
- 回来的地址和你在 DSM 里看到的不一致 → 多半是临时地址在作怪,回第三步
想连带看归属地和运营商:
curl -6 "https://v6.17nas.com?format=json"
2. 让公网服务器主动回连你的端口
curl -6 "https://17nas.com/api/tools/port-check.php?port=5001"
这个接口会从 17NAS 的服务器主动向你刚才那个地址的指定端口发起一次 TCP 连接,然后把结果告诉你。返回类似:
{"success":true,"status":"open","ip":"2408:8210:...","port":5001,"ip_version":6,"latency_ms":24}
status 三种结果,对应三种完全不同的问题:
openrefusedfiltered能区分 refused 和 filtered,就能省掉一半瞎试的时间 —— 前者别再折腾路由器了,后者别再折腾 NAS 了。
注意:这个接口只会回连发起请求的那个地址,不接受指定任意 IP。所以命令必须在 NAS 上跑,在你电脑上跑测的是你电脑。每小时限 30 次。
3. 浏览器验证(记得加方括号)
IPv6 地址里全是冒号,浏览器会把它当端口分隔符,必须用方括号包起来:
❌ https://2408:8210:1234:5678::100:5001
✅ https://[2408:8210:1234:5678::100]:5001
用手机关掉 WiFi、走 4G/5G 打开这个地址,这是最贴近真实使用场景的验证。如果手机运营商网络没有 IPv6,会打不开 —— 这不是你配错了,是手机那端的问题。
第七步:地址会变,所以要配 DDNS(AAAA 记录)
现在能连了,但地址是一串没人记得住的十六进制,而且前缀随时会变。解决方案是把域名的 AAAA 记录(IPv6 用 AAAA,IPv4 才是 A)自动指向当前地址。
方案 A:ddns-go(推荐,图形界面)
支持 Cloudflare、阿里云、腾讯云、DNSPod 等,Docker 一行起:
docker run -d --name ddns-go --restart=always \
--network=host \
-v /opt/ddns-go:/root \
jeessy/ddns-go
访问 http://NAS内网IP:9876 配置。关键设置:
- 启用"IPv6",域名类型选 AAAA
- 获取方式:优先选"通过网卡获取",然后用正则过滤掉临时地址
- TTL 设成 60–120 秒,默认的 600 秒意味着前缀变了要等 10 分钟
方案 B:自己写脚本(最简单可靠)
配合前面那个接口,一条 cron 就够了。以 Cloudflare 为例:
#!/bin/bash
# /opt/ddns6.sh —— 每 5 分钟同步一次 AAAA 记录
TOKEN="你的_Cloudflare_API_Token"
ZONE_ID="你的_Zone_ID"
RECORD_ID="AAAA记录的_Record_ID"
NAME="nas.example.com"
IP6=$(curl -6 -sS --max-time 10 https://v6.17nas.com)
[ -z "$IP6" ] && exit 0 # 取不到就不动,别把记录清空
LAST=$(cat /tmp/.ddns6_last 2>/dev/null)
[ "$IP6" = "$LAST" ] && exit 0 # 没变就不发请求
curl -sS -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\":\"$NAME\",\"content\":\"$IP6\",\"ttl\":120,\"proxied\":false}" \
&& echo "$IP6" > /tmp/.ddns6_last
加执行权限并挂到 crontab:
chmod +x /opt/ddns6.sh
crontab -e
# 加入这行
*/5 * * * * /opt/ddns6.sh >> /var/log/ddns6.log 2>&1
ZONE_ID 在 Cloudflare 域名概览页右下角;RECORD_ID 需要先手动建一条 AAAA 记录,再用 API 列出记录拿到。
三个容易踩的点:
- 脚本必须跑在 NAS 上,因为
curl -6 v6.17nas.com返回的是"发起请求那台机器的地址"。跑在路由器上拿到的是路由器的地址,两者不一样。 proxied必须是false。开了 Cloudflare 小黄云,流量就绕回中转了,直连的意义没了(而且 5000/5001 这类端口小黄云也不代理)。- 取不到地址时不要更新记录。上面脚本里那句
[ -z "$IP6" ] && exit 0就是干这个的 —— 见过太多人网络抖一下把 AAAA 记录刷成空值,然后花两小时排查"域名怎么突然解析不了"。
第八步:安全 —— 这一步比前面七步加起来都重要
必须清醒地认识到:IPv6 直连意味着你的 NAS 真真切切地站在公网上,没有 NAT 帮你挡任何东西了。
有个流传很广的错误安慰是"IPv6 地址空间那么大,扫不到我"。这在 2018 年也许成立,现在不成立了。攻击者不再暴力遍历地址空间,而是从这些地方直接拿到活跃地址:
- 证书透明日志(CT Log):你用 Let's Encrypt 给
nas.example.com签了证书,这个域名当天就会出现在公开的 CT 日志里,任何人可查 - DNS 记录爆破:
nas.home.syno.ds.这类子域名是字典里的头几条 - 被动 DNS 数据库、你自己在论坛贴过的截图
结论:只要你配了域名,就要假设地址已经公开。 安全必须靠配置本身,不能靠"没人知道我"。
必做清单
端口层面
- 只放行必要端口,能用反代收敛到 443 就只开 443
- 绝对不要暴露:
445/139(SMB,勒索软件的头号入口)、111/2049(NFS)、3389(RDP)、3306/5432(数据库)、Docker 的2375 - 管理端口(DSM 5000/5001、QTS 8080)改成 10000 以上的非常见端口
- SSH 非必要不开;要开就改端口 + 禁用密码登录、只用密钥
账号层面
- 禁用/改名默认管理员账号(群晖的
admin、威联通的admin),这是扫描器的第一发子弹 - 管理员账号开两步验证(2FA),这一项的性价比最高
- 密码 16 位以上,不与其他站点重复
防护层面
- 群晖:控制面板 → 安全性 → 帐户 → 开启自动封锁(建议 5 分钟内失败 5 次封锁 IP)
- 开启通知,登录成功/失败推送到手机
- 系统和套件保持更新 —— 群晖、威联通历史上都出过被大规模利用的远程漏洞,打补丁比什么都管用
加密层面
- 一律走 HTTPS,别用明文 HTTP 传密码
- 申请证书优先用 DNS-01 验证(在 DNS 里加一条 TXT 记录),不需要开放 80 端口,也不受"运营商封 80"影响
- 群晖 DSM 内置的 Let's Encrypt 走的是 HTTP-01,需要 80 端口可达;如果 80 被封,改用 acme.sh 走 DNS-01
再进一步
- 如果只有你自己和家人用,最稳的做法是不直接暴露 Web 面板,而是只开一个 WireGuard/Tailscale 入口,建立加密组网连接后再访问内网。IPv6 直连在这里依然有价值 —— 它让 WireGuard 能直接建立点对点连接,不用中转
- 定期翻一遍登录日志(群晖:控制面板 → 日志中心)
常见问题速查
curl -6 v6.17nas.com 超时fe80:: 地址filteredrefusedhttp://[地址]:端口network_mode: host 或给 dockerd 开 IPv6什么时候 IPv6 直连不够用
诚实地说,IPv6 直连有一个硬性前提:访问端也必须有 IPv6。以下场景会翻车:
- 公司/学校内网(大量企业网络至今纯 IPv4)
- 部分酒店、公共 WiFi
- 少数还没开通 IPv6 的宽带套餐
- 需要分享给别人访问,而对方的网络环境你控制不了
这些情况下需要一个"IPv4 落地点"作为补充。常见做法是用 CDN/边缘节点做 IPv4 到 IPv6 的回源转换 —— 访客用 IPv4 访问 CDN,CDN 用 IPv6 回源到你家 NAS。具体可以看:无公网 IPv4 怎么办?腾讯云 EdgeOne + IPv6 实现家庭宽带内网穿透。
最佳实践是两条腿走路:IPv6 直连作为主路径(快、免费、无限流量),CDN 或 Tailscale 作为兜底。
相关工具与延伸阅读
配置过程中会用到的检测工具:
- IPv6 连通性检测 —— 确认双栈状态、查看出口地址与运营商
- 端口转发检测 —— 从公网回连验证端口是否真的开放
- NAT 类型检测 —— 如果还要折腾 P2P、游戏联机、WireGuard 打洞
延伸阅读:
- IPv6 vs IPv4 深度解析:全平台开启 IPv6 保姆级教程 —— 各系统开启 IPv6 的详细步骤
- 无需公网 IPv4,告别内网穿透!家庭宽带开启 IPv6 及路由器防火墙配置教程
- 教你 10 分钟搞定光猫改桥接 —— 双层 NAT 是 IPv6 配置失败的常见根源
最后再强调一遍:第六步的验证一定要做,第八步的安全一定要做。前者省时间,后者省的可能是你整个 NAS 上的数据。
数据参考:想知道你所在省份和运营商的 IPv6 普及情况,可以查看 中国各省 IPv6 可达率统计(近 30 天真实测试样本,每小时更新)。
