前言
前阵子搞了个待办软件叫 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 里把地址换一下,数据还是那一份。
折腾这么一圈就为省不到一秒,说出去挺好笑,不过量完心里踏实多了。
