gost 是 Go 写的转发工具,一个 exe 同时能做 HTTP/SOCKS5 代理、TCP/UDP 端口转发、TLS 隧道、多级链式转发。它的用法就是把监听地址和协议写在一行里,没有配置文件也能跑。
值不值得用,看它到底吃掉多少性能。本地回环实测:走 HTTP 代理吞吐 639.0 MB/s,与直连的 641.7 MB/s 几乎一样;换成 TCP 端口转发掉到 468.8 MB/s,降了 27%。
一行命令起一个代理
gost -V
gost v3.3.1 (go1.26.9 windows/amd64)
gost -L http://:18080
-L 后面写「协议://监听地址」,起完就是一个能用的 HTTP 代理。启动日志是 JSON,直接给出监听端口:
{"level":"info","msg":"listening on [::]:18080/tcp","kind":"service",
"service":"service-0","listener":"tcp","handler":"http"}
把 SOCKS5 换成协议名就行:gost -L socks5://:11080。要加认证就写在地址前面,gost -L http://user:pass@:18080。exe 本身不带配置文件,也不写注册表。
端口转发也是同一条命令
gost -L tcp://:19000/127.0.0.1:8899
这一行的意思是:在 19000 上监听,收到的连接全部转给 127.0.0.1 的 8899。前半段是入口,斜杠后面是目标。访问 http://127.0.0.1:19000/ 拿到的就是 8899 上的内容,客户端完全不知道中间隔了一层。
UDP 把协议名换成 udp,远程端口转发把 -L 换成 -R,多级链式转发用 -F 串起来。这些是同一套参数体系的变体,学会一个就够用。
本地回环的吞吐与延迟
起一个 127.0.0.1 上的 HTTP 文件服务,提供 10 MiB 文件,分别走三种路径下载各 5 次取中位;延迟用 16 字节的小文件测 10 次平均:
| 路径 | 吞吐(MB/s) | 相对直连(%) | 耗时(秒) | 小请求延迟(毫秒) | 比直连多(毫秒) |
|---|---|---|---|---|---|
| 直连 8899 | 641.7 | 100 | 0.016 | 14.27 | 0 |
| 经 HTTP 代理 18080 | 639.0 | 99.6 | 0.016 | 15.52 | 1.25 |
| 经 TCP 转发 19000 | 468.8 | 73 | 0.021 | 17.61 | 3.34 |
HTTP 代理这一列几乎和直连重合,639.0 对 641.7 MB/s,相对值是 99.6%,差值在测量噪声里。它只多花 1.25 毫秒的延迟,代价基本为零。
TCP 转发慢一截,468.8 MB/s 只有直连的 73%,延迟多 3.34 毫秒。原因是它对每个连接做双向拷贝,不解析内容也没有缓冲优化,纯转发靠的是 Go 的 io.Copy,数据要多过一次用户态内存。
这组数字都是本地回环跑的,跑的是「转发本身的开销」,不含真实网络。放到公网上,链路带宽通常远低于 468.8 MB/s,转发层的差异会被掩盖。
端口被占用会直接退出
> gost -L http://:18080 (18080 上已经有一个 gost 在跑)
{"level":"fatal","msg":"listen tcp :18080: bind: Only one usage of
each socket address (protocol/network address/port) is normally permitted."}
退出码 1
端口冲突时它打印一条 fatal 日志,进程立刻退出,退出码 1。脚本里起服务前可以先探测端口,避免整条启动链被这一条卡住。
还有一处更容易踩:协议名写错时它不报错。
> gost -L nosuch://:19999
(没有输出,进程活着,19999 上确实在监听)
写了一个不存在的协议名,gost 照样起服务并且端口可用,把未知协议当成默认的 TCP 处理。这类错误不会出现在日志里,只会在真正转发失败时才暴露。手写协议名的时候要留意拼写。
什么时候值得用
要在两台机器之间打通一个端口。一条 -L tcp://:端口/目标:端口 就够,不用装 nginx,不用写配置文件,Ctrl+C 就停。
临时需要一个代理。HTTP 代理和 SOCKS5 都是单条命令,测试客户端代理设置、给容器内部做出口转发都很省事。
需要多级转发。-F 可以串多个节点,把流量按顺序过几跳,这是 curl 这类单级代理做不到的。
要极致吞吐的转发层。TCP 转发实测 468.8 MB/s,只有直连的 73%。内网大流量场景下这点损耗是实打实的,对性能敏感就该用更薄的转发方案或者干脆直连。
还没测的两项:SOCKS5 与 TLS 隧道的吞吐对比 / -F 多级链路的逐跳延迟。前者要改客户端协议栈,后者至少要两台机器对打。










