您是否拥有一台放在异地(例如家中或办公室)的群晖(Synology) NAS,并希望无论身在何处,都能像在本地一样通过 SSH 安全地进行管理?这里记录了如何利用 Cloudflare Tunnel(零信任隧道)实现这一目标。
使用 Cloudflare Tunnel 的优势:
- 无需公网 IP:即使您的群晖处于复杂的内网环境,也无需担心公网 IP 问题。
- 无需开放端口:您无需在路由器上设置任何端口转发,极大地提升了安全性,避免了将 SSH 端口暴露在公网被恶意扫描。
- 高度安全:所有流量都通过 Cloudflare 的全球网络进行加密和保护,并可享受其强大的 DDoS 防护能力。
- 稳定且免费:Cloudflare 为个人用户提供了慷慨的免费套餐,足以满足远程 SSH 管理的需求。
准备工作:
- 一台群晖 NAS:并知道其管理员账户和密码。
- 一个您自己的域名:例如
yourdomain.com
,并且您需要能够修改这个域名的 DNS 设置。
第一部分:在 Cloudflare 进行云端设置
在这一部分,我们将在 Cloudflare 的管理后台创建一个隧道,并获取连接所需的令牌。
步骤 1.1:将您的域名添加到 Cloudflare
如果您的域名还没有交由 Cloudflare 管理,请先登录 Cloudflare 官网,点击 “Add a Site”,按照指引将您的域名添加进来。这通常需要您在您的域名注册商处,将域名的 DNS 服务器(Name Servers)修改为 Cloudflare 指定的地址。
步骤 1.2:进入 Zero Trust 管理后台
在 Cloudflare 主仪表盘,从左侧菜单选择 Zero Trust。首次进入可能需要您选择一个免费计划并设置一个团队名称。
步骤 1.3:创建隧道 (Tunnel)
- 在 Zero Trust 后台,从左侧菜单选择 Access -> Tunnels。
- 点击 Create a tunnel 按钮。
- 为您的隧道起一个容易识别的名字,例如
synology-nas
,然后点击 Save tunnel。
步骤 1.4:获取并保存连接器令牌
创建隧道后,您会看到一个“Choose your environment”的页面。这里会提供在不同操作系统上安装连接器(cloudflared
)的命令。
这是非常关键的一步! 在右侧的命令框中,您会看到一整条安装命令,类似于 cloudflared service install ey...
。您只需要复制这串命令中,跟在 install
后面的那段看起来像乱码的字符串,这就是您的隧道令牌(Token)。请将这串令牌完整地复制下来,保存在一个安全的地方,我们马上会在群晖上用到它。
第二部分:在群晖 NAS 上安装和配置隧道 (套件中心版)
现在,我们使用更方便的套件中心方法,在您的群晖上安装 cloudflared
软件,并让它连接到 Cloudflare。
步骤 2.1:添加第三方套件源
- 登录您的群晖 DSM 桌面,打开 套件中心 (Package Center)。
- 点击右上角的 设置 (Settings) 按钮。
- 在弹出的窗口中,选择 套件来源 (Package Sources) 标签页。
- 点击 新增 (Add),在“名称”处输入
SynoCommunity
,在“位置”处输入以下地址:https://packages.synocommunity.com
- 点击 确定 (OK) 保存。
步骤 2.2:从套件中心安装 Cloudflared
- 回到套件中心主界面,在左侧菜单选择 社群 (Community)。
- 在右上角的搜索框中,输入
Cloudflared
进行搜索。 - 找到
Cloudflared
套件,点击 安装套件 (Install)。 - 等待安装完成。这一步会自动处理好用户、权限和后台服务等问题。
步骤 2.3:配置隧道令牌
- 安装完成后,在套件中心找到
Cloudflared
,点击打开 (Open)。 - 套件的配置界面会非常简洁,通常会有一个输入框,提示您输入 Tunnel Token。
- 将您在 步骤 1.4 中从 Cloudflare 仪表盘复制的那一长串令牌字符串,完整地粘贴到这个输入框中。
- 点击应用 (Apply) 或 保存 (Save)。套件会自动在后台启动并使用您的令牌连接到 Cloudflare 的网络。
步骤 2.4:验证连接并指向 SSH 服务
- 回到您浏览器中的 Cloudflare Zero Trust 后台。刷新页面,您应该能在刚才的隧道配置页面看到您的连接器状态显示为 “Connected”。如果看到了,说明您的群晖已经成功连接到云端!
- 现在,我们来告诉这个隧道,当收到请求时,应该把它转发到群晖的 SSH 服务。点击 Public Hostnames 标签页。
- 点击 Add a public hostname。
- 填写规则:
- Subdomain: 输入一个您喜欢的子域名,例如
ssh
或nas
。 - Domain: 选择您的域名。
- Path: 留空。
- Service:
- Type: 必须选择
SSH
。 - URL: 输入
localhost:22
(22
是群晖 SSH 服务的默认端口)。
- Type: 必须选择
- Subdomain: 输入一个您喜欢的子域名,例如
- 点击 Save hostname 保存。
至此,服务器端的配置已全部完成!
第三部分:在您的电脑上配置 SSH 客户端
最后一步,我们需要配置您自己电脑上的 SSH 客户端,让它知道如何通过 Cloudflare Tunnel 进行连接。
步骤 3.1:在您的电脑上安装 cloudflared
您的电脑也需要安装这个工具来作为“客户端代理”。您可能会疑惑,为什么群晖上装了,电脑上还要装?这是因为它们扮演的角色不同:群晖上的 cloudflared
负责把内部服务安全地“送”到云端;而您电脑上的 cloudflared
则负责将您的 SSH 命令安全地“带”到云端。两者在云端握手,才能构成一条完整的加密通道。
- 官方下载地址:https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/
- 请根据您的操作系统(Windows/macOS/Linux)下载并安装。例如,在 macOS 上,推荐使用 Homebrew:
brew install cloudflared
。
步骤 3.2:修改本地 SSH 配置文件
这是让魔法发生的关键。
- 用文本编辑器打开您电脑的 SSH 配置文件。通常位于
~/.ssh/config
(macOS/Linux) 或C:\Users\您的用户名\.ssh\config
(Windows)。如果文件或目录不存在,请手动创建。 - 在文件中添加以下配置块:
# Connect to Synology NAS via Cloudflare Tunnel Host ssh.yourdomain.com ProxyCommand /opt/homebrew/bin/cloudflared access ssh --hostname %h
- 请务必修改:
Host ssh.yourdomain.com
: 将这里的ssh.yourdomain.com
替换为您在 步骤 2.4 中设置的完整主机名。/opt/homebrew/bin/cloudflared
: 将这里替换为您电脑上cloudflared
的实际安装路径。您可以在终端中输入which cloudflared
(macOS/Linux) 或where.exe cloudflared
(Windows) 来找到它。
第四部分:开始远程连接!
所有配置都已完成!现在,无论您身在何处,只需打开您电脑的终端,输入我们熟悉的 SSH 命令:
ssh [您的群晖用户名]@ssh.yourdomain.com
(请将 ssh.yourdomain.com
替换为您自己的主机名)
您会发现,系统会正常提示您输入密码,验证通过后,您就成功登录到了远方的群晖 NAS!
结语与常见问题排查
恭喜您!您已经成功搭建了一条极其安全、便捷的回家之路。
- Q: 连接超时或失败怎么办? A: 首先,请回到 Cloudflare Zero Trust 的隧道管理页面,确认您的隧道连接器状态是否为绿色的 “Connected”。如果不是,请尝试在群晖套件中心重启 Cloudflared 套件。如果状态正常但仍无法连接,请仔细检查您本地
.ssh/config
文件中的主机名和ProxyCommand
路径是否完全正确。 - Q: SSH 连接时提示
Classic tunnels have been deprecated
错误? A: 这是因为您的 SSH 配置文件中ProxyCommand
命令过时了。请确保您使用的是cloudflared access ssh --hostname %h
而不是旧的cloudflared tunnel ...
命令。 - Q: 使用
sudo
时,即使输入正确的密码也提示失败? A: 这很可能是因为您本地电脑的键盘布局与远程服务器不一致,导致输入的特殊字符(如@
,!
,#
)出错。请参考我们之前的讨论,使用“回显测试”或暂时修改为简单密码来解决。