Featured image of post FRP 和 Cloudflare Tunnel 哪个快

FRP 和 Cloudflare Tunnel 哪个快

   
文章摘要
待办软件放 VPS 上一直走 CF Tunnel,顺手跟 FRP 量了下延迟和吞吐,顺便记一下这套穿透还能用在哪儿

前言

前阵子搞了个待办软件叫 NextTodo,github 上开源的。它思路跟一般清单不一样,事项之间能设前置,一串依赖下来像张网,首页只列「现在能做的」,做完一项被它卡住的才解锁。我这种一打开待办就头大的人,用着挺合适。

它能离线用,数据存设备里就行。但我手机、电脑、网页都想看同一份,那就得有个服务端常驻;它的 AI 整理也得服务端去调模型接口。所以这台机器省不掉。第一版我扔在家里那台 N100 上,局域网用着挺爽,出门就废了,家里宽带没公网 IP,也懒得去路由器上开端口打洞。

想让它从外网能访问,绕不开穿透这件事,常见两条路。一个是 Cloudflare Tunnel,域名本来就托管在 CF,cloudflared 一条命令把端口挂出去,证书自动签,防火墙不用碰,白嫖得挺舒服。一个是 FRP,找台有公网 IP 的机器跑 frps,内网跑 frpc 主动连上去,再开个端口把流量转出来。

后来想想家里断个网断个电就同步不了,干脆把服务挪到 VPS 上,甲骨文那台反正 24 小时开着。但挪过去不代表穿透这事就没了:VPS 上的 8080 只监听本机,我不想把它直接甩到公网上,也懒得自己签证书、配反代,所以入口还是留给了 Tunnel。FRP 干的是同一件事,只是换成自己机器转发,VPS 上 1Panel 早装好 frps 了,顺手就能测。干脆两个都量一遍,看差多少。

用久了总觉得首屏有点肉,点一下要等一下才出东西。就想搞清楚慢在哪,值不值得换。

两种穿透方式的结构差异

1、这俩差在哪

FRP 就是内网跑个 frpc,主动连自己有公网 IP 的那台机器上的 frps,再开个端口把流量转出去。一条路走到底。

Tunnel 绕一点:域名先解析到 Cloudflare 边缘,边缘再顺着 cloudflared 建的反向隧道回源。麻烦是麻烦,但服务器一个入站端口都不用开,证书自动,WAF 白送。

一个自己的机器,一个别人家的网络,多跳一次,快慢基本就定在这。

2、先测延迟

N100 上直接 curl,不走代理。

默认解析(CF 边缘落在西雅图)   连接 0.156s  TLS 0.334s  首字节 1.05s
直连 VPS 上的服务                连接 0.059s            首字节 0.12s

差了快九倍。翻了下 cdn-cgi/trace 里的 colo,国内移动的出口被甩到 SEA,再从西雅图回源到新加坡。绕地球大半圈,慢也正常。

3、再测下载

python3 -m http.server 起个 10MB 的随机文件,两边各拉三次。

直连 VPS     0.82s / 1.03s / 2.59s      12.9 / 10.2 / 4.0 MB/s
CF Tunnel    2.10s / 2.43s / 4.96s      5.0 / 4.3 / 2.1 MB/s

吞吐差两倍多,Tunnel 那组数还抖得厉害。平时开个待办看个网页感觉不出来,真要传文件、看视频,这个差距挺难受。

4、顺手试了下 CF 优选

之前写过 Vercel 的优选,就想着 CF 是不是也能这么搞,测了一圈 IP,还真有惊喜。

默认 104.21.71.149   → SEA 西雅图   首字节 1.05s
优选 172.66.0.1      → HKG 香港     首字节 0.39s

差 2.7 倍,有点香。但优选只能从客户端改解析,服务器说了不算。更烦的是我把记录改成灰云 CNAME 指到优选域名,人家直接不认:

403 DNS points to prohibited IP

自己的托管域名的记录不许指向 CF 自己的 IP,防的就是绕过去。真想又留 Tunnel 又优选,得上 Cloudflare for SaaS 自定义主机名,还得有个不在 CF 的域名做中转。就为省那零点几秒,算了算了。

5、那到底用哪个

按我的用法就两句话。给别人访问、想藏源站 IP、懒得管证书,用 Tunnel,慢点无所谓;自己人用、传文件、要低延迟,直接 FRP。

待办现在还在 Tunnel 上,手机在外面能开就行。哪天真嫌卡了,再给 VPS 挂个域名反代,App 里改个服务器地址就完事,数据又不用迁。

6、这套东西还能用在别的地方

测完发现能覆盖的场景比我想的多。

Tunnel 这边:

  • NAS 上的 Jellyfin、Emby、照片库,外面随时开,端口号都不用记,证书也不用操心
  • 家里的 HomeAssistant、路由器管理页、各种面板,HTTP 的都能挂,配上 Cloudflare Access 还能再加一层登录
  • 给朋友临时看个页面、传个文件,开个二级域名指过去,用完删掉
  • 自建的小博客、导航页、相册这种,对回源带宽要求不高

FRP 这边:

  • SSH 进家里或者公司的机器,TCP 直连,敲命令不会一顿一顿
  • 远程桌面、VNC 这种对延迟敏感的
  • 数据库、Redis 这类不该挂公网 HTTP 的,映射出去之后记得在 VPS 上做白名单,或者只监听本地
  • 大流量,传镜像、下蓝光、备份,走 Tunnel 那个 2~5 MB/s 能等到怀疑人生
  • 游戏联机、摄像头那种 UDP,Tunnel 只认 HTTP 和 WebSocket,只能走 FRP
  • 临时给别人开个端口试两天,用完关掉

说白了,对外的、走 HTTP 的、要安全的交给 Tunnel;要速度、要协议、要自己看着的,用 FRP。

哪天想把待办也挪到 FRP 上,也不麻烦。VPS 上给 NextTodo 配个域名反代(1Panel 的 OpenResty 现成),DNS 只解析不开橙云,证书 Let’s Encrypt 自动续。App 里把地址换一下,数据还是那一份。

折腾这么一圈就为省不到一秒,说出去挺好笑,不过量完心里踏实多了。

晚来天欲雪,能饮一杯无