使用 Cloudflare Tunnel 安全访问远程群晖 SSH

2025-07-12

您是否拥有一台放在异地(例如家中或办公室)的群晖(Synology) NAS,并希望无论身在何处,都能像在本地一样通过 SSH 安全地进行管理?这里记录了如何利用 Cloudflare Tunnel(零信任隧道)实现这一目标。

使用 Cloudflare Tunnel 的优势:

  • 无需公网 IP:即使您的群晖处于复杂的内网环境,也无需担心公网 IP 问题。
  • 无需开放端口:您无需在路由器上设置任何端口转发,极大地提升了安全性,避免了将 SSH 端口暴露在公网被恶意扫描。
  • 高度安全:所有流量都通过 Cloudflare 的全球网络进行加密和保护,并可享受其强大的 DDoS 防护能力。
  • 稳定且免费:Cloudflare 为个人用户提供了慷慨的免费套餐,足以满足远程 SSH 管理的需求。

准备工作:

  1. 一台群晖 NAS:并知道其管理员账户和密码。
  2. 一个您自己的域名:例如 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)

  1. 在 Zero Trust 后台,从左侧菜单选择 Access -> Tunnels
  2. 点击 Create a tunnel 按钮。
  3. 为您的隧道起一个容易识别的名字,例如 synology-nas,然后点击 Save tunnel

步骤 1.4:获取并保存连接器令牌

创建隧道后,您会看到一个“Choose your environment”的页面。这里会提供在不同操作系统上安装连接器(cloudflared)的命令。

这是非常关键的一步! 在右侧的命令框中,您会看到一整条安装命令,类似于 cloudflared service install ey...。您只需要复制这串命令中,跟在 install 后面的那段看起来像乱码的字符串,这就是您的隧道令牌(Token)。请将这串令牌完整地复制下来,保存在一个安全的地方,我们马上会在群晖上用到它。

第二部分:在群晖 NAS 上安装和配置隧道 (套件中心版)

现在,我们使用更方便的套件中心方法,在您的群晖上安装 cloudflared 软件,并让它连接到 Cloudflare。

步骤 2.1:添加第三方套件源

  1. 登录您的群晖 DSM 桌面,打开 套件中心 (Package Center)
  2. 点击右上角的 设置 (Settings) 按钮。
  3. 在弹出的窗口中,选择 套件来源 (Package Sources) 标签页。
  4. 点击 新增 (Add),在“名称”处输入 SynoCommunity,在“位置”处输入以下地址: https://packages.synocommunity.com
  5. 点击 确定 (OK) 保存。

步骤 2.2:从套件中心安装 Cloudflared

  1. 回到套件中心主界面,在左侧菜单选择 社群 (Community)
  2. 在右上角的搜索框中,输入 Cloudflared 进行搜索。
  3. 找到 Cloudflared 套件,点击 安装套件 (Install)
  4. 等待安装完成。这一步会自动处理好用户、权限和后台服务等问题。

步骤 2.3:配置隧道令牌

  1. 安装完成后,在套件中心找到 Cloudflared,点击打开 (Open)
  2. 套件的配置界面会非常简洁,通常会有一个输入框,提示您输入 Tunnel Token
  3. 将您在 步骤 1.4 中从 Cloudflare 仪表盘复制的那一长串令牌字符串,完整地粘贴到这个输入框中。
  4. 点击应用 (Apply)保存 (Save)。套件会自动在后台启动并使用您的令牌连接到 Cloudflare 的网络。

步骤 2.4:验证连接并指向 SSH 服务

  1. 回到您浏览器中的 Cloudflare Zero Trust 后台。刷新页面,您应该能在刚才的隧道配置页面看到您的连接器状态显示为 “Connected”。如果看到了,说明您的群晖已经成功连接到云端!
  2. 现在,我们来告诉这个隧道,当收到请求时,应该把它转发到群晖的 SSH 服务。点击 Public Hostnames 标签页。
  3. 点击 Add a public hostname
  4. 填写规则:
    • Subdomain: 输入一个您喜欢的子域名,例如 sshnas
    • Domain: 选择您的域名。
    • Path: 留空。
    • Service:
      • Type: 必须选择 SSH
      • URL: 输入 localhost:2222 是群晖 SSH 服务的默认端口)。
  5. 点击 Save hostname 保存。

至此,服务器端的配置已全部完成!

第三部分:在您的电脑上配置 SSH 客户端

最后一步,我们需要配置您自己电脑上的 SSH 客户端,让它知道如何通过 Cloudflare Tunnel 进行连接。

步骤 3.1:在您的电脑上安装 cloudflared

您的电脑也需要安装这个工具来作为“客户端代理”。您可能会疑惑,为什么群晖上装了,电脑上还要装?这是因为它们扮演的角色不同:群晖上的 cloudflared 负责把内部服务安全地“送”到云端;而您电脑上的 cloudflared 则负责将您的 SSH 命令安全地“带”到云端。两者在云端握手,才能构成一条完整的加密通道。

步骤 3.2:修改本地 SSH 配置文件

这是让魔法发生的关键。

  1. 用文本编辑器打开您电脑的 SSH 配置文件。通常位于 ~/.ssh/config (macOS/Linux) 或 C:\Users\您的用户名\.ssh\config (Windows)。如果文件或目录不存在,请手动创建。
  2. 在文件中添加以下配置块:# Connect to Synology NAS via Cloudflare Tunnel Host ssh.yourdomain.com ProxyCommand /opt/homebrew/bin/cloudflared access ssh --hostname %h
  3. 请务必修改
    • 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: 这很可能是因为您本地电脑的键盘布局与远程服务器不一致,导致输入的特殊字符(如 @, !, #)出错。请参考我们之前的讨论,使用“回显测试”或暂时修改为简单密码来解决。
©2025ye-yu.com 版权所有。