

一、背景:
截止到2024年12月,绿联的在售NAS产品,针对不同性能的硬件,存在2种操作系统:UGOS和UGOS Pro,前者是基于OpenWRT的绿联定制版,系统使用opkg管理ipk安装包;UGOS Pro是基于Debian发行版,功能更完整,在debian系统内有更好的扩展性。
对于此类Linux系统,当用户希望增强一些功能时,通常会使用SSH远程连接到系统控制台,以管理员权限安装系统应用软件商店中(图形界面)没有提供的软件。在绿联UGOS系统中,SSH远程管理不是默认开放的,它的开关是“设备管理”内的“调试功能”。每次都要通过注册过的手机,以接收验证码的形式申请开通,但只有3天有效期,过期后自动关闭SSH。这是设计者为增强NAS产品安全性,而提供的一种保护机制,适用于多数普通用户,但对于喜欢探索和充分挖掘系统性能的极客们来说,这种设定显得相当“烦人”。注意:UGOS Pro版本中的“调试功能”是远程协助,UGOS Pro有单独的SSH功能开关,也不存在UGOS中那种“烦人”的调试功能时效限制!
本文讨论的内容,是有关在绿联UGOS内安装Tailscale/Headscale,构建VPN网络,实现内网穿透、点对点加密端点直连通讯,并利用Tailscale内置的SSH功能突破UGOS对SSH的限制。
二、环境:
对部署过程中逼坑内容感兴趣的读者,读完这小节可以直接跳到后面看安装环节的内容。
文中讨论内容所涉及的软、硬件环境如下:
硬件:绿联云4600系列,系统版本:绿联UGOS(服务版本v5.2.0,系统版本/固件版本v.4.2.0.1150)
软件:Tailscale客户端v1.76.1及以上版本;Tailscale的开源实现Headscale v0.23.0;Headscale的第三方WebUI界面Headplane v0.3.5
三、选型:
构建VPN/加密隧道有很多选择,为什么选Tailscale/Headscale?VPN/加密隧道网络能用来做什么,在这里就不作更多科普了。有兴趣阅读这篇文章的读者,对此项古老的网络应用多少都有所了解。能够实现上述目的的软件,存在多种选择,有历史悠久的OpenVPN,也有去中心化技术的WireGuard和基于它的各种商业和开源应用软件。比如Zerotier和Tailscale(包括它的开源实现Headscale);如果把各类内网穿透应用也算上,会有更多的如Frp、向日葵、DDNSto等等一大票应用服务;当然也包括能提供VPN接入功能的专用硬件设备(路由器、访问控制器、甚至是多功能的防火墙设备)。
它们各自都有功能上的特色,也有实现过程中的限制条件,不能简单判断孰优孰劣。仔细梳理需要的功能和具备的环境条件(包括网络接入环境和自身技术能力),找到能满足自身需求的实现方案,才是最佳的判断标准。对于个人和小团队的应用环境,考虑到远程接入的连接数量和数据交换量可能不太大,从低费用的角度考虑,软件实现方案是最佳选择(特别是免费的开源应用)。除此之外还有以下几点考量:
1、想避免自己架设VPN服务器所需的技术和硬件投入,使用Zerotier和Tailscale,甚至是向日葵、DDNSto等等都是很好的选择;
2、上述这些方案,对于免费用户都有接入数量和功能上的一些限制,所以可以考虑架设开源的Frp、Headscale(基于Tailscale技术的开源版)。问题来了,上述这2个应用和传统VPN有什么区别(通过OpenVPN或VPN硬件接入设备架设的服务)?:
a) 用于内网穿透的Frp和Headscale,比较容易实现NAT打洞,也就是协助NAT设备后面的设备,透过互联网在加密的隧道节点之间,建立点对点连接。说人话就是,使位于家用路由器后面的局域网设备,在加密网络内,不通过中心服务器(传统VPN的接入服务器或硬件)交换加密的数据,让节点之间通过点到点的方式,直接交换数据,降低服务器的性能压力,减少数据传输延时。
b) Headscale/Tailscale提供分布式接入能力,通过架设多台Derp(绕路的加密路由协议)中继服务器,可以协助加密网络内的客户端(通过连接延迟最低的DERP),实现数据交换或节点之间建立直接的点对点加密通讯。这能降低对中心服务器,对网络带宽和性能的要求。中心服务器,就只需要负责节点加入网络的认证,不承担节点间加密数据的交换。
c) Headscale/Tailscale提供的Exit Node功能,可以为加密网络内的节点提供不同的网络出口,扩展网络联通能力(关于这一点,不方便过多讨论,请参考官方技术文档和网上其它深入探讨的文章^0^)。
d) 就本文写作目的而言,利用Headscale/Tailscale提供的SSH功能(它不依赖于linux系统内sshd是否已经运行),可以突破绿联UGOS对SSH远程访问的时效限制。
三、部署环节中要避开的大坑
为了突破UGOS对SSH的限制,只需要在被控端和主控端的系统内安装Tailscale的客户端软件,再登录Tailscale账号,使用它的在线服务,将这些客户端加入到自己的私有网络中,并启用Tialscale客户端提供的SSH功能就可以了。整个过程不需要自己部署后台服务、增加额外的硬件投入。上面的描述很简单,但在绿联UGOS中实现上述目的,还是有很多注意事项。
Tailscale是商业服务,免费用户有接入端点数量的限制,对设备数量不多的用户是够用了。

首要困难就是在UGOS中安装Tailscale客户端:
绿联的UGOS是基于OpenWRT的魔改版。Tailscale官方提供适配linux系统的安装脚本(https://tailscale.com/install.sh),会报告无法识别该系统类型,不能安装。在这个魔改的系统内,也不能通过opkg包管理器安装tailscale(它的资源库中找不到这个软件包);
解决方法:通过github上的这个项目https://github.com/adyanth/openwrt-tailscale-enabler完成安装(截止到2024年12月,该项目作者提供的最新安装包是openwrt-tailscale-enabler-v1.60.0-e428948-autoupdate.tgz)。

用作者的安装说明逐步操作时,会要求安装有关的依赖软件,但你会遇到kmod-tun安装失败的提示(报告版本不兼容)。经过测试,绿联UGOS当前固件版本(v.4.2.0.1150)内,已经存在kmod-tun(版本v5.10.120-1)支持tailscale正确运行所有功能。因此,可以忽略kmod-tun组件安装失败的提示。
UGOS中Tailscale客户端频繁更新的问题:
通过上述方法安装Tailscale客户端,你会发现每次重启系统后,在终端界面使用tailscale客户端的任何命令时,都会先触发软件更新。哪怕刚完成软件更新就再次重启,也会触发重复更新动作。有人在该Github项目中也反馈了这个问题,但其实作者的安装包使用说明中已经给出了提示:软件更新后需要用位于/tmp目录中的/tmp/tailscale和/tmp/tailscaled这两个文件,替换/usr/bin/目录中的同名文件,这样才算是完成了更新(可以避免每次重启系统后反复触发软件更新的情况)。注意观察:替换前,这两个位置的同名文件,存在大小差异!

客户端更新,是直接从tailscale官网下载文件。这里可能存在更新失败的情况,严重时会出现文件不完整,导致软件无法正常启动。出现这种情况,先尝试执行tailscaled -cleanup,然后再让软件执行更新动作。

启用Tailscale客户端的SSH功能和数据安全问题:
网上已经存在很多如何使用Tailscale(账号注册,设备加入网络)的教程,本文不再重复说明。如果要启用Tailscale客户端的SSH功能(注意:Windows系统中,Tailscale客户端SSH功能是无效的,Windows系统本身就不支持SSH),只需要在Tailscale启动参数中追加-SSH参数(例如,在命令行执行tailscale up –ssh,其它参数根据自己的网络需求保持不变),就可以不依赖系统(比如linux)内原有的ssh服务,让位于私有tailscale网络(VPN)中的其它客户端,通过ssh方式访问开通了Tailscale SSH服务的端点(当然,连接时要使用VPN网络分配的IP地址)。就本文所述要实现的目标来说,不论绿联UGOS的“调试功能”是否开启,都能用任意远程管理软件,通过SSH方式连接并管理NAS系统。
使用Tailscale官方在线服务的默认配置,到此已经实现了上述目的,但这里面隐含了Tailscale访问控制列表(ACL)的配置问题。Tailscale用户通过配置ACL规则,对VPN网络内的设备通讯,实现灵活和功能完善的安全控制。Tailscale默认的ACL规则,已经开放了VPN设备间SSH的通讯功能。如果你使用了自己搭建的Headscale服务器,就需要正确编写ACL才能保证SSH功能正常使用。Headscale是Tailscale开源实现,但它们之间存在启动命令和ACL语法上的差异,有关这些内容我将在下一篇文章中详细讨论。
另外,关于安全问题还有一点需要注意。Tailscale构建的是VPN网络,数据本身是加密传输的,但Tailscale具备分布式特性,如果VPN网络内的端点之间不能建立点对点直连的加密通讯,就会依靠Tailscale提供的公共Derp服务器(全球分布有几十个Derp服务器接入节点)来转发VPN网络的加密数据。

因此,有些对数据外流(虽然已经是加密的)比较敏感的用户,就要通过架设私有Derp服务器(通常也会架设自己的Headscale服务)来降低数据被截获的风险。同样,这些内容也将在下一篇文中进行讨论,敬请关注我的更新。
有终极解决方案?
费那么大劲,组建VPN、内网穿透,就为了规避UGOS对SSH的限制,这么折腾值吗?其实有个一劳永逸的解决方案:目前绿联4600系列NAS用户可以在官方公众号里,申请免费升级为UGOS Pro系统。UGOS Pro系统里的SSH功能,没有前文所述“烦人”限制。但升级前,你需要考虑下面2个情况:
1、升级时要重新格式化存储空间。你需要准备足够的外部存储空间,在升级前暂存数据。
2、升级UGOS Pro后,不能再降级为UGOS。虽然UGOS Pro系统提供了很多增强功能,但还处在不断完善的阶段,截止到2024年12月,该系统仍有一些小问题。具体内容可以看B站up主,司波图,在2024年12月发布的长测视频:【两小时长测!绿联NAS的UGOS Pro现在到底怎么样?(基于DXP4800 Plus)】。