就是简单地用 KCP 或 QUIC 包裹 TCP 数据进行传输,在 TCP 连接受到限制的情况(比如 Minecraft 联机)中可以有效减低延迟。UDP 被阻断另当别论了(笑
- KCP:低延迟、无加密(默认,原有行为)
- QUIC:内建 TLS 1.3 加密,基于 Ed25519 非对称密钥的身份验证(新增)
使用 --help 可以查看使用方法
Usage: tcp-tunnel.exe [OPTIONS] --proxy-addr <PROXY_ADDR>
Options:
--server 运行服务端模式
--client 运行客户端模式
--protocol <PROTOCOL> 承载协议 [default: kcp] [possible values: kcp, quic]
-p, --proxy-addr <PROXY_ADDR> 服务端模式下的代理地址,客户端模式下的远程连接地址
-l, --listen-addr <LISTEN_ADDR> 服务端模式下的监听地址,客户端模式下的本地监听地址 [default: 0.0.0.0:25565]
--trust-key <sha256:HEX> quic 客户端信任的服务端公钥指纹(可重复)
--insecure quic 客户端跳过对端身份验证(不安全)
--config <CONFIG> TOML 配置文件路径
-h, --help Print help
Commands:
fingerprint 展示本机当前公钥(~/.tcp-tunnel/public.pem)及其 sha256 指纹
对于客户端直接使用
./tcp-tunnel --proxy-addr <远程地址>
就只可以直接在本地 25565 端口开一个入口端口,连接即可访问远程服务
比如
./tcp-tunnel --proxy-addr 1.1.1.1:25565
对于服务端,可以这样使用
./tcp-tunnel --server --proxy-addr <代理地址> --listen-addr <监听地址>
比如
./tcp-tunnel --server --proxy-addr 127.0.0.1:25565 --listen-addr 0.0.0.0:25565
由于监听用的 UDP,甚至可以直接使用同端口的地址。
QUIC 模式下程序会自动管理密钥:首次启动在 ~/.tcp-tunnel/(Windows 为 %USERPROFILE%\.tcp-tunnel)下生成 Ed25519 密钥对(private.pem + public.pem),之后复用,无需自己生成证书。
在服务端机器上执行:
./tcp-tunnel fingerprint
会输出公钥内容及其 sha256 指纹(服务端启动时也会打印指纹):
Public key (C:\Users\xxx\.tcp-tunnel\public.pem):
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEA...
-----END PUBLIC KEY-----
sha256 fingerprint: sha256:af173bade2a996fa4378f62a292d5b619558716290bd42dc2b6496ce0ea8c30d
./tcp-tunnel --server --protocol quic --proxy-addr <代理地址> --listen-addr <监听地址>
把服务端的指纹配置到客户端(--trust-key 可重复指定多个,支持密钥轮换):
./tcp-tunnel --protocol quic --proxy-addr <服务端地址> --trust-key sha256:af173bade2a996fa4378f62a292d5b619558716290bd42dc2b6496ce0ea8c30d
也可以写到 TOML 配置文件(配合 --config 使用):
[quic]
trust_keys = ["sha256:af173bade2a996fa4378f62a292d5b619558716290bd42dc2b6496ce0ea8c30d"]./tcp-tunnel --protocol quic --proxy-addr <服务端地址> --config config.toml
先用 --config-init 生成模板配置文件(已存在时不覆盖):
./tcp-tunnel --config-init # 生成 ./config.toml
./tcp-tunnel --config-init --config my.toml # 生成到指定路径
编辑模板填入服务端指纹后即可配合 --config 使用。
⚠️ 客户端默认必须配置至少一个信任指纹。仅在明确知道风险时可用--insecure跳过身份验证(不能与--trust-key同时使用)。
- 删除服务端
~/.tcp-tunnel/下的密钥文件后重启,会生成新密钥对 - 新指纹分发到各客户端后,旧指纹可移除;轮换期间新旧指纹可并存
本项目以 MIT 许可证开源