部署 Relay (Tunnel 中继)
你会学到:TunnelRelay 节点的职责、openflare-relay 的配置项与环境变量、使用 Docker 运行 Relay 的方法,以及如何通过源码手动构建并部署 Relay。
在 OpenFlare 的内网穿透体系中,TunnelRelay 节点 扮演着关键的角色。它与普通的边缘节点(Edge Node)不同,除了运行传统的 Agent(托管 OpenResty 进行 HTTPS/WAF 处理)外,还同机运行了 Relay (frps 隧道管理器) 服务,负责监听内网客户端(OpenFlared)的隧道连接并进行流量中继。
前置条件
在部署 TunnelRelay 节点之前,请确保:
- 已注册为 TunnelRelay 类型节点:在 OpenFlare 管理端「节点管理」中,添加一个类型为
tunnel_relay的节点,并获取其专属的agent_token或使用全局discovery_token。 - 网络端口:
- 必须确保
bindPort(frpc 连接端口,默认7000)可被公网/内网客户端访问。 - 必须确保
vhostHTTPPort(HTTP Vhost 端口,默认8080)处于空闲状态,Agent 将在此端口上与 frps 进行流量传递。
- 必须确保
- 软件依赖(仅限宿主机直接部署):
- 本地需有可执行的
frps二进制文件(建议版本为v0.61.0+或最新稳定版v0.69.0),或通过参数显式指定路径。
- 本地需有可执行的
配置文件与环境变量
openflare-relay 启动时默认会读取当前目录下的 relay.json。同时也完全支持通过环境变量进行覆盖。
配置字段详情
| JSON 字段 | 环境变量 | 说明 | 默认值 |
|---|---|---|---|
server_url | OPENFLARE_SERVER_URL | OpenFlare Server 接口服务地址 | 无(必填) |
agent_token | OPENFLARE_AGENT_TOKEN | 节点专属 Token | 与下者二选一 |
discovery_token | OPENFLARE_DISCOVERY_TOKEN | 自动注册 Token | 与上者二选一 |
node_name | OPENFLARE_NODE_NAME | 节点标识名称 | 默认获取本机主机名 |
node_ip | OPENFLARE_NODE_IP | 节点出口/监听 IP | 自动检测真实出口 IP |
frps_path | OPENFLARE_FRPS_PATH | frps 可执行二进制文件路径 | "frps" |
data_dir | OPENFLARE_DATA_DIR | 本地数据与生成的 frps.toml 存放目录 | "./data" |
state_path | - | 本地状态 JSON 记录文件路径 | "{data_dir}/relay-state.json" |
heartbeat_interval | - | 心跳周期(支持毫秒数或 Go Duration 字符串) | 10000 (10s) |
request_timeout | - | 接口请求超时时长 | 10000 (10s) |
Docker 运行(推荐)
Docker 运行是 TunnelRelay 节点最便捷的部署方案。官方镜像内置了 openflare-relay 控制器与 frps v0.69.0 运行时,开箱即用。
docker pull ghcr.io/rain-kl/openflare-relay:latest
docker rm -f openflare-relay 2>/dev/null || true
docker run -d --name openflare-relay --restart unless-stopped \
-p 7000:7000 \
-p 17500:17500 \
-e OPENFLARE_SERVER_URL=http://your-server:3000 \
-e OPENFLARE_AGENT_TOKEN=YOUR_AGENT_TOKEN \
-v openflare-relay-data:/app/data \
ghcr.io/rain-kl/openflare-relay:latestTIP
这里的 -p 7000:7000 映射的是 frpc 客户端连接中继的端口。如果管理端配置了自定义的 relay_bind_port,请对应修改宿主机端口映射。
NOTE
开启内嵌 frps Web UI: 如果在 Server 控制端开启了中继流量监控面板(即数据库/系统设置中的 relay_frps_web_ui_enabled 设为 true),你需要将 Web 端口(默认是 17500,由系统设置中的 relay_frps_web_ui_port 控制)也通过 -p 17500:17500 映射到宿主机。 登录 Web UI 时的用户名固定为 admin,密码为当前中继节点的 agent_token。
宿主机手动运行
如果您倾向于在物理机或虚拟机上直接运行:
1. 编译二进制
go build -o bin/openflare-relay ./cmd/relay2. 准备 relay.json
在程序同级目录下创建 relay.json 配置文件:
{
"server_url": "http://127.0.0.1:3000",
"agent_token": "your-relay-node-agent-token",
"frps_path": "/usr/local/bin/frps",
"data_dir": "./data",
"heartbeat_interval": "10s",
"request_timeout": "10s"
}3. 运行服务
export LOG_LEVEL='info'
./openflare-relay -config ./relay.json启动与验证
1. 查看进程日志
# Docker 容器日志
docker logs -f openflare-relay如果是在 Linux 上通过 Systemd 托管的,可执行:
journalctl -u openflare-relay -f2. 验证运行状态
启动成功后,Relay 将进行以下工作:
- 向控制面发送 HTTP 心跳以注册/上线。
- 从控制面获取最新的 frps 基础配置(包括
bindPort、vhostHTTPPort与自动生成的隧道认证凭证auth_token)。 - 在本地自动渲染出
data/frps.toml配置文件。 - 自动拉起子进程
frps -c data/frps.toml。 - 如果进程意外崩溃,Relay 将在 2 秒后自动拉起它。
3. 管理端确认
登录管理后台,导航至 「节点管理」,确认:
- 该 TunnelRelay 节点状态标记为 「在线」。
- 节点类型正确标记为 中继节点 且 frps 运行状态为 正常 (Healthy)。