Cloudflare Argo Tunnel(cloudflared) 转发私网端口到公网(不限速)

Cloudflare真是私人网站管理员的一大利器, 它最为人熟知的功能是CDN和域名托管服务, 但由于Cloudflare是国外的, 如果在国内使用了它的CDN, 可能非但不能达到加速的效果, 反而会减速, 我的博客套上它的CDN之后就慢了很多.

但作为财大气粗的公司(1.1.1.1 这么nb的IP都拿到了), 它的其他功能也都很强大, 重要的是免费的计划对于大部分私人网站都够用了. 像workers, 可以提供类似云函数的功能, 即访问特定网址, 会执行你编写的js代码, 从而实现网站反向代理, 配合它的KV存储, 也可以实现短网址和文本分享的功能.

今天要为大家介绍的是它的隧道功能, 相对于内网穿透, 它的优点是不用公网服务器, 而且速度还相当可观.

准备

创建隧道

1
2
3
4
5
6
7
8
9
10
11
chmod +x ./cloudflared-linux-arm64
mv cloudflared-linux-arm64 /usr/bin/cloudflared
cloudflared tunnel login
# 此时会出现一个链接, 点击在浏览器打开, 选择你的域名
# 完成后会有一个cert.pem文件在~/.cloudflared目录下
cloudflared tunnel create 隧道名
# 隧道名随意, 如zq-tunnel
# 此时会为该隧道生成一个id
cloudflared tunnel route dns 隧道名 前缀.域名
# 隧道名即为上一步所填写, 前缀自定义, 注意不能是已经解析过的前缀, 如tunnel.zaqai.com, 这一步cloudflared会自动为tunnel添加cname

编写配置文件

1
2
3
4
5
6
7
tunnel: [隧道id]
credentials-file: /root/.cloudflared/[隧道id].json

ingress:
- hostname: tunnel.zaqai.com
service: http://localhost:8080
- service: http_status:404

启动隧道

1
cloudflared tunnel --config ~/.cloudflared/config.yml run

此时访问https://tunnel.zaqai.com, 即可访问到你私网服务器的8080端口

通过以下命令启动可保持后台运行:

1
nohup cloudflared tunnel --config ~/.cloudflared/config.yml run > ~/.cloudflared/tunnel.log 2>&1 &

也可以通过cloudflared service install将cloudflared变为systemctl管理的服务(centos)

速度

image-20220507134020191

当然不是, 因为校园网限速大概在2MB/s

image-20220507134122711

没错啦, 我用我的千兆vps测的下载速度, 是我家的宽带上传速度上限了.

多个端口

如果想要转发多个端口, 可以这样修改配置文件:

1
2
3
4
5
6
7
8
9
tunnel: [隧道id]
credentials-file: /root/.cloudflared/[隧道id].json

ingress:
- hostname: tunnel.zaqai.com
service: http://localhost:8080
- hostname: tunnel2.zaqai.com
service: http://localhost:8081
- service: http_status:404

要注意tunnel1也必须cname的值和tunnel相同

其他

也许有人会说, ipv6不香吗? 确实香, 我在家里的时候配好的ipv6服务器, 到学校没几天ipv6就失联了, (还好留了一手, 弄了个zerotier), 现在就靠隧道来用服务器了

也可以转发ssh的22端口, 但我还没有成功