一键直连
客户端只做一件事:主动向外连服务端。路由器不用碰、光猫不用设、端口映射不用做,也不借助任何第三方中转平台。插上就能通。
TSM Travel = Tunnel + Session Multiplexer + travel。对标 frp 的内网穿透反向转发系统—— 客户端只主动出站,路由器不用碰、端口映射不用做;同一份程序装好后,在 Web 面板里自助选角色。
成熟架构原样承接 frp —— 双端模型、控制连接与数据连接分离、工作连接池、token 鉴权;真正下手改的,是「人怎么用它」。
客户端只做一件事:主动向外连服务端。路由器不用碰、光猫不用设、端口映射不用做,也不借助任何第三方中转平台。插上就能通。
Windows 双击脚本即启动;Linux 一条命令走完建环境、装依赖、初始化数据目录、写入角色与鉴权的全流程。不要求任何编程基础。
隧道建几条、端口怎么分配、客户端接进来没有、证书指纹是多少——全在 Web 面板里看得见、点得到,不用打开配置文件对着行号改。
完整支持 Linux 与 Windows。Windows 端可一键打包为免安装独立程序,目标机器连 Python 都不用装,整包拷走即可完成迁移。
不是重造一套协议,而是在同一个成熟模型上,把「部署与运维的门槛」拆掉。
箭头只有一条,方向只有一个:内网侧主动出站。公网侧不接受任何入站反向连接,管理面与数据面之间也没有第二根线可以走。
架构上划了一条硬线:管理进程只管交互,压力小;转发内核独立扛流量。 两者仅通过 127.0.0.1 上的 IPC 交换指令与状态快照,转发逻辑一行都不写进管理进程。
FastAPI + SQLite,默认监听 1237asyncio + uvloop,控制端口 8000 与 N 个转发端口一个解决「家里那台设备出不去」,一个解决「项目还没上线就被备案卡住」。

运营商的大内网 NAT 已成常态,绝大多数家庭宽带拿不到独立公网 IPv4。家里那台群晖、威联通、绿联只能在局域网里转圈,人在外地想看张照片、取份文件都做不到。
现在做法很简单:一台有公网 IP 的云服务器当服务端,家里的 NAS 装成客户端。管理后台、私有云盘、相册、下载器想开几个服务,就开几条隧道。

国内服务器做网站通常要先走 ICP 备案,周期长、材料多,很多个人开发者与小团队在项目还处于验证阶段时就被卡在这一关。
TSM Travel 给出另一条路径:海外服务器架成服务端、国内服务器装成客户端,隧道把国内服务转发到海外节点,域名直接指向海外端口对外提供服务——不备案也能访问,项目当天就能上线跑起来。
面板有登录鉴权、密码有加盐哈希、传输有 TLS 1.3,工程化能力也一并补齐。
管理面板首次访问必须先设定管理员账号密码,密码经 PBKDF2 加盐哈希后落库,明文不落盘。
登录页带拼图缺口验证,图片由后端纯标准库生成、不依赖 Pillow;缺口位置只存在于加密签名的 token 里、不下发浏览器。
所有管理接口需登录后方可调用,连续失败触发限速,验证码失败同样计入,多进程部署也不会出现验证码对不上。
管理进程与转发内核只通过本机环回地址通信,转发逻辑绝不写进管理进程,交互面被攻破也不会直接放通数据面。
面板与内核每小时自动清理一次,天数可在面板里改、改完不用重启;由写日志的进程原地裁剪,不会弄丢正在写入的行。
pytest 用例覆盖反向转发、多客户端多隧道、错误 token 拒绝、断线重连、端口释放、TLS 1.3 协商;并发与吞吐压测脚本随包提供。
需要 Python 3.11 及以上(Debian 12 / Ubuntu 22.04 自带即为 3.11)。
# 公网机:一条命令装成服务端 bash deploy.sh --role server # 内网机:带上服务端地址与 token bash deploy.sh --role client \ --server-addr 1.2.3.4 --token <服务端 token> # 常用选项 --venv /opt/venvs/tsmtravel # 指定虚拟环境 --mirror https://pypi.tuna... # 国内镜像 --offline # 从 wheelhouse 离线装 --tune # 顺带系统调优(需 root) --service # 装成 systemd 服务
desktop\启动桌面控制台.bat 双击即启动图形控制台 desktop\package.bat 一键打出免安装发行版 desktop\package.bat onefile 主程序打成单个 exe 打包产物 → dist\tsmtravel\ tsmtravel-desktop.exe 桌面控制台(推荐双击) tsmtravel.exe 主程序:内核 + Web 面板 启动管理面板.bat 只启面板,浏览器自动打开 使用说明.txt 整个文件夹拷到任意 x64 机器即可运行, 数据写在同级 data\,换机器整包带走即迁移。
云厂商安全组与本机防火墙同时放行 1237、8000,以及每一个转发端口(900 / 901 / …)——这一步最容易漏。
面板「隧道管理 → 新建隧道」,填隧道名、公网端口 remote_port、内网端口 local_port 与绑定客户端。
内网机跑同一份程序,填服务端地址、控制端口与 token,校验方式选 ca_file 或证书指纹,隧道名与端口保持一致。