双栈宽带用 IPv6 直连 NAS 完整教程:不做端口映射、不用内网穿透

双栈宽带用 IPv6 直连 NAS 完整教程:不做端口映射、不用内网穿透

适用前提:你的宽带已经是 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
                                          ↑ 只有"放行/拦截",没有翻译

所以:

IPv4 IPv6 需要端口映射吗 需要 不需要 需要动路由器吗 需要 需要(改防火墙入站规则,不是映射) 需要公网 IP 吗 需要(大部分家宽拿不到) 运营商已经给了 需要内网穿透吗 多数情况下要 不要

路由器 IPv6 防火墙默认是"全部入站拒绝"的,这是设计如此、也是应该的。你要做的就是给 NAS 那个地址、那几个端口开一个口子。找菜单的时候别找"端口映射",找 "IPv6 防火墙"。

直连比中转快在哪

这里不吹具体倍数(不同线路差别太大,任何统一数字都是编的),只说结构上的差别:

  • 走中转/穿透:你的数据 NAS → 中转服务器 → 你,多绕一圈,且上限被中转节点的带宽和它的付费套餐卡死
  • 走 IPv6 直连:NAS → 你,走运营商骨干,上限是你家宽带的上行带宽

家宽上行通常是 30–50 Mbps(千兆宽带),这个数才是你直连看片、拉文件的天花板。中转方案往往连这个数都跑不满,这才是"直连更快"的真正来源。

第一步:确认你确实是双栈

打开 17NAS 的 IPv6 检测,看结果属于哪一类:

检测结果 含义 这篇教程适用吗 IPv4 ✅ + IPv6 ✅ 双栈,最理想 ✅ 完全适用 只有 IPv6 纯 v6 网络 ✅ 适用,但访问端也必须有 v6 只有 IPv4 运营商没下发 v6,或路由器没开 ❌ 先去开 IPv6,见文末延伸阅读

注意一个陷阱:这个测试测的是"你现在这台设备"的出口。手机连 WiFi 测出来有 IPv6,不代表 NAS 也有 —— NAS 可能插在一台不转发 IPv6 的交换机/软路由后面,或者本身把 IPv6 关了。所以下一步要单独确认 NAS。

顺带记住测出来的地址前缀(2408:/240e:/2409: 这些),后面对照 NAS 地址会用到。

第二步:确认 NAS 拿到的是"公网 IPv6"

IPv6 地址不是有就行,得是公网可路由的那一种。三类地址一定要分清:

地址开头 类型 能不能远程访问 fe80:: 链路本地地址(Link-Local) ❌ 只在本网段有效,永远不通 fd00:: ~ fdff:: 唯一本地地址(ULA),相当于 v6 版内网地址 ❌ 不可路由 2000::/3(即 2xxx: 240e: 2408: 2409: 240c: 等) 全球单播地址(GUA) ✅ 就是它

各平台查看方法

群晖 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 地址 的 指定端口。

先确定要开哪些端口。常见的:

服务 默认端口 建议 群晖 DSM 5000 (HTTP) / 5001 (HTTPS) 改成非默认端口,只开 HTTPS 威联通 QTS 8080 / 443 同上 飞牛 fnOS 5666 同上 反向代理 443 最推荐:只开这一个 SSH 22 非必要不开,要开就改端口 + 密钥登录

能只开一个 443 走反代,就别开一堆。 每多开一个端口,就是多一个被扫的入口。

各品牌操作位置

华硕(ASUS)
防火墙 → IPv6 防火墙 → 启用 IPv6 防火墙 = 是 → 添加规则:

字段 填什么 远端 IP / 长度 留空(表示任意来源) 本地 IP NAS 的完整 IPv6 地址(不是缩写,不是 ::100) 端口范围 例如 5001 协议 TCP

TP-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 三种结果,对应三种完全不同的问题:

status 含义 该查哪里 open 通了 配置完成,进入第七步 refused 包能到 NAS,但那个端口没人监听(收到 RST) 路由器防火墙是对的;问题在 NAS:服务没启动,或端口填错了 filtered 包被丢了,没有任何回应 路由器/光猫防火墙没放行,或 NAS 自身防火墙拦了

能区分 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 列出记录拿到。

三个容易踩的点:

  1. 脚本必须跑在 NAS 上,因为 curl -6 v6.17nas.com 返回的是"发起请求那台机器的地址"。跑在路由器上拿到的是路由器的地址,两者不一样。
  2. proxied 必须是 false。开了 Cloudflare 小黄云,流量就绕回中转了,直连的意义没了(而且 5000/5001 这类端口小黄云也不代理)。
  3. 取不到地址时不要更新记录。上面脚本里那句 [ -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 超时 NAS 没有 IPv6 出口 回第二步,检查路由器 IPv6 下发 NAS 只有 fe80:: 地址 路由器没做前缀委派 路由器 WAN 改 DHCPv6-PD,LAN 改 SLAAC port-check 返回 filtered 路由器/光猫防火墙没放行 回第四步;光猫是路由模式的先改桥接 port-check 返回 refused 端口没人监听 服务没启动,或端口号填错了;和路由器无关 内网能访问,外网不能 只测了内网,没验证公网路径 用第六步的方法从公网回连 昨天能连,今天不能 地址变了 临时地址(第三步)或前缀变了(第七步 DDNS) 手机 4G 打不开,家里 WiFi 能开 手机运营商网络没有 IPv6 换个网络试;确认不是自己配错 浏览器提示地址无效 忘了加方括号 http://[地址]:端口 公司/学校网络访问不了 那边是纯 IPv4 网络 IPv6 直连在这种场景下不可用,见下 Docker 里的服务不通,宿主机服务通 容器没有 IPv6 改 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 作为兜底。

相关工具与延伸阅读

配置过程中会用到的检测工具:

延伸阅读:

最后再强调一遍:第六步的验证一定要做,第八步的安全一定要做。前者省时间,后者省的可能是你整个 NAS 上的数据。

数据参考:想知道你所在省份和运营商的 IPv6 普及情况,可以查看 中国各省 IPv6 可达率统计(近 30 天真实测试样本,每小时更新)。