记一次 NAT3 环境下的 NAS 远程访问踩坑之旅

2026年03月10日0 次阅读0 人喜欢
NASIPv6NAT飞牛OS网络智能家居

我在安徽家里部署了 NAS(飞牛 OS),想着江苏那边也能随时看下载好的电影。家里的上传带宽很高,理论上应该挺顺畅的。

结果折腾了一整天,才发现这事儿远没那么简单。

一开始的想法

我想法很简单:安徽有 IPv6,理论上直接访问不就行了吗?

我用的是飞牛 OS,装了 ZeroTier 和 Tailscale,想着打洞成功就能点对点直连。但现实很骨感——这两个工具都无法打洞成功,只能走慢得要死的中继模式。

IPv6 直连的坑

首先确认了家里确实有 IPv6 地址,格式大概是这样:

复制代码
240e:b67:3d9e:9600:eaff:1eff:fedf:a813

但在江苏这边访问的时候遇到了一堆问题。

坑一:光猫的 IPv6 防火墙

我一开始用 Mac 的 ping6 测试,一直显示 Unknown host。后来才发现江苏这边虽然没 IPv6,但手机热点是有的。

真正的问题是安徽家里的光猫默认开启了 IPv6 SPI 防火墙,允许内网访问外网,但严禁外网主动发起连接。这就是为什么我用浏览器打不开 http://[IPv6]:18080 的原因。

nc -6 -vz 测试端口的时候发现能连上(succeeded),但浏览器就是打不开,这种"能打通电话但一开口说话就挂断"的感觉很诡异。

坑二:Clash Verge 的干扰

我电脑上装了 Clash Verge,这个是个大坑。

Clash 的日志一直报 ip version error 或者 i/o timeout。后来发现是 Clash 的 DNS 模块在处理 IPv6 请求时出问题了。

在 Clash 的配置文件里加上这些就好了:

yaml 复制代码
ipv6: true

prepend-rules:
  - IP-CIDR6,240e:b67:3d9e:9600::/64,DIRECT,no-resolve
  - IP-CIDR6,240e::/16,DIRECT,no-resolve

tun:
  skip-proxy:
    - "240e:b67:3d9e:9600::/64"
    - "240e::/16"

但即使这样,curl 能返回 200 OK,浏览器还是打不开,显示 Empty reply from server

真相大白:NAT3

折腾到最后,我装了 Lucky 工具来检测网络环境,结果显示:

复制代码
NAT类型检测:NAT3(Port-Restricted Cone,端口受限锥形)

这就解释了所有问题。

什么是 NAT123?

简单来说,NAT 是你家路由器把"私有局域网 IP"转换成"公网 IP"的技术。数字越大,这道门就越"死板",外网想连进你就越难。

  • NAT1:完全开放型。任何人都能连回来,打洞 100% 成功。
  • NAT2:受限锥形。看"熟脸",但换个端口也行。
  • NAT3:端口受限型。不仅看"熟脸",还得看"对应的窗户"。这就是我的情况。
  • NAT4:对称型。基本是死路一条。

NAT3 的规则是:你必须先主动给某个 IP 的某个端口发过包,只有那个 IP 的那个特定端口才能连回你。换个端口都进不来。

这也解释了为什么 ZeroTier 和 Tailscale 都无法打洞成功——在 NAT3 环境下,它们只能走慢速的中继服务器。

桥接模式是什么?

有人建议我把光猫改成"桥接模式"。

简单来说,桥接模式就是把光猫从一个"管得宽的管家"变成一个"透明的传声筒"。光猫只负责光电转换,拨号上网的任务交给自己的路由器。

改成桥接后,NAT 等级通常会从 NAT3 提升到 NAT1 或 NAT2,打洞成功率会大幅提升。

但我在江苏,没法物理接触安徽的光猫。远程操作改桥接风险太大,一旦断网就彻底失联了。

最终方案:云盘中转

既然 NAT3 环境下打洞这么难,我决定换个思路。

飞牛 OS 自带了网盘备份与同步功能。我的方案是这样:

  1. 在飞牛后台绑定阿里云盘
  2. 设置自动同步规则,把下载文件夹同步到云盘
  3. 在江苏直接用阿里云盘 App 看

这样完全避开了 NAT3 的限制,因为 NAS 扮演的是"客户端",主动把数据推出去,这在任何 NAT 环境下都是畅通无阻的。

一些技术细节

Lucky STUN 打洞 vs ZeroTier/Tailscale

两者都是为了让外网能访问内网,但原理不同:

  • Lucky STUN:探测光猫分配的公网端口,建立 1:1 的访问通道
  • ZeroTier/Tailscale:建立加密隧道,把两台设备放在同一个"虚拟局域网"

在 NAT3 环境下,Lucky STUN 需要的是"安徽端"能穿透,而 ZeroTier/Tailscale 追求的是双向对称打洞,所以后者更难成功。

那些有用的命令

bash 复制代码
# 测试 IPv6 连通性(需要加引号)
curl -v -g -6 "http://[240e:b67:3d9e:9600:eaff:1eff:fedf:a813]:5666/"

# 测试端口是否开放
nc -6 -vz 240e:b67:3d9e:9600:eaff:1eff:fedf:a813 16601

# Ping 测试(带大包测试 MTU)
ping6 -s 1400 240e:b67:3d9e:9600:eaff:1eff:fedf:a813

# 查看 IPv6 地址
ifconfig | grep inet6

总结

这次折腾让我明白了几件事:

  1. IPv6 虽好,但光猫的防火墙是个大坑
  2. Clash 这类代理软件会干扰 IPv6 访问,需要配置绕过规则
  3. NAT 类型决定了你能否成功打洞,NAT3 是个硬伤
  4. 如果人在异地无法改桥接,云盘中转是最稳妥的方案

最后我选择了飞牛 OS + 阿里云盘的方案。虽然不是直接访问 NAS,但胜在稳定可靠,不用再跟各种网络协议死磕了。

有时候曲线救国,比直线撞墙要实用得多。

加载评论中...