背景:

ngrok免费版无固定域名;

小米球需要实名认证;

钉钉pierced项目失效;

优缺点:

免费且不需要服务器

暂时不支持UDP协议

前提条件:

一个托管于Cloudflare的域名

一个本地Linux Web服务器,即内网穿透的对象

正常网络连接

#安装Cloudflared

git项目地址

https://github.com/cloudflare/cloudflared

下载对应的系统版本的安装包(本地:cloudflared-linux-x86_64.rpm)

安装命令

1
2
3
4
cd /opt
curl -LO https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm
rpm -ivh cloudflared-linux-x86_64.rpm
rm -rf cloudflared-linux-x86_64.rpm

登录 Cloudflared

cloudflared tunnel login

这时会弹出来一个URL,用浏览器打开,登录认证,然后选择你想用来做内网穿透的域名即可。

成功后会生成证书,放置于 ~/.cloudflared/cert.pem 中。

注:如果该目录下文件不存在,重复几次;

Tunnel配置

新建Tunnel

名字可以随意起:

cloudflared tunnel create <Tunnel-NAME>

成功后会提示,相关凭证已放置于 ~/.cloudflared/<Tunnel-UUID>.json 中。

新建 Tunnel 对应的 DNS 记录

填你想用来做内网穿透的域名,可以为二级域名(example.com)或三级域名(www.example.com)等。

cloudflared tunnel route dns <Tunnel-NAME> <SUBDOMAIN>

成功后会创建CNAME记录将域名指向隧道。

新建配置文件

vi ~/.cloudflared/config.yml

写入以下配置:

1
2
3
4
5
6
7
8
9
10
tunnel: <Tunnel-UUID>
credentials-file: /root/.cloudflared/<Tunnel-UUID>.json
protocol: h2mux
originRequest:
connectTimeout: 30s
noTLSVerify: false
ingress:
- hostname: <SUBDOMAIN>
service: http://localhost:80
- service: http_status:404

注:

2022.4.20 更新:经测试,http2与h2mux均可正常建立连接,只有quic无法建立连接。

由于国内环境关系,无法使用默认的quic建立隧道,因此需指定http2,http://localhost:80为本地服务的地址。

启动Cloudflared

命令行启动

1
2
3
cloudflared tunnel --loglevel debug --transport-loglevel warn --config /root/.cloudflared/config.yml run <Tunnel-NAME>
#或者
cloudflared tunnel --config /root/.cloudflared/config.yml run <Tunnel-NAME>