在你的IPv6服务器上安装并配置Cloudflare Tunnel,使其安全地暴露SSH服务,以便我们可以通过Cloudflare网络从任何地方(包括纯IPv4网络)访问它。

通过Cloudflared Tunnel连接IPv6 VPS(可通过跳板机)
11 mins
2275 words
Loading views
VPS

前提条件h2

  1. 一个Cloudflare账户:免费账户即可。
  2. 一个你自己的域名:并且已经将这个域名的NS(Name Servers)记录修改为Cloudflare的NS服务器,使其由Cloudflare管理。
  3. 对IPv6服务器的初始访问权限:可以使用VPS提供商提供的VNC控制台、手机热点或具有IPv6地址的代理进行登录。

我们先定义好所有的角色,请将它们替换为你自己的真实信息:

  1. 你的电脑/手机 (Your PC/Phone):

    • 安装了图形化SSH客户端,本教程将以 Xshell 为例(其他如 Termius, MobaXterm, ServerBox 等原理完全相同)。
  2. IPv4跳板机 (Jump Host):

    • IP地址: <your_ipv4_vps_ip> (例如: 1.2.3.4)
    • 用户名: <jump_user> (例如: jumpuser)
    • 登录方式: 密码 或 SSH密钥
  3. IPv6最终服务器 (Final Server):

    • Cloudflare Tunnel主机名: <ssh.yourdomain.com>
    • 用户名: <final_user> (例如: rootubuntu)
    • 登录方式: 必须是SSH密钥(因为Cloudflare Tunnel默认不支持密码认证)

一、IPv6服务器h2

第一阶段:在IPv6服务器上安装并授权 cloudflaredh3

这些操作都在你通过VNC或网页控制台登录到你的IPv6服务器后进行。

  1. 登录服务器并获取root权限 使用提供商给你的密码登录,如果不是root用户,请切换到root (sudo -i)。

  2. 确定服务器架构

    Terminal window
    uname -m

    记下输出结果,通常是 x86_64 (AMD64) 或 aarch64 (ARM64)。

  3. 下载 cloudflared 根据上一步的结果,运行对应的命令:

    • 对于 x86_64 (AMD64) 架构:
      Terminal window
      wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/local/bin/cloudflared
    • 对于 aarch64 (ARM64) 架构:
      Terminal window
      wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64 -O /usr/local/bin/cloudflared

    我们直接把它下载到 /usr/local/bin/ 目录下,这样它就变成了全局命令。

  4. 添加执行权限

    Terminal window
    chmod +x /usr/local/bin/cloudflared
  5. 授权 cloudflared 连接到你的Cloudflare账户 运行以下命令:

    Terminal window
    cloudflared tunnel login
    • 终端会输出一个很长的URL链接。
    • 在你自己的电脑上,复制这个链接,粘贴到浏览器中打开。
    • 浏览器会要求你登录Cloudflare账户。
    • 登录后,选择你准备使用的域名,点击“授权(Authorize)”。
    • 授权成功后,服务器上会生成一个证书文件 (cert.pem),保存在 /root/.cloudflared/ 目录下。这个文件就是服务器与你Cloudflare账户之间的信任凭证。

第二阶段:创建并配置隧道h3

  1. 创建一个命名的隧道 给你的隧道起一个容易记的名字,例如 ipv6-ssh-tunnel

    Terminal window
    cloudflared tunnel create ipv6-ssh-tunnel
    • 执行成功后,会返回一个隧道的 UUID (一长串字母和数字),并告诉你它创建了一个凭证文件。这个凭证文件(<UUID>.json)同样保存在 /root/.cloudflared/ 目录下。请复制并保存好这个UUID,下面马上会用到。
  2. 创建配置文件 我们需要一个配置文件来告诉 cloudflared 如何路由流量。 首先,创建配置文件夹:

    Terminal window
    mkdir -p /etc/cloudflared/

    然后,创建并编辑配置文件:

    Terminal window
    nano /etc/cloudflared/config.yml

    将以下内容粘贴到文件中。请务必修改其中的 tunnel UUID 和 hostname

    # 隧道的UUID,从上一步获取
    tunnel: <Your-Tunnel-UUID>
    # 隧道凭证文件的路径,保持默认即可
    credentials-file: /root/.cloudflared/<Your-Tunnel-UUID>.json
    # Ingress rules 定义流量如何进入你的服务
    ingress:
    # 第一条规则:处理SSH流量
    - hostname: ssh.yourdomain.com # !!! 修改为你想要的子域名
    service: ssh://localhost:22
    # 最后一条规则:一个“捕获所有”的规则,防止任何人直接访问你的隧道
    - service: http_status:404
    • <Your-Tunnel-UUID> 替换为上一步中你获得的真实UUID。
    • ssh.yourdomain.com 替换为你计划用来访问SSH的域名。
    • 完成后,按 Ctrl+X,然后按 Y,再按 Enter 保存并退出 nano 编辑器。
  3. 创建DNS记录,将你的域名指向隧道 运行以下命令,cloudflared 会自动在你的Cloudflare DNS设置中为你创建一个CNAME记录。

    Terminal window
    cloudflared tunnel route dns ipv6-ssh-tunnel ssh.yourdomain.com
    • 请确保命令中的隧道名 (ipv6-ssh-tunnel) 和主机名 (ssh.yourdomain.com) 与你之前的设置一致。

第三阶段:将 cloudflared 作为服务运行h3

为了让隧道在你重启服务器后也能自动运行,我们需要把它安装成一个系统服务。

  1. 安装服务

    Terminal window
    cloudflared service install

    这个命令会自动创建一个 systemd 服务文件。

  2. 启动服务

    Terminal window
    systemctl start cloudflared
  3. 设置开机自启

    Terminal window
    systemctl enable cloudflared
  4. 检查服务状态(非常重要)

    Terminal window
    systemctl status cloudflared
    • 如果你看到 active (running) 的绿色字样,并且日志里显示有4个或更多的 conn 连接,说明隧道已经成功连接到Cloudflare网络!
    • 如果服务启动失败,这个命令的输出会告诉你错误原因,通常是配置文件路径或内容写错了。

第四阶段:配置安全策略 (必须做!)h3

到目前为止,任何知道 ssh.yourdomain.com 这个地址的人都可以尝试连接你的SSH。我们需要用Cloudflare Zero Trust来保护它,只允许你自己访问。

  1. 在你自己的电脑上,打开浏览器,登录Cloudflare仪表板。
  2. 在左侧菜单中找到并点击 “Zero Trust”
  3. 在Zero Trust仪表板的左侧菜单,找到 Access -> Applications
  4. 点击 “Add an application” 按钮。
  5. 选择 “Self-hosted” 类型。
  6. 填写应用配置:
    • Application name: My SSH Server (或任何你喜欢的名字)
    • Subdomain: ssh (只写子域名部分)
    • Domain: yourdomain.com (选择你的主域名)
  7. 点击 “Next”
  8. 配置策略 (Policy):
    • Policy name: Allow Me
    • Action: Allow
    • “Configure rules” 部分:
      • Selector: Emails
      • Value: 输入你自己的邮箱地址 (用来登录Cloudflare的那个邮箱)。
  9. 点击 “Next”,然后点击 “Add application”

至此,你的IPv6服务器上的所有设置都已完成! 它现在已经通过一个安全、加密、并且有访问策略保护的隧道连接到了Cloudflare。


二、IPv4服务器h2

第一步:在IPv4跳板机上准备环境h3

  1. 登录到你的IPv4跳板机: 打开你的终端或SSH客户端,用普通方式登录。

    Terminal window
    ssh <jump_user>@<your_ipv4_vps_ip>
  2. 确定服务器架构: 运行命令 uname -m

    • 如果显示 x86_64,说明是AMD64架构(绝大多数VPS都是这个)。
    • 如果显示 aarch64,说明是ARM64架构。
  3. 下载 cloudflared:

    • 对于 x86_64 (AMD64) 架构:
      Terminal window
      wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O cloudflared
    • 对于 aarch64 (ARM64) 架构:
      Terminal window
      wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64 -O cloudflared
      这里的 -O cloudflared 参数会在下载后直接将文件命名为 cloudflared,省去我们重命名的步骤。
  4. 添加执行权限:

    Terminal window
    chmod +x cloudflared

第二步:在IPv4跳板机上启动隧道转发h3

启动 cloudflared 本地监听: 运行以下命令。这个命令会在跳板机的本地 2222 端口创建一个监听服务,所有发往这个端口的流量都会被转发到你的IPv6服务器。 bash nohup ~/cloudflared access tcp --hostname <ssh.yourdomain.com> --url localhost:2222 > cloudflared.log 2>&1 & * 请把 <ssh.yourdomain.com> 替换成你自己的隧道主机名。 * nohup 命令用于在用户退出时仍然运行指定的命令,而 & 符号则将命令放到后台运行。


第三步:在你的图形化SSH客户端中进行配置 (以Xshell为例)h3

现在,打开你电脑上的Xshell,我们来创建连接会话。

  1. 新建会话:

    • 点击左上角的“文件(File)” -> “新建(New)”。
  2. 配置 “连接 (Connection)” 选项卡:

    • 名称 (Name): 给这个连接起个好记的名字,比如 我的最终服务器 (通过跳板机)
    • 协议 (Protocol): SSH
    • 主机 (Host): localhost (注意!这里填的是localhost,因为我们是相对于跳板机来连接的)
    • 端口号 (Port Number): 2222 (这是我们在第二步中指定的监听端口)
  3. 配置 “用户身份验证 (User Authentication)” 选项卡:

    • 方法 (Method): Public Key
    • 用户名 (User Name): <final_user> (你登录最终IPv6服务器的用户名)
    • 用户密钥 (User Key): 点击“浏览(Browse…)”,选择你用来登录最终IPv6服务器的那个私钥文件。
    • 密码 (Passphrase): 如果你的私钥设置了密码,在这里输入。
  4. 【最关键】配置 “代理 (Proxy)” 选项卡:

    • 在左侧的类别中,点击“代理”。

    • 点击服务器/代理列表右侧的“浏览(Browse…)”按钮。

    • 在弹出的“代理/跳板机列表”窗口中,点击“新建(New)”。

    • 现在开始填写跳板机的信息:

      • 名称 (Name): 我的IPv4跳板机
      • 类型 (Type): SSH
      • 主机 (Host): <your_ipv4_vps_ip> (你的IPv4跳板机的真实IP地址)
      • 端口号 (Port): 22 (或者你的跳板机SSH端口)
      • 用户身份验证:
        • 输入你的用户名 <jump_user>
        • 根据你的登录方式,选择并配置密码或私钥。
      • 点击“确定(OK)”保存这个跳板机配置。
    • 回到“代理”设置页面,从下拉列表中选中你刚刚创建的 我的IPv4跳板机

    • 点击“确定(OK)”保存整个会话配置。


第四步:连接!h3

一切准备就绪!在Xshell中,双击你刚刚创建的 我的最终服务器 (通过跳板机) 会话。

如果一切顺利,Xshell会:

  1. 首先连接到你的IPv4跳板机。
  2. 然后通过跳板机,连接到它自己的localhost:2222端口。
  3. 跳板机上运行的 cloudflared 会捕获这个连接,并通过Cloudflare网络安全地转发到你的IPv6服务器。
  4. 最终,你会看到登录到你的IPv6服务器的终端提示符!

Author: Gem
Post: 通过Cloudflared Tunnel连接IPv6 VPS(可通过跳板机)