Skip to content

NAS折腾日记①

Published: at 00:00
· 阅读约 5 分钟

距离上一次把NAS装好也过去了一段时间,基础的服务都跑起来了,局域网内的体验没什么问题,Docker上部署的几个服务也一直很稳。

但有一件事从装机第一天就让我很不爽——外网访问。

外网访问

装NAS的初衷之一就是在外地也能随时访问家里的文件,但事实证明,这个需求比我想象中难搞得多。

我最初的方案是IPv6 + Zerotier打洞,听起来很美好:两边都有公网IPv6,如果遇到不支持IPv6的网络环境,也可以使用Zerotier负责穿透,理论上P2P直连,速度应该杠杠的。

实际上跟shit一样。

首先我家的NAS接的是电信宽带,现在手机流量套餐基本上都支持IPv6了,但路由器的IPv6适配良莠不齐。公司WiFi、商场热点、甚至连一些朋友家的路由器,要么没开IPv6,要么防火墙策略直接把入站流量全拦了。

说白了就是能不能连上完全看命。

更让人绷不住的是跨运营商的IPv6带宽。有一次坐车回家的路上,想看看NAS里的番打发时间,结果一个720p低码率的视频愣是加载了半天。移动的热点连电信的宽带,中间那点带宽全被跨网QoS吃干净了,卡得像在用什么上古拨号上网。

Zerotier打洞成功率也不稳定,有时候直连确实能跑起来,但更多时候莫名其妙就走的转发服务器,延迟直接飙到几百毫秒。

这条路走到头了,结论很明确:IPv6 + Zerotier在国内这种复杂的网络环境下根本不靠谱。跨运营商的带宽、路由器的适配、防火墙策略,每一个环节都可能卡你一下。

既然P2P打洞走不通,那就只能老老实实走中转——用frp内网穿透。

frp内网穿透

思路很简单:租一台有公网IP的服务器跑frp服务端(frps),NAS上跑客户端(frpc)把内网端口映射出去。外网访问的时候直接连服务器的公网IP+端口,请求会通过frp隧道转发到NAS上。

不走P2P,不走IPv6,就是最传统的C/S转发,稳如老狗。

方案选择

市面上提供frp穿透服务的商家不少,比较常见的有:

但这些第三方服务的机房大多在国内,想用80和443端口的话必须域名备案。说到备案,我这个幽灵域名的情况实在是一言难尽,走国内服务器这条路基本不用想了。

所以我选了一家支持香港节点的服务商,服务器就定在香港。

为什么选香港

就一个原因:不需要备案

香港的服务器不在大陆的ICP备案管辖范围内,80和443端口可以直接用。这意味着我可以用自己的域名直接访问NAS上的Web服务,不用在后面加一串奇怪的端口号。

虽然香港到大陆的延迟比国内BGP高一点,但带宽稳定性没问题。而且frp本身是TCP长连接,那点延迟在实际使用中几乎无感。

部署过程比预想的顺利,frp隧道成功打通。

frpc的配置文件大致如下:

# frpc.toml
serverAddr = "你的服务器IP"
serverPort = 7000

auth.method = "token"
auth.token = "你的认证token"
user = "你的用户标识"

[transport]
protocol = "tcp"

[transport.tls]
enable = true

[[proxies]]
name = "影视"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5139
remotePort = 8091

[[proxies]]
name = "图床"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 8080

每个 [[proxies]] 块就是一条穿透规则:把NAS本地 localPort 映射到服务器的 remotePort,外网访问 服务器IP:remotePort 就能直达内网服务。

服务端frps的配置则简单得多:

# frps.toml
bindAddr = "0.0.0.0"
bindPort = 7000

auth.method = "token"
auth.token = "你的认证token"

webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "你的仪表盘密码"

# TLS 可选,生产环境建议开启
# transport.tls.force = true
# transport.tls.certFile = "/etc/frp/ssl/server.crt"
# transport.tls.keyFile = "/etc/frp/ssl/server.key"
# transport.tls.trustedCaFile = "/etc/frp/ssl/ca.crt"

webServer 是frp自带的管理仪表盘,端口7500,打开就能看到各客户端的连接状态和流量统计。

测了一下速度,和之前Zerotier那个720p都要转半天的体验比起来,简直一个天一个地。

图床部署

frp通了之后,我顺手在NAS上搭了一个图床。

说实话,被图床服务商牵着鼻子走的感觉憋屈太久了。这两年写博客,图床换了又换,从imgdb再换到路过图床,每次迁移图片都是一场灾难。不是限速就是删图,要不就是哪天突然关站跑路,一堆文章图片全变成裂开的链接。

现在好了,图床直接跑在自己的NAS上,通过frp暴露到公网。图片在自己硬盘里躺着,谁也删不掉,谁也限不了速。唯一的上限就是服务器的带宽,但日常写博客完全够用了。

回头看看这个博客里那几百张散落在各个图床的图片,有一种终于翻身做主人的感觉。

总结

搞了这么一圈,最大的收获不是一个能用的外网方案,而是一种”我的数据我做主”的踏实感。

从Zerotier翻车到frp打通,再到部署自己的图床,每一步都在把主动权从各种服务商手里拿回来。网盘靠不住,图床靠不住,P2P打洞也靠不住——但有台NAS加一台香港服务器,很多事就不用再看别人脸色了。

有些东西看着简单,实际做起来全是细节,折腾无止境。

vrc猫猫1


下一篇文章
NAS从零到有的安装流程