Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TCP -> 📦 -> KCP / QUIC

这个能干嘛

就是简单地用 KCP 或 QUIC 包裹 TCP 数据进行传输,在 TCP 连接受到限制的情况(比如 Minecraft 联机)中可以有效减低延迟。UDP 被阻断另当别论了(笑

  • KCP:低延迟、无加密(默认,原有行为)
  • QUIC:内建 TLS 1.3 加密,基于 Ed25519 非对称密钥的身份验证(新增)

How to use

使用 --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 指纹

KCP 模式(默认)

对于客户端直接使用

./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 模式

QUIC 模式下程序会自动管理密钥:首次启动在 ~/.tcp-tunnel/(Windows 为 %USERPROFILE%\.tcp-tunnel)下生成 Ed25519 密钥对(private.pem + public.pem),之后复用,无需自己生成证书。

1. 查看服务端公钥指纹

在服务端机器上执行:

./tcp-tunnel fingerprint

会输出公钥内容及其 sha256 指纹(服务端启动时也会打印指纹):

Public key (C:\Users\xxx\.tcp-tunnel\public.pem):
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEA...
-----END PUBLIC KEY-----
sha256 fingerprint: sha256:af173bade2a996fa4378f62a292d5b619558716290bd42dc2b6496ce0ea8c30d

2. 服务端

./tcp-tunnel --server --protocol quic --proxy-addr <代理地址> --listen-addr <监听地址>

3. 客户端

把服务端的指纹配置到客户端(--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 同时使用)。

4. 密钥轮换

  • 删除服务端 ~/.tcp-tunnel/ 下的密钥文件后重启,会生成新密钥对
  • 新指纹分发到各客户端后,旧指纹可移除;轮换期间新旧指纹可并存

LICENSE

本项目以 MIT 许可证开源

About

将 TCP 协议流的数据用 KCP/QUIC 代理传输,提高传输可靠性

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages