本指南帮助你从零开始部署 RustProxy 服务端和客户端。
无需手动下载,一条命令自动检测系统架构、下载最新版本、部署为 systemd 服务:
# 部署服务端
curl -sL https://cnb.cool/emchaye/RustProxy/-/git/raw/main/deploy/install-server.sh | bash
# 部署客户端
curl -sL https://cnb.cool/emchaye/RustProxy/-/git/raw/main/deploy/install-client.sh | bash
# 指定版本部署
curl -sL https://cnb.cool/emchaye/RustProxy/-/git/raw/main/deploy/install-server.sh | bash -s 0.1.9
curl -sL https://cnb.cool/emchaye/RustProxy/-/git/raw/main/deploy/install-client.sh | bash -s 0.1.9一键脚本功能:
- 自动检测系统架构(x86_64 / aarch64 / armv7 / i686)
- 自动获取最新版本号,也可手动指定
- 自动安装缺少的依赖(curl / tar)
- 升级安装时自动备份并恢复用户配置文件
- 自动部署 systemd 服务
- 支持重复执行(升级/重装)
脚本需要 root 权限运行。
- Linux 系统(x86_64、aarch64/arm64、armv7、i686)
- macOS 系统(x86_64、aarch64)
- Windows 系统(x86_64)
- 无需安装任何运行时依赖(Linux 为 musl 静态编译,零依赖)
从 Release 页面 下载对应架构的压缩包:
| 文件名 | 架构 | 包含内容 |
|---|---|---|
rustproxy-server-x86_64-linux-musl.tar.gz |
x86_64 (amd64) | 二进制 + 配置模板 + systemd 服务 |
rustproxy-server-aarch64-linux-musl.tar.gz |
aarch64 (arm64) | 同上 |
rustproxy-server-armv7-linux-musleabihf.tar.gz |
armv7 (armhf) | 同上 |
rustproxy-server-i686-linux-musl.tar.gz |
i686 (32-bit) | 同上 |
rustproxy-client-x86_64-linux-musl.tar.gz |
x86_64 (amd64) | 二进制 + 配置模板 + systemd 服务 |
rustproxy-client-aarch64-linux-musl.tar.gz |
aarch64 (arm64) | 同上 |
rustproxy-client-armv7-linux-musleabihf.tar.gz |
armv7 (armhf) | 同上 |
rustproxy-client-i686-linux-musl.tar.gz |
i686 (32-bit) | 同上 |
| 文件名 | 架构 |
|---|---|
rustproxy-server-x86_64-macos.tar.gz |
Intel Mac |
rustproxy-server-aarch64-macos.tar.gz |
Apple Silicon (M1/M2/M3) |
rustproxy-client-x86_64-macos.tar.gz |
Intel Mac |
rustproxy-client-aarch64-macos.tar.gz |
Apple Silicon (M1/M2/M3) |
| 文件名 | 架构 |
|---|---|
rustproxy-server-x86_64-windows.tar.gz |
x86_64 |
rustproxy-client-x86_64-windows.tar.gz |
x86_64 |
| 文件名 | 架构 |
|---|---|
rustproxy-server-freebsd-linux-amd64fb.tar.gz |
amd64 |
rustproxy-client-freebsd-linux-amd64fb.tar.gz |
amd64 |
服务端部署在公网服务器上,客户端部署在内网机器上。两者不需要在同一台机器。
mkdir -p /home/rustproxy/server
cd /home/rustproxy/server
# x86_64 服务器
tar xzf rustproxy-server-x86_64-linux-musl.tar.gz
# 或 aarch64 服务器
# tar xzf rustproxy-server-aarch64-linux-musl.tar.gz解压后目录结构:
/home/rustproxy/server/
├── rustproxy-server # 服务端二进制
├── server.toml # 配置文件
└── rustproxy-server.service # systemd 服务文件
vim server.toml必须修改的配置项:
[server]
# ⚠️ 必须修改!客户端连接时需携带相同 Token
token = "你的随机密钥"
[web]
# ⚠️ 必须修改!Web 面板登录密码(支持明文或 bcrypt 哈希,推荐 bcrypt)
password = "你的强密码"
# JWT 签名密钥,独立于客户端认证 Token
# ⚠️ 生产环境建议显式设置为随机强密钥,避免与 server.token 复用
# 留空则启动时自动生成(重启后已登录用户需重新登录)
jwt_secret = "另一个随机密钥"
# JWT Token 过期时间(小时),默认 2
# token_expire_hours = 2
# 允许访问 Web 面板的外部网站域名(一般留空即可)
# 留空 = 只有通过面板本身地址访问才有效,其他网站无法冒用你的面板
# 如果你的面板地址是 http://1.2.3.4:7500,那直接浏览器访问就没问题
# 只有当你需要从其他网站(如 http://my-site.com)调用面板 API 时才需要填写
# cors_origins = []其他配置项使用默认值即可,首次启动时会自动生成 TLS 自签证书并保存到
certs/目录。
方式一:手动启动(测试用)
./rustproxy-server服务启动后:
- 隧道端口:
0.0.0.0:7000(客户端连接用) - Web 面板:
http://0.0.0.0:7500 - 自动生成自签证书保存到
certs/目录
方式二:systemd 守护进程(生产推荐)
# 安装 systemd 服务文件
cp rustproxy-server.service /etc/systemd/system/
# 加载并启动
systemctl daemon-reload
systemctl enable --now rustproxy-server
# 查看状态
systemctl status rustproxy-server
# 查看日志
journalctl -u rustproxy-server -f# 隧道端口(客户端连接)
firewall-cmd --permanent --add-port=7000/tcp
# Web 管理面板
firewall-cmd --permanent --add-port=7500/tcp
# 代理端口(根据实际使用的远程端口开放,如 6000-6100)
firewall-cmd --permanent --add-port=6000-6100/tcp
# HTTP/HTTPS 代理端口(如果启用)
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=8443/tcp
firewall-cmd --reload浏览器访问 http://你的服务器IP:7500,使用配置文件中的账号密码登录。
添加代理规则示例:
| 字段 | 值 | 说明 |
|---|---|---|
| 名称 | ssh |
规则唯一标识 |
| 类型 | tcp |
TCP 端口映射 |
| 客户端 ID | my-server |
对应客户端配置中的 id |
| 本地地址 | 127.0.0.1 |
客户端本地的服务地址 |
| 本地端口 | 22 |
客户端本地的服务端口 |
| 远程端口 | 6000 |
服务端暴露的公网端口 |
创建规则后,当客户端连接时会自动接收该规则并开始转发。
mkdir -p /home/rustproxy/client
cd /home/rustproxy/client
# x86_64 机器
tar xzf rustproxy-client-x86_64-linux-musl.tar.gz
# 或 aarch64 机器
# tar xzf rustproxy-client-aarch64-linux-musl.tar.gz解压后目录结构:
/home/rustproxy/client/
├── rustproxy-client # 客户端二进制
├── client.toml # 配置文件
└── rustproxy-client.service # systemd 服务文件
vim client.toml必须修改的配置项:
[client]
# 客户端唯一标识,需与 Web 面板中代理规则的「客户端 ID」一致
id = "my-server"
# 服务端公网地址
server_addr = "你的服务器IP"
server_port = 7000
# 必须与服务端 token 一致
token = "你的随机密钥"
# ⚠️ 生产环境推荐:拷贝服务端证书到客户端并指定路径
# 将服务端 certs/server.crt 复制到客户端机器,例如 certs/ca.crt
# ca_cert = "certs/ca.crt"
# 使用正式 CA 证书时,必须设置为证书绑定的域名
# server_name = "proxy.example.com"客户端不需要配置任何代理规则!所有规则由服务端 Web 面板管理,客户端认证后自动接收。
方式一:手动启动(测试用)
./rustproxy-client方式二:systemd 守护进程(生产推荐)
# 安装 systemd 服务文件
cp rustproxy-client.service /etc/systemd/system/
# 加载并启动
systemctl daemon-reload
systemctl enable --now rustproxy-client
# 查看状态
systemctl status rustproxy-client
# 查看日志
journalctl -u rustproxy-client -f客户端启动后日志中应出现:
INFO rustproxy_client: 已连接到服务端
INFO rustproxy_client: 收到代理规则: ssh (tcp, 127.0.0.1:22 -> :6000)
此时即可通过 服务器IP:6000 访问内网的 SSH 服务。
[server]
bind_addr = "0.0.0.0" # 隧道监听地址
bind_port = 7000 # 隧道监听端口
token = "CHANGE_ME" # 客户端认证 Token(⚠️ 必须修改)
http_port = 8080 # HTTP 代理端口(0 = 不监听)
https_port = 8443 # HTTPS 代理端口(0 = 不监听)
[web]
enable = true # 是否启用 Web 面板
bind_addr = "0.0.0.0" # Web 面板监听地址
bind_port = 7500 # Web 面板端口
user = "admin" # Web 面板用户名
password = "CHANGE_ME" # Web 面板密码(⚠️ 必须修改)
# 支持明文或 bcrypt 哈希(推荐哈希)
# 生成哈希: ./rustproxy-server hash-password 你的密码
jwt_secret = "" # JWT 签名密钥(独立于客户端 Token)
# ⚠️ 生产环境建议显式设置随机密钥
# 留空则启动时自动生成(重启后已登录用户需重新登录)
token_expire_hours = 2 # JWT Token 过期时间(小时)
cors_origins = [] # 允许访问面板的外部网站(留空=只有直接访问面板地址才有效)
[tls]
auto_cert = true # 自动生成自签证书
cert_file = "certs/server.crt" # 证书路径
key_file = "certs/server.key" # 密钥路径[client]
id = "my-laptop" # 客户端唯一标识
server_addr = "127.0.0.1" # 服务端地址
server_port = 7000 # 服务端隧道端口
token = "CHANGE_ME" # 与服务端一致的 Token(⚠️ 必须修改)
ca_cert = "" # CA 证书路径(⚠️ 生产环境推荐配置,见下方说明)
server_name = "" # TLS SNI 域名(正式证书时必须设置为证书域名)| 类型 | 说明 | 需要的字段 |
|---|---|---|
tcp |
TCP 端口映射 | remote_port(服务端公网端口) |
udp |
UDP 端口映射 | remote_port |
http |
HTTP 代理,基于域名路由 | custom_domains(域名列表) |
https |
HTTPS 代理,服务端终止 TLS | custom_domains |
RustProxy 客户端与服务端之间的通信隧道通过 TLS 加密,需正确配置证书以确保安全。
默认 auto_cert = true,首次启动时自动生成自签证书并保存到 certs/ 目录。后续启动复用已有证书。
此时客户端 ca_cert 留空,将跳过证书验证(信任一切连接)。仅适用于开发/测试环境,存在中间人攻击风险。
生产环境应将服务端生成的证书复制到客户端,启用标准 TLS 证书验证:
第一步:服务端启动后确认证书已生成
ls /home/rustproxy/server/certs/
# 应看到 server.crt server.key第二步:将服务端证书安全拷贝到客户端机器
# 在客户端机器上执行(替换为你的服务端 IP)
mkdir -p /home/rustproxy/client/certs/
scp root@你的服务器IP:/home/rustproxy/server/certs/server.crt /home/rustproxy/client/certs/ca.crt只需拷贝
.crt证书文件,不要拷贝.key私钥文件!私钥应仅保存在服务端。
第三步:客户端配置指定证书路径
[client]
# ... 其他配置 ...
ca_cert = "certs/ca.crt" # 指向刚才拷贝的证书文件配置后客户端将进行标准 TLS 验证,只有持有对应私钥的服务端才能通过握手,有效防止中间人攻击。
如果你有自己的 CA 或购买了正式证书(如 Let's Encrypt),强烈推荐在生产环境使用。
使用正式证书可以让 RustProxy 的 TLS 流量看起来像普通的 HTTPS 网站,大幅降低被 DPI/防火墙识别为代理工具的风险。
服务端配置:
[tls]
auto_cert = false
cert_file = "certs/server.crt" # 放入正式证书(fullchain)
key_file = "certs/server.key" # 放入私钥将正式证书文件(如 Let's Encrypt 的 fullchain.pem)和私钥文件(privkey.pem)分别放到 certs/server.crt 和 certs/server.key。
客户端配置:
[client]
# ... 其他配置 ...
ca_cert = "certs/ca.crt" # 放入服务端的 CA 证书(或 fullchain)
server_name = "proxy.example.com" # ⚠️ 必须与证书绑定的域名一致!关键:使用正式证书时,客户端必须设置
server_name为证书绑定的域名(如proxy.example.com)。 这是 TLS 握手中的 SNI(Server Name Indication),必须与证书域名匹配,否则握手会失败。 自签证书模式下server_name留空即可(自动使用server_addr)。
| 场景 | 服务端 auto_cert |
客户端 ca_cert |
客户端 server_name |
安全级别 |
|---|---|---|---|---|
| 开发/测试 | true |
"" (留空) |
"" (留空) |
|
| 生产环境(自签证书) | true |
"certs/ca.crt" |
"" (留空) |
✅ 高 — 标准验证 |
| 生产环境(正式证书) | false |
CA 证书路径 | 证书域名 | ✅✅ 最高 — 标准验证 + 抗 DPI |
- 检查服务端隧道端口(默认 7000)是否开放防火墙
- 检查客户端
server_addr是否正确 - 检查客户端和服务端的
token是否一致 - 如果客户端配置了
ca_cert,确认证书文件存在且与服务端证书匹配 - 查看服务端日志:
journalctl -u rustproxy-server -f
- 如果使用自签证书且
ca_cert = "",不应出现此错误(跳过验证模式) - 如果配置了
ca_cert,确认拷贝的是服务端certs/server.crt而非.key文件 - 服务端重新生成证书后(删除
certs/重启),客户端的ca.crt需要重新拷贝 - 检查证书文件权限:
ls -la certs/
- 检查 Web 面板端口(默认 7500)是否开放防火墙
- 确认
web.enable = true - 检查
web.bind_addr是否为0.0.0.0
- 检查服务端对应远程端口是否开放防火墙
- 在 Web 面板确认代理规则状态为已激活
- 确认客户端已连接且收到了代理规则
# 服务端
journalctl -u rustproxy-server -f
# 客户端
journalctl -u rustproxy-client -f方式一:一键脚本(推荐)
# 重新执行部署脚本即可,自动下载最新版并保留配置
curl -sL https://cnb.cool/emchaye/RustProxy/-/git/raw/main/deploy/install-server.sh | bash
curl -sL https://cnb.cool/emchaye/RustProxy/-/git/raw/main/deploy/install-client.sh | bash方式二:手动更新
# 1. 下载新版压缩包
# 2. 停止服务
systemctl stop rustproxy-server # 或 rustproxy-client
# 3. 替换二进制(配置文件保留不覆盖)
cd /home/rustproxy/server
tar xzf rustproxy-server-x86_64-linux-musl.tar.gz rustproxy-server
# 4. 重启服务
systemctl start rustproxy-server默认在工作目录下生成 rustproxy.db(SQLite),存储代理规则和客户端状态。可通过 --db 参数指定路径:
./rustproxy-server --db /var/lib/rustproxy/rustproxy.db