cloudflared Zero Trust

cloudflared Zero Trust
WildboarGopenwrt 下零配置代理内网服务
Tunnel 通过在本地网络运行的一个 Cloudflare 守护程序,与 Cloudflare 云端通信,将云端请求数据转发到本地网络的 IP + 端口。
前置条件
- 持有一个域名
- 将域名DNS解析托管到CF
- 内网需要穿透的HTTP服务
开始
打开Cloudflare Zero Trust工作面板
创建Cloudfare Zero Trust,选择免费计划,可以暂时不绑定信用卡
打开openwrt 通过ssh连接到后台。
安装
cloudflared1
2opkg update
opkg install cloudflared安装完成验证一下版本号
1
cloudflared --version
登录
1
cloudflared login
然后将反馈的连接地址复制到浏览器打卡,选择绑定的域名进行授权。授权完成控制台会返回。
在/root/.cloudflared/路径下生成一个文件
cert.pem授权文件创建一个隧道
1
cloudflared tunnel create 隧道名字
这里创建了一个
mywork的隧道. 可以看到生成隧道ID 的json文件 记住这个id号。新建配置文件
在
/etc/cloudflared/路径下创建一个config.yml文件编写config文件,配置文件里存放的是内网服务的与域名的映射配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18## config.yml
tunnel: 2eb55258-be2b-4511-b95e-437da8822ee6 # ← 把这行改成刚生成的 UUID
credentials-file: /root/.cloudflared/2eb55258-be2b-4511-b95e-437da8822ee6.json ## 隧道文件的路径要与生成的一致
ingress:
- hostname: xxx.yourdomain.com
service: http://localhost:5244
- hostname: xxx.yourdomain.com
service: http://localhost:8080
# 继续加你想暴露的服务,格式完全一样
# - hostname: xxx.yourdomain.com
# service: http://127.0.0.1:端口
- service: http_status:404 # 最后一行必须有这句兜底
protocol: http2测试运行
1
cloudflared tunnel run
运行后查看日志,如果日志中有活动信息,那么说明它正在运行。
1
logread | grep cloudflared
或者在cloudflare零配置中看网络连接器,看到你的隧道名称对应的状态是
正常绿色,就代表运行成功。如果报错TLS连接超时,检查防火墙,和本机的代理。存在代理将流量拦截,导致无法连接。
测试成功
此时还无法使用子域名直接访问内网的服务。只需要在你的域名下添加对应的CNAME记录就可以了 ,名称就填写你配置的子域名的名字,内容要添加刚才生成的
<隧道ID>.cfargotunnel.com1
2
3
4
比如我的隧道ID是 2eb55258-be2b-4511-b95e-437da8822ee6
所以CNAME解析内容应该是2eb55258-be2b-4511-b95e-437da8822ee6.cfargotunnel.com
添加完成之后就通过子域名访问内网服务了。
开机自启
还需要创建一个开机自启服务,保证cloudflared可以后台运行
编写
/etc/init.d/cloudflared文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
USE_PROCD=1
START=90 ## 这是启动优先级,假如你有代理服务优先级是91 ,那让cloudflared的优先级比他大就可以先启动 保证开机重启后流量不会被代理服务拦截
# 配置文件路径和 cloudflared 程序路径
CONF="cloudflared"
PROG="/usr/bin/cloudflared"
# 这个函数是将配置文件中的参数传递给 cloudflared 启动命令
append_param_arg() {
local value
config_get value "$1" "$CONF" "$2"
[ -n "$value" ] && procd_append_param command "--$1" "$value"
}
start_service() {
# 加载配置文件
config_load "$CONF"
# 检查是否启用 cloudflared
local enabled
config_get_bool enabled "$CONF" "enabled" 1
[ "$enabled" -eq "1" ] || return 1
# 开启 procd 实例
procd_open_instance "$CONF"
# 设置 cloudflared 运行的命令和参数
procd_set_param command "$PROG" "tunnel"
procd_append_param command "--no-autoupdate" # 禁用自动更新
# 加载配置文件中的所有参数
append_param_arg "config" "/etc/cloudflared/config.yml"
append_param_arg "origincert" "/root/.cloudflared/cert.pem"
append_param_arg "region" ""
append_param_arg "loglevel" "debug"
append_param_arg "logfile" "/tmp/cloudflared.log"
# 添加其他参数
procd_append_param command "run"
append_param_arg "token" ""
# 设置进程守护,重启机制
procd_set_param respawn
procd_set_param stderr 1
# 关闭 procd 实例
procd_close_instance
}
reload_service() {
stop
start
}
service_triggers() {
procd_add_reload_trigger "$CONF"
}
加入开机自启
1 | /etc/init.d/cloudflared enable |
开启后台运行
1 | /etc/init.d/cloudflared start |







