Cloudflare Tunnel不完全上手指南 - 知乎 (zhihu.com)

使用Cloudflare Tunnel实现内网穿透,把服务器架在家里_cloudflare内网穿透-CSDN博客

一、前置条件

  • 首先,你要有一个Cloudflare的账号,并且添加了所需要使用的域名,同时,开通Cloudflare Zero Trust
  • 本地内网有一台Linux服务器。CentOS、Ubuntu、Debian都无所谓,树莓派也没问题。Web网站正常跑,内网能正常访问。

二、安装Cloudflared

下载地址:Cloudflared

下载二进制文件到了/root/cloudflared/,然后添加进添加系统环境

# 给权限
chmod +x /root/cloudflared/cloudflared

vim /etc/profile
# 添加:
export PATH=$PATH:/root/cloudflared
 
# 保存退出,刷新系统环境
source /etc/profile

查看一下版本:

cloudflared --version
# 输出:cloudflared version 2024.1.4 (built 2024-01-19-2027 UTC)

三、配置隧道

1.登陆Cloudflared

使用前,我们需要先登录

cloudflared tunnel login

输入命令后,终端会给出一个登陆地址,类似于:

https://dash.cloudflare.com/argotunnel?callback=https%3A%2F%2Flogin.clo......

拷贝到浏览器里面打开,登录后,选择需要授权的网站。

注意:如果需要同时授权多个主域名,多个主域名分别点击授权。

2.创建隧道

授权完以后,需要创建隧道。一般建议一台服务器创建一个隧道。

cloudflared tunnel create <隧道名字>

如:创建完以后,会输出隧道的一个UUID,记录下来

root@hi3798mv100:~/cloudflared# cloudflared tunnel create nas
Tunnel credentials written to /root/.cloudflared/22222222-e229-4fdb-9c08-1111111111.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.

Created tunnel nas with id 22222222-e229-4fdb-9c08-1111111111

3.详细配置隧道

  • 接着,配置cloudflared的配置文件。
vim ~/.cloudflared/config.yml
  • 输入下面的内容(根据自己要求编辑),想要多个子域名指向不同端口也是可以的:
tunnel: <隧道UUID>
credentials-file: /root/.cloudflared/<隧道UUID>.json
protocol: h2mux
ingress:
  # 第一个网站,连接到本地的80端口
  - hostname: <域名1.com>
    service: http://localhost:80
  # 第二个网站,https协议,连接到本地的443端口,禁用证书校验(用于自签名SSL证书)
  - hostname: <域名2.com>
    service: https://127.0.0.1:443
    originRequest:
      noTLSVerify: true
      originServerName: <域名2.com>
  # 第三个网站,8012端口,泛域名
  - hostname: <*.域名3.com>
    service: http://localhost:8012
  # 第四个,反代MySQL sock服务
  - hostname: <mysql.域名4.com>
    service: unix:/tmp/mysql.sock
  # 第五个,反代SSH服务
  - hostname: <ssh.域名5.com>
    service: ssh://localhost:22
  - service: http_status:404

如:

tunnel: 22222222-e229-4fdb-9c08-1111111111
credentials-file: /root/.cloudflared/22222222-e229-4fdb-9c08-1111111111.json
protocol: h2mux
ingress:
  # 第一个网站,连接到本地的80端口
  - hostname: www.example.com
    service: http://localhost:80
  # 第三个网站,3000端口
  - hostname: yapi.example.com
    service: http://localhost:3000
  # 第五个,反代SSH服务
  - hostname: ssh.example.com
    service: ssh://localhost:22
  - service: http_status:404
  • 配置完以后,我们测试下配置文件有没有问题
cloudflared tunnel ingress validate
# 输出:OK

4.子域名指向

接着,为上面的每个域名分配一个 CNAME 记录,将流量指向您的隧道子域。当然如何想要将多个子域指向到本机的不同端口,只要在这一步为每个子域指向 CNAME 记录就行。

cloudflared tunnel route dns <UUID or NAME> <hostname>

# 如:cloudflared tunnel route dns nas www.example.com
# 和:cloudflared tunnel route dns nas ssh.example.com

还可以再测试下规则是否命中:

cloudflared tunnel ingress rule https://<域名1.com>

# 例如:cloudflared tunnel ingress rule http://yapi.example.com
# 输出:
# Using rules from /root/.cloudflared/config.yml
# Matched rule #1
#         hostname: yapi.example.com
#         service: http://localhost:3000

5.运行隧道

执行以下命令,将 cloudflared 连接到 Cloudflare 的网络,Cloudflared 会从默认位置检索配置文件,即 ~/.cloudflared/config.yml

cloudflared tunnel run <UUID or NAME>

如果配置文件不在默认路径,可以使用--config选项来运行隧道:

cloudflared tunnel --config /path/your-config-file.yaml run <UUID or NAME>

三、创建系统服务

当然要自启才好呀,更新了子域名指向配置文件后需要清理服务后重新安装

cloudflared service install
systemctl start cloudflared
systemctl enable cloudflared
systemctl status cloudflared

# cloudflared service uninstall 清除服务

跑完这三条命令,应该就可以看到服务有正常输出,并且Web控制台也可以看到状态是Active。

四、常用命令

FunctionsCommands
创建隧道cloudflared tunnel run
隧道列表cloudflared tunnel list
停止隧道cloudflared tunnel stop
重新启动隧道cloudflared tunnel restart
删除隧道cloudflared tunnel delete
强制删除隧道cloudflared tunnel delete -f
显示隧道信息cloudflared tunnel info
分类: 默认分类 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录