Cloudflare Tunnels 免费内网穿透
方法一
官网绑卡选择免费计划:https://one.dash.cloudflare.com/
然后直接面板操作,比方法二简单,缺点就是要绑卡(虽然是免费计划,但需要先绑卡)
方法二
本地编写配置文件,不需要去cf绑卡选计划
-
下载程序
1
2
3
4
5
6
7
8//amd架构
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/bin/cloudflared
//arm64、aarch64架构
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64 -O /usr/bin/cloudflared
//其他
自行官方下载:https://github.com/cloudflare/cloudflared/releases -
设置权限
1
chmod +x /usr/bin/cloudflared #给可执行权限
-
登录
1
cloudflared tunnel login
-
终端会给出一个链接,浏览器打开选择域名进行授权,下面授权完成后终端会显示
cert.pem地址,保存好,丢失了重新login一次 -
如果是有二步验证的,需要登录了以后,再次黏贴该地址,因为二步验证结束后并不会自动跳转到该 cloudflared 验证登录页面。
-
授权的话,每次只能选择一个网站,当然,一个网站也就够用了,我们可以解析很多三级域名啥的。当然如果需要授权多个网站,授权完成后不要关闭网页!依次点击其他需要授权的域名,进行多次授权。
-
-
创建隧道
1
2//web是隧道名
cloudflared tunnel create web会显示出隧道UUID,也可使用
cloudflared tunnel list查看123是隧道名,名字是可以自定义的,但是不能重复。如果想要查看已经创建的隧道的话,可以输入
1
cloudflared tunnel list
如果要删除,可以输入以下命令删除
1
cloudflared tunnel delete web
-
配置DNS记录,给隧道分配域名
cloudflared tunnel route dns <tunnel-name> <domain>,其中的<tunnel-name>是创建Tunnel时指定的名称,<domain>是自定义的域名,比如web.example.com:1
2//例如:
cloudflared tunnel route dns web web.example.com- 然后 cloudflare 就会在你的域名下自动生成一个 CNAME,把 web.example.com 指向 <隧道 UUID>.cfargotunnel.com
- 如果还有其他域名需要配置,可以继续执行上面的命令(别忘了改域名)。配置完成后可以前往Cloudflare控制台查看到CNAME记录。
注意:如果之前添加的有多个不同的二级域名,比如 example1.com 和 example2.com,只会对第一个添加的 example1.com 生效,后面的 example2.com 域名下的 CNAME 记录需要自行去网站上手动添加了。当然如果只有 example1.com 一个域名就不影响了,可以依旧使用类似以下的命令来创建更多需要的域名解析。
cloudflared tunnel route dns ednovas ssh.example1.com -
编写配置文件
创建配置文件config.yml1
vim ~/.cloudflared/config.yml
然后输入 i ,进入编辑模式,黏贴修改后的配置文件,如下(自行按需修改)
把第四步创建隧道这一步骤的隧道UUID复制下来粘贴到下面的对应的两个位置,并复制粘贴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# Tunnel UUID,即隧道UUID,就是同目录下的json文件的文件名
tunnel: <隧道UUID>
# 鉴权文件路径,注意根据自己的路径修改,下面的例子是Linux的路径
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
# 最后记得添加一个默认404
- service: http_status:404-
配置完成后,验证一下配置文件是否正确:
cloudflared tunnel ingress validate -
还可以再测试下规则是否命中:
cloudflared tunnel ingress rule https://<域名1.com> -
如果需要更多的端口 / 协议支持,可以查看 cloudflare 官方文档:
https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/local/local-management/ingress/#supported-protocols
其中
ingress字段可以创建多个服务,支持的服务类型如下表,新建其他服务前需要到 Cloudflare 控制台对其他子域名进行解析。服务名称 描述 service 示例值 HTTP/S 常规网页服务 https://localhost:8000TCP TCP 连接 tcp://localhost:25565SSH SSH 连接 ssh://localhost:22RDP 远程桌面(RDP) rdp://localhost上表转自 Cloudflare 官方文档,仅节选常用协议,若需要完整版请至 Ingress rules 页面查看。
-
-
注册为系统服务(自动安装)
1
cloudflared service install
-
设置自启动
1
systemctl start cloudflared
-
查看状态
1
systemctl status cloudflared

