az-addhost
自动收集自
crates/network/addhost/README.md。
addhost 是一个纯 Rust 的端口发布工具。它通过 SSH 反向隧道,把本机 HTTP 服务发布到具有公网 IP 和域名的 Linux 服务器;公网机运行同一个 addhost 二进制,根据 HTTP Host 头完成域名路由,不依赖 Caddy、Nginx、FRP 或云厂商 SDK。
日常命令只有两个参数:
addhost demo 12345
执行后,本机的 http://127.0.0.1:12345 会发布为 http://demo.dev.example.com。
云厂商无关
域名只需提前增加一次通配 DNS 记录:
*.dev.example.com A 公网服务器 IPv4
这条记录可以配置在华为云 DNS、腾讯云 DNS、Cloudflare DNS 或其他任意权威 DNS 服务中。addhost 不调用云厂商 API,也不保存 DNS 密钥。
安装
本机执行:
npm install --global addhost-cli
npm 包只负责按操作系统下载预编译的 Rust 二进制,运行时不需要 Node.js 模块。
前置条件
- 本机能使用 SSH 密钥登录公网 Linux 服务器。
- 公网服务器已安装 Node.js/npm,供首次初始化安装同版本 relay 二进制。
- 公网服务器开放 TCP
80和 SSH 端口。 - 非 root SSH 用户需要免密
sudo。 - SSH 服务端允许 TCP 转发,OpenSSH 默认允许。
- 通配 DNS 记录已指向公网服务器。
首次初始化
addhost init \
--server root@public.example.com \
--domain dev.example.com
初始化会通过 SSH 在公网机执行同版本的 npm install --global addhost-cli,然后创建并启动 addhost-relay.service。公网机不需要手动安装反向代理。
已有独立部署流程时,可以只保存本地配置,并自行运行 addhost relay serve:
addhost init \
--server deploy@public.example.com \
--domain dev.example.com \
--skip-relay-prepare
使用
# 发布或更新映射
addhost teamcity 8111
# 查看保存的映射
addhost list
# 查看隧道状态
addhost status
addhost status teamcity
# 删除隧道和公网路由
addhost remove teamcity
relay 以 TCP 方式透传完整 HTTP/1.1 连接,因此普通 HTTP、WebSocket、SSE 和流式响应都可以工作。SSH 反向端口只监听公网机的 127.0.0.1,不会直接暴露高位端口。
公网 relay 命令
addhost relay serve --listen 0.0.0.0:80
addhost relay route set demo.dev.example.com 23456
addhost relay route list
addhost relay route remove demo.dev.example.com
当前边界
- 第一版只提供 HTTP,不伪装成已经具备 HTTPS。后续可以在 Rust relay 内加入 ACME/TLS,不需要重新引入 Caddy。
- 本机休眠、重启或网络切换后,OpenSSH 后台隧道可能离线;再次执行同一条
addhost <NAME> <PORT>即可重建。 - CLI 只负责网络暴露,不会为内部管理页面增加登录认证。发布 TeamCity、数据库管理台等敏感服务前,应启用应用自身认证。
- 当前按 HTTP 服务设计;原始 TCP、UDP 和多端口协议需要单独的发布模型。
从源码安装
cargo install --path crates/network/addhost