banner
约 1,800 字
6 分钟

家用 NAS 接入腾讯 EdgeOne,配合 Lucky 反代实现无端口访问

摘要

家庭宽带封了 80/443,NAS 服务分享出去总带着一串端口号,而且只有公网 IPv6 时纯 IPv4 网络根本连不上。本文用 Lucky 的 DDNS + 反向代理搭配腾讯 EdgeOne,一个域名解决隐藏端口和双栈访问两个问题,并附完整的配置参数与常见故障排查。

前言

家用 NAS 上跑的服务,在外网访问时最常遇到两个麻烦。

第一个是端口号。家庭宽带的 80 和 443 端口基本都是封死的,所以不管你在 NAS 上装了什么,最后分享出去的链接都得挂上一串端口号,形如 https://nas.example.com:16666。自己用倒无所谓,可一旦要把链接发给朋友或家人,很多人看到带端口的地址就会犯嘀咕——这正规吗?点进去安全吗?

第二个是网络制式。现在家庭宽带一般只分配公网 IPv6,没有公网 IPv4。而我之前在的公司内网只有 IPv4,这种情况下根本连不上家里的 NAS,服务等于白搭。

我之前写过一篇用 CDN 套一层的办法来解决这两个问题,但步骤比较绕,而且如果 CDN 和域名解析不是同一家服务商,还得准备两个域名来回倒腾。

所以这次换一个思路:Lucky 负责 DDNS、反向代理和证书,腾讯 EdgeOne 负责边缘加速和双栈转换,一个域名就能全部搞定。腾讯云 EdgeOne 和阿里云 ESA 的设置流程差不多,这里以 EdgeOne 为例完整走一遍。

先打个预防针:这套方案解决了隐藏端口和双栈访问,但数据仍然要走 CDN 节点中转,网速会明显下降。开个网页、用用 Web 工具类服务没问题,想靠它远程看高清电影就别指望了。

方案原理

动手之前先理清楚数据是怎么走的,后面配置时不容易懵:

外网用户 → 域名(443,无端口)→ EdgeOne 边缘节点 → 回源到主域名:16666 → 家庭宽带 → NAS 上的 Lucky → 具体的内网服务

三个部件各司其职:

  • Lucky:一个集成度很高的国产工具,这里用到它三个能力——DDNS(把家里变动的 IPv6 地址自动写进域名解析)、反向代理(把不同子域名转发到内网不同服务)、SSL 证书自动申请与续期。

  • EdgeOne:腾讯云的边缘安全加速平台,本质上是个 CDN。它替我们承担了两件事:一是用户侧只访问它的 443 端口,端口隐藏的问题就此消失;二是它天然支持 IPv4/IPv6 双栈,纯 IPv4 网络下的用户也能访问只有 IPv6 的家里网络。

  • 域名:只需要一个,解析和加速都在 EdgeOne 一处完成,不用两个域名来回倒。

为什么回源还要用 16666 这种非常规端口?因为家庭宽带的 80/443 入站是被运营商封掉的,NAS 侧只能监听高位端口。好在 EdgeOne 回源时可以手动指定端口,于是用户看到的是干净的 https://子域名.你的域名.com,后面的脏活全在背后悄悄完成。

顺带说一下和 Cloudflare 的区别:Cloudflare 是最省事的,解析里把小云朵点亮就行,甚至可以直接用 Cloudflare Tunnel,连 Lucky 都不用装。EdgeOne 和阿里云 ESA 的配置稍麻烦一些,优势是国内节点、备案后国内访问速度通常更好。三者思路相通,选哪个主要看你和访问者在哪边。

准备工作

  • 一个域名(准备好托管到 EdgeOne)

  • NAS 上已安装 Lucky,Docker 或直接安装均可

  • 腾讯云 EdgeOne 账号:有备案选国内版,没有备案选国际版,两者都能用

  • 确认家里有公网 IPv6,在 NAS 上执行 curl -6 ifconfig.co 能返回地址即可

Lucky 设置

1. 创建动态域名

打开 Lucky 的「动态域名」页面,点击新建任务,进入 DDNS 新增任务页面。

  • 任务名称:任意,方便自己识别就行

  • 托管服务商:选择 EdgeOne

blog image

接着点击 创建密钥。这里要说明一下,EdgeOne 分国内版和国际版,两者都可以用,推荐有备案的选国内版、没有备案的选国际版,否则国内版会因为备案校验卡住接入流程。

blog image

把生成的密钥填回 Lucky 对应位置。

blog image

然后添加一条解析记录。

blog image
  • 记录名填:主域名

  • 记录类型:IPv6

blog image

看到状态里出现 IPv6 地址,就说明 DDNS 已经正常工作了。这一步是整个方案的地基——如果这里拿不到地址,后面全都白搭。

blog image

2. 添加 SSL 证书

证书交给 Lucky 自动申请,省得每三个月手动换一次。

  • 添加方式:ACME

  • 颁发机构:Let's Encrypt

  • 验证方式:EdgeOne

  • 密钥:填写刚才创建的那个

  • 域名列表:主域名 + 泛域名

blog image

域名列表这里建议直接把泛域名一起签了,比如同时填 example.com*.example.com。这样后面不管加多少个子域名服务,都不用回头重新申请证书。验证方式选 EdgeOne 是因为 DNS 解析就在 EdgeOne,Lucky 通过 API 自动添加一条 TXT 记录完成验证,全程无需手动干预。

3. 添加 Web 服务

进入 Web 服务,新建一个监听:

  • 监听类型:IPv6

  • 监听端口:16666

  • TLS:勾选

blog image

监听类型选 IPv6 是因为家里只有公网 IPv6,如果你的网络有公网 IPv4,选 IPv4 或同时勾选都可以。端口 16666 只是示例,换成其他高位端口也完全没问题,只要和后面 EdgeOne 的回源端口对得上即可。勾选 TLS 之后,Lucky 到 EdgeOne 这一段回源链路也是加密的。

4. 添加子规则

Web 服务建好后,还要告诉 Lucky 每个子域名该转发到哪个内网服务,这就是子规则的作用。

  • 前端地址:子域名,比如 lucky.229329.xyz

  • 后端地址:服务内网地址,比如 http://192.168.2.185:16601

blog image

NAS 上每多一个服务就加一条子规则,前端地址各不相同,后端地址填该服务在 NAS 上实际监听的端口。这是 Lucky 反向代理最实用的地方:对外只有一个端口 16666 入口,内部却可以按子域名分发到任意多个服务。

EdgeOne 设置

1. 将域名添加到 EdgeOne

blog image

接入方式有 CNAME 和 NS 两种:CNAME 适合快速接入加速服务,NS 适合长期使用、后续还要在 EdgeOne 上管理其他解析记录的情况。本方案因为 Lucky 要通过 API 改解析,用 NS 托管会更顺手,但两者都能跑通,选一个即可。

2. 添加加速域名

  • 加速域名:*

  • IPv6 访问:开启

  • 源站配置:主域名

  • 回源端口:16666

  • 模板:网站加速

blog image

加速域名填 * 是通配写法,意思是所有子域名都走这一套加速配置,这样后面在 Lucky 里加新子规则时,EdgeOne 这边就不用再重复配置了。回源端口必须和 Lucky Web 服务的监听端口一致,这是最容易填错的一处。

配置完成后开启加速、配置好证书,等待部署完成,通常需要几分钟。

3. 站点加速

进入站点加速配置,把 IPv6WebSocket 都打开。

blog image

WebSocket 一定要记得开。很多 NAS 上的服务(比如一些网盘面板、下载工具的 Web UI、终端类工具)依赖 WebSocket 做实时通信,不开的话页面能打开但功能会各种失灵,而且报错信息往往很隐晦,排查起来浪费时间。

访问验证

全部设置完毕后测试一下,直接通过域名、不带任何端口号,服务正常打开。

blog image

到这里,开头的两个问题就都解决了:链接干净没有端口号,纯 IPv4 网络下也能访问只有 IPv6 的家里 NAS。建议再用手机切换蜂窝网络测一次,确认不走家里 Wi-Fi 时同样能打开,这一步才算真正过关。

常见问题

访问速度很慢怎么办? 这是 CDN 中转的固有代价。可以试试 IP 优选,挑选到 EdgeOne 节点更快的线路;如果域名有备案,用国内版并接入国内节点后速度通常会有明显改善。

申请证书失败了? ACME 偶尔会失败,多试几次就行。如果反复失败,可以照原文作者的经验:先手动添加一条子域名的解析记录,等证书申请成功后再把这条记录删掉。

页面能打开但功能不正常? 优先检查 EdgeOne 的 WebSocket 开关是否打开,其次看 Lucky 子规则里的后端地址和端口是否填对。

域名一直解析不到? 回到 Lucky 的动态域名页面,看任务状态里有没有出现 IPv6 地址。没有的话先排查家里路由器是否放行了 IPv6、光猫是否为桥接模式。

最后

这套方案的核心价值其实就两个字:体面。链接上没有端口号,分享出去不会让人犹豫;不管对方是 IPv4 还是 IPv6 网络,都能正常打开。代价是速度会打折,所以我的做法是把轻量级的 Web 工具、管理面板挂上去,影音这类大流量服务还是老老实实走直连或内网穿透。

如果你已经在用 Cloudflare 且访问速度够用,其实没必要迁移。但如果你和访问者主要在国内,或者域名已经托管在腾讯云,EdgeOne 这条路值得花半小时试一下——毕竟这是免费额度就能跑起来的方案。

END