NAS价值回收行动(一)——穿透docker
本文最后更新于 2025-07-21,若需联系:请发至[email protected]
写在前面
以我目前对nas的一小部分了解,若需要使用音乐、影视、docker等功能,使用者则需要简单了解ssh图形工具、命令行、网络层、docker指令之类的基本概念。
穿透的基本了解
众所又不周知,穿透指的是打破NAT屏障:
NAT(网络地址转换,Network Address Translation):是用于解决全球IPv4地址不够,将几个内网设备私有地址通过一个主网关公网地址转发出去的方案。他的好处是:
✅ 地址复用:让多个私有 IP 共享一个公网 IP
✅ 转发连接:把外部发来的数据包转给正确的内网设备(如端口映射)
✅ 安全性:内网设备默认不对外暴露,外部不能随便访问
比如,在家庭网络环境中,所有连接漏油器的设备地址统一都为192.168.X.X ,联网请求通过主漏油器的公网IP,比如10.254.13.72 来连接互联网,这就是一层NAT。
若你所在地区的网络提供商手头v4地址很多,大概率师傅会给公网IP
在本世纪前期,这种技术确实缓解了v4地址紧俏的问题,但随智能设备的增多,单层NAT也不够用。所以无良运营商就开始建设多层NAT,比如:


讲人话就是运营商将分管的地区由大到小分成多个大内网,最后所有内网中的地址只由一个运营商的公网ip接入互联网,更省ip数,但对穿透更加不方便了。
当然NAT层数越多,公网IP+端口映射的方式就越难实现,因为仅凭最内层的设备是没有最外层的ip的控制权的
可能有,那就是他们竞赛的问题了,也不是我的领域不再讨论。
能实现nas的自定义域名访问的方式无非就是内网穿透、公网IP、反代+中转跳板、厂商提供。这里我简单记录一下实现方法,不做展开因为基本上都能搜到教程。
一、内网穿透
适用于没有或很难得到公网IP的场景,比如:师傅不给、多层NAT,校园网等场景。
是由内向外 -> 实现外部访问,通常需要借助第三方的服务来进行打洞服务。
1、Cloudflare Tunnel
新手玩家比较推荐,也是我现在正在使用的方式。虽然cf的anycast网络在中国大陆境内速度并不太快,但平均150~200ms的访问速度对我目前的情况也算温饱使用。受限于我现在的使用场景,以后再去看一下别的方法。
他不需要任何其他的多余操作,仅需要在你所要穿透的主机上部署一个cloudflared程序,所有信息通过此程序中内置的通信tunnel进行握手。
可实现域名访问,但需托管在cf上
2、Tailscale/ZeroTier
本质跟1差不多,只不过需要通信双方提前设置好鉴权认证,但1是vpn默认开启,而2是按需通过专用app打开
挺简单,但不能实现域名访问,还要双方连接vpn隧道,别人tm连QQ都不会安装你让ta搞这玩意??
3、Ngrok / NPS
跟上边差不多,没见几个人用过
二、公网IP -> 端口转发+DDNS
公网IP:若你的nas空间位置固定,长期不移动。比如长期放置在自己家的网络环境下,你可以向漏油器安装师傅索要公网IP(IPv4)来实现从外向内的打洞,不过因为v4的地址没几个了,师傅不一定给。当然也可以通过IPv6地址来使用,不过有的家庭网络也需要联系师傅进超管后台打开v6
端口转发+DDNS:有了公网IP,就能通过在漏油器上配置端口转发,安装DDNS服务来打好洞
我可能7~8年后才能实现这一步适用人群:35~45岁成家立业稳定后的小资群体
三、frp
通过反向代理+一台有公网IP的vps实现。
需要额外开销,估计vps也要大陆优化线路,那成本不是我现在能承受的。
适用人群:35~45岁成家立业稳定后的小资群体+偏程序员圈子+极客
四、厂商提供
最简单,如果你买的是nas整机,而非自己diy。通常内置的系统中厂商会提供他们自己的穿透,比如绿联的UGOS Pro。

通过他给出的链接能实现外网访问,但速率肯定不高,若在外看4K电影资源一定会卡,而且桌面端docker容器完美访问,但手机端通常有不适配界面的问题。所以按需使用。
多半还是要去选上面其他的方式来穿透
我使用的cf tunnel方式:
前提:
一个cloudflare账号
一个托管在cloudflare上的域名
支持docker,支持ssh
建立tunnel
首先进入zero trust ,

进入网络-Tunnels -+创建隧道 -选择cloudflared


※图片A↓

起名随便了,保存隧道 ,一般我都是用的docker部署,比较方便,这里的命令我要说一下:
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token
eyJhIjoiOTQ2MTE4NjljOTliMmMxM2E2YmVlNDE0NDY3Zjk1ZjAiLCJ0IjoiZmRiYjM1NjgtMzMzNi00YjcyLTg2OWItZWFiMjUzNDg3OTU0IiwicyI6IlkyUXlZekl4TnpNdFpqRm1OeTAwWkRaakxUa3pNR0l0TW1RM1l6Z3laR05rTmpReSJ9
cloudflare/cloudflared:latest:是docker的镜像源,我的nas就可以拉取,当然配置好了旁路由外网环境;但我的旁路由就无法正常拉取,显示EOF,所以可以按需替换为国内源 (你自己随便找一个就行)dockerproxy.net/cloudflare/cloudflared:latest
设置自动重启:有的时候他会自动关闭容器,我也不知道为什么,我的nas不会,旁路由会。所以可以在配置命令时加上:
docker run -d --restart=always dockerproxy.net/cloudflare/cloudflared:latest tunnel --no-autoupdate run --token XXX
当然你也可以在docker管理界面,自己打开该容器的自动重启,like↓

通信协议:cf默认使用quic协议,不通时会改为http2,我也不知道是不是旁路由的问题,在没开自动重启之前一直exit,如果你的
※图片A中connectors一直不显示有链接,那你可以尝试更换为http2,指令修改如下↓
docker run -d --restart=always dockerproxy.net/cloudflare/cloudflared:latest tunnel --no-autoupdate run --protocol http2 --token XXX
--token :后面的每台机都不一样,不要按照我的来
反正自动重启一定要开,协议是否更换按需选择就好。
设置主机名
如果上面配置正确,则返回隧道主页会有正常显示,这时编辑此隧道


然后填入合适的内容,就可以通过XXX.域名访问你的docker服务了(当然不加端口号就是整个主机了)

基本操作到此为止
本文感谢chatppt老师亲友团支持)

下面一文,我会备份一下旁路由如何实现