使用 Cloudflare Tunnel 转发 Minecraft 服务端口到公网

Cloudflare , 一家不务正业以CDN分发为主的公司,Cloudflare提供了免费的 CDN 分发服务,并且支持抵御L4 / L7 DDoS 攻击,是小型网站/企业的福音,如今,他们将Argo Tunnel , 需要付费的功能下放到全部人,全部人可以免费使用 Argo Tunnel 进行内网穿透,支持 HTTP / HTTPS / TCP.

需要注意的事项:

  1. Cloudflare Tunnel (Argo Tunnel 免费版) 是有限制的

限制(Technical limitations · Cloudflare for Teams docs如下:

a. 每个账号只可以开设最多 1000 个 Tunnel

b. 每个账号最多只能拥有 最多 1000个 IP Route

c. 每个 Tunnel 最多只能支持 100个 Active Connection (100 * 1000 = 100000)

  1. HTTP / HTTPS 无需在客户端安装 Cloudflared , 只需要在服务端运行即可

  2. TCP 需要在客户端安装 Cloudflared , 并且运行映射到本地才可以使用 (比如 Minecraft)

  3. 你的 Cloudflare 账户至少需要添加一个域名,可以使用 Freenom 获取免费域名后添加进入 Cloudflare , 不过有机会失败


使用 Cloudflare Tunnel 的好处:

  1. 避免源服务器IP泄露

  2. 避免客户端IP泄露

  3. 提高稳定性(通过 Cloudflare 数据中心搭建的隧道连接,两端都会先连接到 Cloudflare 的数据中心,有效地提高稳定性,不必被服务器/客户端ISP的路由问题困扰,除非你所在的ISP到Cloudflare的路由非常烂)

如何创建并转发本地TCP端口到Cloudflare Tunnel

服务端:

  1. 前往 Cloudflare 官网下载 Cloudflared,选择对应的版本:

a. 如果你想在 Linux 机器上使用,选择对应架构的版本,你可以通过下载后缀带 .deb 的文件后使用 dpkg -i 安装

b. 如果你想在 Windows 机器上使用,选择对应架构的版本,下载后在Cloudflared 所在目录打开 CMD 即可使用

c. 如果您想在 Mac 机器上使用,可以使用 brew install cloudflare/cloudflare/cloudflared 安装

这里默认所有Cloudflared 安装后都可以使用 cloudflared 这个指令,Windows 用户可以在下载后把文件名改为 cloudflared.exe 即可

  1. 打开终端/CMD 输入 cloudflared tunnel login 授权登录你的账号,并且在浏览器选择一个域名授权,授权成功后 Cloudflared 会保存一个登录凭证,待会儿我们需要用到来创建隧道和创建二级域名.

  2. 输入 cloudflared tunnel create <名字> 创建隧道,比如我的隧道名字要命名为 minecraft_group , 我需要输入 cloudflared tunnel create minecraft_group

  3. 创建成功后,你会发现它会返回一串UUID , 同时保存了这个UUID的授权 JSON 文件

  4. 现在,我们将会为这个隧道分配一个二级域名,二级域名必须是你刚刚授权的同一个域名,运行如下指令 :cloudflared tunnel route dns <Tunnel 名字/UUID> <二级域名> , 比如我的隧道名字是 minecraft_group , 二级域名是 mc-cf-tunnel.samsam123.name.my ,我需要运行 cloudflared tunnel route dns minecraft_group mc-cf-tunnel.samsam123.name.my 即可

  5. 现在,我们就可以转发本地 TCP 服务到这个隧道啦,我们这里以 Minecraft 的 25565 为例,Minecraft 服务器在本机,隧道名称为 minecraft_group
    cloudflared tunnel --name <隧道名称> --url tcp://[地址]

我需要运行 cloudflared tunnel --name minecraft_group --url tcp://127.0.0.1:25565

正常情况下会显示如下结果:
<时间> INF Connection <随机uuid> registered connIndex=0 location=<Cloudflare 数据中心>

  1. 至此,我们就完成了 Cloudflare Tunnel 在服务端的转发拉,如果想让他长时间保持在后台,Linux 用户可以使用 screen 解决

  2. 可以通过登录 https://dash.teams.cloudflare.com 查看使用该账号创建的隧道

客户端:

  1. 前往 Cloudflare 官网下载 Cloudflared,选择对应的版本:

a. 如果你想在 Linux 机器上使用,选择对应架构的版本,你可以通过下载后缀带 .deb 的文件后使用 dpkg -i 安装

b. 如果你想在 Windows 机器上使用,选择对应架构的版本,下载后在Cloudflared 所在目录打开 CMD 即可使用

c. 如果您想在 Mac 机器上使用,可以使用 brew install cloudflare/cloudflare/cloudflared 安装

这里默认所有Cloudflared 安装后都可以使用 cloudflared 这个指令,Windows 用户可以在下载后把文件名改为 cloudflared.exe 即可

  1. 打开终端/CMD 输入 cloudflared access tcp --hostname <分配到隧道的二级域名> --listener <本地IP:端口>

比如,我刚刚创建的隧道的二级域名是mc-cf-tunnel.samsam123.name.my,我想要将监听端口设为客户端的 25565 端口,那么,我需要如下命令

cloudflared access tcp --hostname mc-cf-tunnel.samsam123.name.my --listener 127.0.0.1:25565
正常情况下你应该看到如下结果
<时间> INF Start Websocket listener host=127.0.0.1:25565

  1. 如果担心客户端是小白,并且是 Windows 用户的话,建议可以写一个脚本,内容就为第二个步骤的命令,然后将 Cloudflared 放入同一个文件夹里面,压缩后让小白用户解压后双击脚本即可映射到本地.

  2. Minecraft 里输入 127.0.0.1 即可连接到服务器~