跳到主要内容
telesh

切换语言

中文English

主题

telesh
功能工作原理场景快速开始对比文档GitHub
开源自托管 · 内网穿透 + P2P 直连

让本地端口,
公网可达。

把本机的 HTTP / TCP 服务发布到固定公网域名;也能通过 P2P 直连,把远端主机的端口镜像到本地。无需公网 IP,无需改网络拓扑。

$
cargo install --git https://github.com/zeaphoo/telesh telesh
  • 单二进制 · 无运行时依赖
  • Apache-2.0 开源
  • 可自托管 control server
telesh · 127.0.0.1:16345connected
已发布端口3 live
8000HTTPhttps://app.telesh.devlive
22TCPtelesh.dev:18000live
5432P2P000012345/dblive
请求日志streaming
GET/api/users20012ms
POST/webhook/stripe2004ms
GET/assets/app.js3041ms
P2P000012345/db · queryOK8ms
GET/healthz2002ms
协议与能力/HTTPHTTPSTCPQUICirohyamuxUPnPPCPNAT-PMP

// 01 — 功能

一个进程,打通出站与入站

telesh 同时扮演发布方与访问方:既能把你本地的服务推给公网,也能把远端服务拉到你本地。控制面只传小消息,数据面走独立的 QUIC / yamux 连接。

http_register

HTTP / HTTPS 隧道

把本地 Web 服务发布到固定子域名,服务端自动签发 Let's Encrypt 证书,自带重放与请求日志。

tcp_register

TCP 端口映射

SSH、数据库、游戏服等任意 TCP 服务,映射到服务端的公网端口,无需为此写一行网关代码。

iroh · QUIC

P2P 直连

基于 iroh 打洞的 QUIC 连接,流量点对点传输、不经服务端;打洞失败自动回退到加密中继。

lookup + mirror

端口镜像

把远端主机的端口映射到本地监听端口,像访问本机服务一样调试远端环境,支持断线重连。

127.0.0.1:16345

本地发布管理

常驻 agent 自动发现本机监听端口,在 127.0.0.1:16345 上按需开关发布、实时查看请求日志。

server.toml

自托管服务端

一个 server.toml 启动控制面、数据面与内嵌 iroh relay;支持 ACME、TLS 与 QUIC 地址发现。

还包括Ed25519 挑战-应答登录短期不透明访问令牌UPnP / PCP / NAT-PMP请求日志与回放多隧道·单进程容器内自动发现端口

// 02 — 工作原理

控制面与数据面分离

一条长连接只传小消息(登录、子域、目录、保活),真正的字节走独立的数据面。这样控制协议可以稳定演进,转发路径也能保持原始吞吐。

出站 · 发布

把本地服务发布到公网

agent 主动连上服务端,公网流量从边缘入口进来,经独立数据面转发到你的本地端口。

本地服务127.0.0.1:8000
注册隧道
telesh agent常驻进程
公网 HTTP
telesh-server边缘入口 :8080
转发
公网访问者app.telesh.dev
入站 · P2P

把远端端口镜像到本地

服务端只负责目录查询与令牌校验,真正的载荷走打洞后的 QUIC 直连,不经服务端。

本地应用127.0.0.1:18000
P2P QUIC
telesh 镜像监听本地端口
远端 agent127.0.0.1:5432

控制面

WebSocket · JSON

登录 / 子域 / 目录 / 保活

数据面

QUIC · yamux

公网转发与 P2P 载荷

授权

短期访问令牌

服务端在线校验,作用域 account/name

// 03 — 场景

从开发到运维,都用得上

只要是「本地和远端之间差一条路」的问题,telesh 都能顺手解决。

Webhook 调试

把 Stripe / GitHub / 支付回调直接打到本地开发机,实时查看请求头与响应,并一键重放。

远程运维

用 TCP 隧道把内网 SSH / RDP 暴露到服务端公网端口,出门在外也能连回机器。

分享预览

给同事或客户一个固定域名,在浏览器里直接看你的本地构建,不必先部署到测试环境。

数据库联调

把测试环境的数据库端口镜像到本地,用熟悉的客户端直连,省去跳板机和端口转发。

家庭 / 内网服务

把家里的 NAS、媒体库或智能家居以 P2P 方式映射到本地,无需在路由器上做端口转发。

IoT / 边缘设备

设备主动连上服务端注册,随后你就能反向访问它上面的调试接口与监控页面。

// 04 — 快速开始

三分钟跑起来

命令行只有一个开关(数据目录);要发布什么,全在本地 UI 上点选。

  1. 01

    安装

    用 cargo 从源码安装,或从 Releases 下载对应平台的单文件二进制。

  2. 02

    配置控制面

    只需要写一行服务端地址;配置文件不存在时会自动生成一份默认的。

  3. 03

    启动并在 UI 上发布

    agent 自动发现本机监听端口,在本地 UI 里选择以 HTTP / TCP / P2P 方式发布。

  4. 打开本地管理界面

    默认固定在 http://127.0.0.1:16345,只监听本机、不对外。

1 · 安装

terminal
# 从源码安装(需要 Rust 1.91+)
cargo install --git https://github.com/zeaphoo/telesh telesh

2 · 配置控制面

~/.telesh/config.toml
# 要连的 control server;端口默认 9009
control_server = "tunnel.example.com:9009"

3 · 启动

terminal
# 用默认数据目录 ~/.telesh
$ telesh
info agent starting server=tunnel.example.com:9009 ui=127.0.0.1:16345

想自己托管服务端?见 服务端部署

// 05 — 对比

为什么是 telesh

在「发布到公网」之外,telesh 还多了一条反向路径:把远端端口安全地拉到你本地。

 teleshngrokfrpCloudflare Tunnel
开源 · 可完全自托管客户端开源
无需公网 IP
P2P 直连(载荷不经服务端)
把远端端口镜像到本地
控制面 / 数据面分离
固定域名 + 自动 HTTPS需自行配置

对比基于各自公开文档整理,仅供参考;发现不准确欢迎在 GitHub 上纠正。

// 06 — 常见问题

你可能想问

telesh 和 ngrok、frp 有什么不同?

telesh 既能像 ngrok / frp 一样把本地端口发布到公网,也能反过来把远端端口镜像到你本地。连接上优先走 P2P 打洞直连,打洞失败才回退到加密中继;服务端的控制面与数据面是分开的两条通道。

需要公网 IP 或自己买服务器吗?

运行 agent 的那台机器不需要公网 IP,它在 NAT 后面主动连出即可。你只需要一台有公网地址的机器跑 telesh-server,或者使用别人部署好的服务端。

流量会经过服务端吗?

P2P 模式下,载荷走打洞后的 QUIC 直连,不经过服务端;只有在无法建立直连时才会回退到加密中继。HTTP / TCP 公网隧道的流量会经过服务端边缘入口转发。

访问控制是怎么做的?

设备和账号用 Ed25519 密钥对做挑战-应答登录,首次登录即建号(TOFU)。访问某个服务时,服务端签发一个短期的、不透明的访问令牌,作用域限定在 account/name;agent 拿令牌向服务端在线校验。服务端只存令牌哈希,数据面上没有需要保管的密钥。

支持哪些平台?

telesh 用 Rust 编写,是一个无运行时依赖的单文件二进制,可运行在 Linux、macOS 和 Windows 上;在容器里也能直接运行,并且只会发现容器内的端口。

一个进程能发布多少个端口?

一个常驻 agent 可以同时管理多条隧道:同一个本地端口可以分别以 HTTP、TCP、P2P 发布,也可以声明多条「镜像远端服务」的配置,无需为每个端口各起一个进程。

Apache-2.0 · 开源

现在就给你的本地服务一个公网地址

三条命令跑起来,剩下的都在图形界面里完成。