Linux 使用 Cloudflare Tunnel 内网穿透
Linux 使用 Cloudflare Tunnel 内网穿透
Katorly简介
Cloudflare Zero Trust提供了免费内网穿透服务,名叫Cloudflare Tunnel(原Argo Tunnel),使得能够突破80/443端口限制和公网IP限制。
免费版是有一定限制的:
- 每个账号最多100个Tunnel
- 每个Tunnel最多100个同时连接数
如果是大规模使用的话建议还是使用其它内网穿透服务。
安装
1 | sudo mkdir -p --mode=0755 /usr/share/keyrings |
Cloudflare提供了两种管理Tunnel的方式,一种是在本地用配置文件config.yml
管理,一种是在Zero Trust面板中管理。对于同一个Tunnel,两种方式只能选其一。
本地管理
设置Tunnel
1 | cloudflared tunnel login |
然后打开出现的链接,登录你的Cloudflare账号后授权一个域名。
之后就可以使用下面的命令来本地管理Tunnel了:
1 | cloudflared tunnel create <Tunnel名> # 创建 Tunnel |
其中,绑定的域名可以是二级域名。
在创建Tunnel之后,请复制出现的Tunnel ID和Tunnel TOKEN以供后续config.yml
的编写:
1 | Tunnel credentials written to /home/<系统用户名>/.cloudflared/<当前Tunnel的TOKEN>.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel. |
使用命令在本地创建的Tunnel与在Cloudflare Zero Trust网页面板中创建的有些不同。本地创建的Tunnel只能在本地管理,如果要在网页面板中管理需要进行迁移。迁移之后可以在网页面板中查看Tunnel,但是在本地对Tunnel的编辑并不会同步到面板中。
注册服务
1 | sudo vim ~/.cloudflared/config.yml |
然后输入以下内容:
1 | tunnel: <Tunnel ID> |
之后,在systemctl中注册服务,并设置开机自启:
1 | sudo cloudflared --config ~/.cloudflared/config.yml service install |
最后,使用systemctl开启服务即可使用内网穿透:
1 | sudo systemctl start cloudflared |
Zero Trust管理
面板创建
首先,进入Cloudflare Zero Trust,在侧栏中点击Network
,展开后再点击Tunnel
。
在Select your connector
处选择Cloudflared
,然后点击Next
。
填入一个名字,然后点击Save Tunnel
。之后往下拉可以看到这个教程,里面可以复制的这一行中ek
开头的就是当前Tunnel的Token,点击右边的复制按钮,然后把前面的指令都删掉,保留Token备用。
点击Public Hostname
的tab,点击Add a public hostname
,之后填入相应的信息。注意域名必须是停放到Cloudflare的才行。
下面Type
那里HTTP
和HTTPS
都是不需要访问者在本地安装Cloudflared客户端的。
完事后点击Save hostname
即可。
注册服务
在面板中配置好Tunnel,就可以使用Tunnel的Token直接在本地Cloudflared中启动了。
输入
1 | vim /etc/systemd/system/cloudflared.service |
来创建一个systemd配置文件。
然后在配置文件中输入如下内容并保存
1 | [Unit] |
其中,<当前Tunnel的Token>
换成上面复制好的Tunnel的Token。
随后,重载systemd守护进程的配置文件:
1 | systemctl daemon-reload |
再打开Cloudflared服务即可:
1 | systemctl start cloudflared |
在浏览器或工具中访问你配置的域名即可。