在你的IPv6服务器上安装并配置Cloudflare Tunnel,使其安全地暴露SSH服务,以便我们可以通过Cloudflare网络从任何地方(包括纯IPv4网络)访问它。
前提条件h2
- 一个Cloudflare账户:免费账户即可。
- 一个你自己的域名:并且已经将这个域名的NS(Name Servers)记录修改为Cloudflare的NS服务器,使其由Cloudflare管理。
- 对IPv6服务器的初始访问权限:可以使用VPS提供商提供的VNC控制台、手机热点或具有IPv6地址的代理进行登录。
我们先定义好所有的角色,请将它们替换为你自己的真实信息:
-
你的电脑/手机 (Your PC/Phone):
- 安装了图形化SSH客户端,本教程将以 Xshell 为例(其他如 Termius, MobaXterm, ServerBox 等原理完全相同)。
-
IPv4跳板机 (Jump Host):
- IP地址: <your_ipv4_vps_ip> (例如:
1.2.3.4) - 用户名: <jump_user> (例如:
jumpuser) - 登录方式: 密码 或 SSH密钥
- IP地址: <your_ipv4_vps_ip> (例如:
-
IPv6最终服务器 (Final Server):
- Cloudflare Tunnel主机名:
<ssh.yourdomain.com> - 用户名: <final_user> (例如:
root或ubuntu) - 登录方式: 必须是SSH密钥(因为Cloudflare Tunnel默认不支持密码认证)
- Cloudflare Tunnel主机名:
一、IPv6服务器h2
第一阶段:在IPv6服务器上安装并授权 cloudflaredh3
这些操作都在你通过VNC或网页控制台登录到你的IPv6服务器后进行。
-
登录服务器并获取root权限 使用提供商给你的密码登录,如果不是root用户,请切换到root (
sudo -i)。 -
确定服务器架构
Terminal window uname -m记下输出结果,通常是
x86_64(AMD64) 或aarch64(ARM64)。 -
下载
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/目录下,这样它就变成了全局命令。 - 对于
-
添加执行权限
Terminal window chmod +x /usr/local/bin/cloudflared -
授权
cloudflared连接到你的Cloudflare账户 运行以下命令:Terminal window cloudflared tunnel login- 终端会输出一个很长的URL链接。
- 在你自己的电脑上,复制这个链接,粘贴到浏览器中打开。
- 浏览器会要求你登录Cloudflare账户。
- 登录后,选择你准备使用的域名,点击“授权(Authorize)”。
- 授权成功后,服务器上会生成一个证书文件 (
cert.pem),保存在/root/.cloudflared/目录下。这个文件就是服务器与你Cloudflare账户之间的信任凭证。
第二阶段:创建并配置隧道h3
-
创建一个命名的隧道 给你的隧道起一个容易记的名字,例如
ipv6-ssh-tunnel。Terminal window cloudflared tunnel create ipv6-ssh-tunnel- 执行成功后,会返回一个隧道的 UUID (一长串字母和数字),并告诉你它创建了一个凭证文件。这个凭证文件(
<UUID>.json)同样保存在/root/.cloudflared/目录下。请复制并保存好这个UUID,下面马上会用到。
- 执行成功后,会返回一个隧道的 UUID (一长串字母和数字),并告诉你它创建了一个凭证文件。这个凭证文件(
-
创建配置文件 我们需要一个配置文件来告诉
cloudflared如何路由流量。 首先,创建配置文件夹:Terminal window mkdir -p /etc/cloudflared/然后,创建并编辑配置文件:
Terminal window nano /etc/cloudflared/config.yml将以下内容粘贴到文件中。请务必修改其中的
tunnelUUID 和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编辑器。
- 将
-
创建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
为了让隧道在你重启服务器后也能自动运行,我们需要把它安装成一个系统服务。
-
安装服务
Terminal window cloudflared service install这个命令会自动创建一个
systemd服务文件。 -
启动服务
Terminal window systemctl start cloudflared -
设置开机自启
Terminal window systemctl enable cloudflared -
检查服务状态(非常重要)
Terminal window systemctl status cloudflared- 如果你看到
active (running)的绿色字样,并且日志里显示有4个或更多的conn连接,说明隧道已经成功连接到Cloudflare网络! - 如果服务启动失败,这个命令的输出会告诉你错误原因,通常是配置文件路径或内容写错了。
- 如果你看到
第四阶段:配置安全策略 (必须做!)h3
到目前为止,任何知道 ssh.yourdomain.com 这个地址的人都可以尝试连接你的SSH。我们需要用Cloudflare Zero Trust来保护它,只允许你自己访问。
- 在你自己的电脑上,打开浏览器,登录Cloudflare仪表板。
- 在左侧菜单中找到并点击 “Zero Trust”。
- 在Zero Trust仪表板的左侧菜单,找到 Access -> Applications。
- 点击 “Add an application” 按钮。
- 选择 “Self-hosted” 类型。
- 填写应用配置:
- Application name:
My SSH Server(或任何你喜欢的名字) - Subdomain:
ssh(只写子域名部分) - Domain:
yourdomain.com(选择你的主域名)
- Application name:
- 点击 “Next”。
- 配置策略 (Policy):
- Policy name:
Allow Me - Action:
Allow - 在 “Configure rules” 部分:
- Selector:
Emails - Value: 输入你自己的邮箱地址 (用来登录Cloudflare的那个邮箱)。
- Selector:
- Policy name:
- 点击 “Next”,然后点击 “Add application”。
至此,你的IPv6服务器上的所有设置都已完成! 它现在已经通过一个安全、加密、并且有访问策略保护的隧道连接到了Cloudflare。
二、IPv4服务器h2
第一步:在IPv4跳板机上准备环境h3
-
登录到你的IPv4跳板机: 打开你的终端或SSH客户端,用普通方式登录。
Terminal window ssh <jump_user>@<your_ipv4_vps_ip> -
确定服务器架构: 运行命令
uname -m。- 如果显示
x86_64,说明是AMD64架构(绝大多数VPS都是这个)。 - 如果显示
aarch64,说明是ARM64架构。
- 如果显示
-
下载
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,省去我们重命名的步骤。
- 对于
-
添加执行权限:
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,我们来创建连接会话。
-
新建会话:
- 点击左上角的“文件(File)” -> “新建(New)”。
-
配置 “连接 (Connection)” 选项卡:
- 名称 (Name): 给这个连接起个好记的名字,比如
我的最终服务器 (通过跳板机)。 - 协议 (Protocol):
SSH - 主机 (Host):
localhost(注意!这里填的是localhost,因为我们是相对于跳板机来连接的) - 端口号 (Port Number):
2222(这是我们在第二步中指定的监听端口)
- 名称 (Name): 给这个连接起个好记的名字,比如
-
配置 “用户身份验证 (User Authentication)” 选项卡:
- 方法 (Method):
Public Key - 用户名 (User Name):
<final_user>(你登录最终IPv6服务器的用户名) - 用户密钥 (User Key): 点击“浏览(Browse…)”,选择你用来登录最终IPv6服务器的那个私钥文件。
- 密码 (Passphrase): 如果你的私钥设置了密码,在这里输入。
- 方法 (Method):
-
【最关键】配置 “代理 (Proxy)” 选项卡:
-
在左侧的类别中,点击“代理”。
-
点击服务器/代理列表右侧的“浏览(Browse…)”按钮。
-
在弹出的“代理/跳板机列表”窗口中,点击“新建(New)”。
-
现在开始填写跳板机的信息:
- 名称 (Name):
我的IPv4跳板机 - 类型 (Type):
SSH - 主机 (Host):
<your_ipv4_vps_ip>(你的IPv4跳板机的真实IP地址) - 端口号 (Port):
22(或者你的跳板机SSH端口) - 用户身份验证:
- 输入你的用户名
<jump_user>。 - 根据你的登录方式,选择并配置密码或私钥。
- 输入你的用户名
- 点击“确定(OK)”保存这个跳板机配置。
- 名称 (Name):
-
回到“代理”设置页面,从下拉列表中选中你刚刚创建的
我的IPv4跳板机。 -
点击“确定(OK)”保存整个会话配置。
-
第四步:连接!h3
一切准备就绪!在Xshell中,双击你刚刚创建的 我的最终服务器 (通过跳板机) 会话。
如果一切顺利,Xshell会:
- 首先连接到你的IPv4跳板机。
- 然后通过跳板机,连接到它自己的
localhost:2222端口。 - 跳板机上运行的
cloudflared会捕获这个连接,并通过Cloudflare网络安全地转发到你的IPv6服务器。 - 最终,你会看到登录到你的IPv6服务器的终端提示符!