- 不需要自购服务器和搭建中转服务
- 属于Cloudflare服务之一,自动接入了CDN
- 跟域名直接绑定,且是https
安装
loudflare Tunnel支持Mac、Windows、Linux和Docker。在开始的时候先总结个小经验:任何一端安装好的配置文件,都可以直接复制到其他段做到开箱即用。
根据系统选择对应的安装包,进行安装:
验证登录
安装好后执行Cloudflared账号的登录授权,此操作前请确保已经将准备好的域名已经添加到Cloudflare账号。
cloudflared tunnel login
执行后会打开浏览器,登录账号并选择要授权绑定的域名。成功后会在~/.cloudflared
目录下生成一个cert.pem
文件。此文件是配置文件之一,将它复制到任何其他平台相同配置目录下,可以直接用,而不需要再次验证登录。
新增配置
然后开始创建一个tunnel,命名随便,例如“demo”
cloudflared tunnel create demo
创建成功后会得到一个id,这个复制好,下一步要用。
查看已有的tunnel,他会列出该Cloudflare账号下所有的tunnel,同一个设备只能授权访问一个域名,list会列出所有的设备所有域名下的tunnel。
cloudflared tunnel list
接下来配置要暴露的服务和端口,在~/.cloudflared
目录新建配置文件config.yml
,写入如下配置
tunnel: 8132d959-xxxxxx-06f4a82c147a credentials-file: ./8132d959-xxxxxx-06f4a82c147a.json ingress: - hostname: dsm.abc.com service: http://192.168.1.6:5000 - hostname: lychee.abc.com service: http://192.168.1.6:13800 - service: http_status:404
需要注意的是:
- 一个tunnel对应一个id,但可以对应多个服务多个子域名,如上
- credentials-file最好配置绝对路径
下面给出一个高级配置的用法
tunnel: 12345678-1ae9-44e7-bf47-12345678 credentials-file: /root/.cloudflared/12345678-1ae9-44e7-bf47-12345678.json origincert: /root/.cloudflared/cert.pem protocol: quic #使用基于udp协议的quic方式传输数据,速度最优 originRequest: connectTimeout: 30s #metrics: localhost:5432 #tag: cmm=test pidfile: /var/run/cf-test-argo.pid autoupdate-freq: 24h loglevel: info #debug logfile: /root/.cloudflared/cloudflared.log ingress: - hostname: site.my.com service: https://localhost:443 originRequest: connectTimeout: 10s originServerName: hostname.my.com #指定后端服务的解析名,用于在ssl协议下区分不同的域名 noTLSVerify: true #忽略ssl证书有效性检测 - hostname: demo.my.com service: hello_world - service: http_status:404
额外参数
protocol
传输协议目前支持 http2和quic(推荐)
UDP Receive Buffer Size
quic协议基于UDP,性能比http2要强一大截,如果使用quic协议,建议调整系统默认UDP缓冲区的大小,提高数据传输性能。
As of quic-go v0.19.x, you might see warnings about the receive buffer size.
It is recommended to increase the maximum buffer size by running:
sysctl -w net.core.rmem_max=2500000
This command would increase the maximum receive buffer size to roughly 2.5 MB.
除了支持暴露这些服务以外,官网文档介绍还支持其他的协议。
https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/configuration/ingress
配置DNS记录
配置域名的dns记录有两种方式:
使用命令行
# cloudflared tunnel route dns <UUID or NAME> www.app.com cloudflared tunnel route dns dsm dsm.abc.com cloudflared tunnel route dns dsm lychee.abc.com
使用后台界面操作
在对应域名下添加CNAME记录,指向上一步中的<UUID>.cfargotunnel.com
即可。如果一个tunnel下对应多个服务,那就创建多图,例如我就要分别创建dsm和lychee子域名的CNAME记录分别指向同一目标地址。
运行配置
配置好CNAME记录后,开启Tunnel
cloudflared tunnel --config ~/.cloudflared/config.yml run
运行成功会输出一串日志,此时打开浏览器访问对应域名查看是否正常打开。
当然为了使得cloudflared tunnel服务在后台一直运行,在macos、linux等平台可以采取screen等方式进行后台保持。
注册服务
也可以通过注册服务的形式进行自启动,运行以下命令:
sudo cloudflared service install
如果您已经登录并有一个配置文件~/.cloudflared/
,这些将被复制到/etc/cloudflared/
.
如果您没有配置文件,则需要创建一个包含上面列出的字段的 config.yml 文件。
指定特定配置文件
如需指定特定的配置文件,您可以通过运行来传递自定义文件:
cloudflared --config CONFIG-FILE service install
然后,使用以下命令启动系统服务:
sudo systemctl start cloudflared
或者在启动时使用:
sudo systemctl enable cloudflared
基于Docker的环境
将此服务使用Docker运行,将~/.cloudflared目录的两个文件cert.pem和config.yml复制到Docker要挂载的目录下,比如/volume1/cloudflared,然后在运行docker命令,即可。
docker run -d -v /volume1/cloudflared:/etc/cloudflared cloudflare/cloudflared:2022.2.0 tunnel run
总结
难得发现这样一个不错的内网穿透服务,不过当前只是尝试了暴露了网页服务,还有ssh等服务还没尝试过,参考官方文档后续尝试下。
https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup
参考资料
https://lxx.im/cloudflare-tunnel
https://blog.186526.xyz/post/argo-tunnel-for-free/
https://lxx.im/cloudflare-tunnel
https://www.fwqzdm.com/mgvps/243520.html
https://hub.docker.com/r/cloudflare/cloudflared
https://blog.cloudflare.com/zh-cn/network-onramp-partnerships-zh-cn/