oo 节点程序
当前自托管版本
v1.0.16-dev.20260925。新增独立的 SOCKS5 出站教程,可为一个 AnyTLS / Trojan 子节点设置专用出口。公开教程仅使用示例凭据。
先选安装方式
oo 是节点程序名称,不代表必须使用 oo 协议,也不只支持 Trojan。机器模式 / 节点模式是“如何连接面板”;Shadowsocks、VMess、VLESS、Trojan、Hysteria2、TUIC 等才是节点协议。
机器模式:面板后台有“机器管理”,使用机器 ID 和机器 Token,自动加载该机器下绑定的节点。
节点模式:使用单个节点 ID 和节点通信 Token,只加载指定节点。普通 Xboard 没有机器管理时选这一项。
机器 ID 与节点 ID 不能混用。是否支持机器模式以面板实际接口为准,不只看面板名称。
先选“通用机器模式”或“通用节点模式”。只有需要自动搭建 Trojan + Nginx 时,才使用后面的专用安装方案。
以下安装命令仅用于新机。已有节点请先看“更换面板地址”和“更新程序”,不要重复全新安装。
SOCKS5 出站教程
需要让已有节点的出站流量经过上游 SOCKS5 代理,请阅读独立教程。它不是 SOCKS5 入站节点安装;最低版本为 v1.0.16-dev.20260925(v1.0.16 系列),旧版本请先备份并更新。
https://node.xboardnext.com/oo/socks5-outbound.html
通用机器模式 · 所有支持的协议
适用于面板具有机器管理功能的部署。先创建机器,再把需要的 Shadowsocks、VMess、VLESS、Trojan、Hysteria2、TUIC、AnyTLS 等节点绑定到这台机器。
机器安装只需要面板地址、机器 Token 和机器 ID。协议、节点端口、传输、TLS / Reality 参数在面板配置,节点程序自动获取;不要填写 --node-type、--node-id 或 --domain。
curl -fL https://node.xboardnext.com/oo/dev/install.sh -o /tmp/oo-install.sh && sudo bash /tmp/oo-install.sh install \
--mode machine \
--panel 'https://panel.example.com' \
--token 'MACHINE_TOKEN' \
--machine-id MACHINE_ID \
--kernel auto这条命令适用于所有当前程序和面板共同支持的协议,不需要每种协议安装一次,也不会自动安装 Nginx。已部署机器后,在面板把新节点绑定到同一机器,等待程序同步;不要反复安装或创建多个机器实例。
同一台机器可以同时运行多个协议,但同一个监听 IP、端口和传输类型不能重复占用。先检查 Nginx 或其他服务是否已占用该端口。
通用节点模式 · 指定一个协议节点
适用于普通 Xboard 的单节点接入。先在面板创建对应协议的节点,使用节点通信 Token 和节点 ID;PROTOCOL 必须与面板节点真实类型一致。
curl -fL https://node.xboardnext.com/oo/dev/install.sh -o /tmp/oo-install.sh && sudo bash /tmp/oo-install.sh install \
--mode node \
--panel 'https://panel.example.com' \
--token 'NODE_TOKEN' \
--node-id NODE_ID \
--node-type PROTOCOL \
--kernel autoPROTOCOL 替换示例:Shadowsocks 用 shadowsocks;VMess 用 vmess;VLESS 用 vless;Trojan 用 trojan;TUIC 用 tuic;AnyTLS 用 anytls;Naive 用 naive;SOCKS 用 socks;HTTP 用 http;Mieru 用 mieru。
Hysteria / Hysteria2:面板 API 常统一使用 hysteria,并在节点配置中指定版本 1 或 2。若面板生成的是 --node-type hysteria,就保留 hysteria,不要只根据客户端显示名改成 hysteria2。以该面板生成的命令和实际支持的节点类型为准。
示例:安装 VLESS 单节点,只需将上述命令的 PROTOCOL 改为 vless。TLS、Reality 或 XHTTP 不通过 --node-type 区分,而是在面板对应节点中设置。普通 Trojan 直连同样使用此通用命令,不要求必须配 Nginx。
各协议部署条件 · 端口与证书
Shadowsocks:设置加密方式和节点端口;需要 UDP 转发时同时放行对应 UDP 端口。普通 Shadowsocks 不需要 TLS 证书。
VMess:设置端口和 TCP / WS / gRPC 等传输;启用 TLS 时配置域名与证书。WS / gRPC 反向代理需按面板路径和服务名另行配置,通用安装脚本不会自动配置 Nginx。
VLESS:设置传输方式和 TLS / Reality 参数。TLS 使用有效证书;Reality 在面板配置密钥及 server_name / dest 等参数,不要把 Reality 当作普通 ACME 证书模式。XHTTP / splithttp 使用支持该传输的 Xray 内核。
Trojan:通常需要 TLS 证书,放行节点 TCP 端口;若配置 Reality,应使用相应密钥和参数。可以直接监听空闲端口,也可以使用下方 Trojan + Nginx 专用方案。
Hysteria / Hysteria2:需要 TLS 证书,放行节点 UDP 端口。只开 TCP 443 不够,普通 Nginx HTTP 反向代理不能代替 UDP 入口。
TUIC:需要 TLS 证书,放行节点 UDP 端口,并确保客户端使用与服务端兼容的协议版本。
AnyTLS:需要 TLS 证书和节点 TCP 端口,同时确认客户端支持 AnyTLS。
Naive:按面板配置 HTTPS、证书和认证;需要兼容的客户端。不要仅因为程序支持该协议,就假定你的面板也能生成完整配置。
SOCKS / HTTP:使用面板支持的认证设置,并限制不必要的公网访问。普通 SOCKS 和 HTTP 代理默认不提供传输加密,不要把它们当作 TLS 代理。
Mieru:在面板设置对应的传输和端口,放行实际使用的 TCP / UDP,并使用兼容客户端。
云厂商安全组和系统防火墙都要放行实际节点端口。多个协议不是都走同一个 443;TCP 与 UDP 是不同监听类型,也要分别检查。
使用 ACME HTTP-01 自动签发证书时,域名需正确解析,外部 80 端口的验证请求需能到达程序。已有 Nginx 占用 80 时要配置验证转发,或使用受支持的 DNS 验证 / 已有证书方式,不要为了签证书盲目停止网站。
内核怎么选
默认使用 --kernel auto,由程序根据面板节点配置选择内核;当前源码中 XHTTP / splithttp 选择 Xray,其他受支持传输默认选择 sing-box。
Hysteria2、TUIC、AnyTLS、Naive、Mieru 等优先保留 auto,不要给所有协议强制 --kernel xray。支持范围取决于面板、实际下载的内核版本与客户端三者,不能仅凭节点类型名称保证可用。
如果日志提示 unsupported protocol / transport,请先检查面板配置、程序版本和实际选择的内核,不要反复安装。机器模式的同一程序可管理多个节点,每个节点仍需满足自己的内核与协议要求。
机器部署后新增其他协议
1. 在面板创建新协议节点,设置独立端口、传输和证书参数。
2. 将节点绑定到已部署的机器 ID,确认节点处于启用状态。
3. 放行该节点实际使用的端口;如需反向代理,单独配置对应入口。
4. 查看日志是否发现新节点并成功启动,再更新客户端订阅验证。
sudo journalctl -u oo.service -n 100 --no-pager
sudo ss -lntup如果出现 discovered 0 nodes,先检查面板是否真的绑定并启用了节点。如果出现端口冲突,调整面板的监听端口或检查残留服务,而不是再安装一遍。
机器模式 · Trojan + Nginx
先在面板创建机器并绑定 Trojan 节点。设置节点域名解析到本机;本教程默认 Nginx 对外监听 443,Trojan 内部监听 10443,节点证书域名与下方 --domain 保持一致。放行所需的 80、443 端口。
将 PANEL_URL、MACHINE_TOKEN、MACHINE_ID 和 node.example.com 替换为自己的值,粘贴到终端运行。机器模式不填写 --node-id 或 --node-type。
curl -fL https://node.xboardnext.com/oo/dev/easy-install.sh -o /tmp/oo-easy-install.sh && sudo bash /tmp/oo-easy-install.sh \
--mode machine \
--panel 'https://panel.example.com' \
--token 'MACHINE_TOKEN' \
--machine-id MACHINE_ID \
--domain node.example.com机器下新增节点前,检查监听端口是否重复。这个示例为一个 Trojan 域名配置 Nginx;新增其他域名、端口或协议时,还需按实际情况配置入口,不能假定一个域名会自动覆盖全部节点。
节点模式 · Trojan + Nginx
在面板创建 Trojan 节点,取得节点 ID 和节点通信 Token。域名与端口要求同上。节点模式不填写 --machine-id。
curl -fL https://node.xboardnext.com/oo/dev/easy-install.sh -o /tmp/oo-easy-install.sh && sudo bash /tmp/oo-easy-install.sh \
--mode node \
--panel 'https://panel.example.com' \
--token 'NODE_TOKEN' \
--node-id NODE_ID \
--node-type trojan \
--domain node.example.com域名只填主机名,不带 https://。多行命令每行末尾的反斜杠后面不要加空格。不要把 Markdown 链接格式一起粘贴进终端。
原作者安装链接怎么替换
面板生成的命令如果使用上游 GitHub 安装地址,只替换脚本下载地址,保留面板给出的 --mode、--panel、--token 和 ID 参数,不要随意把 node 改为 machine。
oo 自托管基础安装脚本:
https://node.xboardnext.com/oo/dev/install.sh
基础安装只负责节点程序,不等于完成 Trojan + Nginx。需要完整部署时,请使用上面的 easy-install.sh 示例,并补上 --domain。
基础安装的新机机器模式示例:
curl -fL https://node.xboardnext.com/oo/dev/install.sh -o /tmp/oo-install.sh && sudo bash /tmp/oo-install.sh install \
--mode machine \
--panel 'https://panel.example.com' \
--token 'MACHINE_TOKEN' \
--machine-id MACHINE_ID不要同时执行基础安装和完整安装来“补装”。已有安装请使用更新流程。
快捷菜单 · 输入 oo
已安装 oo 菜单入口后,执行:
sudo oo1 新增 / 修改实例;2 更新程序;3 查看状态;4 启动;5 停止;6 重启;7 查看日志;8 更新网站;9 卸载;10 节点服务管理;11 查看版本;12 退出;13 回收站。
注意:选项 1 不是可靠的“替换旧绑定”操作。更换面板或模式时,先按下一节备份并检查现有实例。选项 8 会改写网站文件,不是日常更新所必需。
如果提示 oo 命令不存在,先检查现有部署路径,不要为了补菜单重新安装:
systemctl show oo.service -p ExecStart -p WorkingDirectory
command -v oo
command -v ooctl更换面板地址 / Token / 接入模式
先确认新面板的协议、节点监听端口、证书域名与现有配置兼容。新机器 ID 和新 Token 应从新面板取得,不能沿用旧节点 ID。
先备份,再编辑服务实际加载的配置。下面的备份命令适用于 /etc/oo;如果 ExecStart 显示其他目录,请按实际路径处理。
systemctl show oo.service -p ExecStart -p WorkingDirectory
sudo sh -c 'umask 077; tar -czf /root/oo-before-panel-change-$(date +%Y%m%d-%H%M%S).tgz /etc/oo /etc/nginx /etc/systemd/system/oo.service'
sudoedit /etc/oo/config.yml
sudoedit /etc/oo/credentials.env只更换面板域名:修改目标实例的 panel.url。Token 保存在 credentials.env,修改 config.yml 中 token_env 对应的变量,不要直接把 Token 写入公开教程、截图或日志。
切换 node / machine:这是替换实例,不是只改一个 ID。节点模式使用 panel.node_id、panel.node_type、panel.token_env;机器模式使用 machine.machine_id、machine.token_env。只保留需要的绑定,保留证书、Nginx 回落、续期端口等已有设置。不要把两套模式合并到同一个实例。
配置含多个实例时,不得让两个实例共用 health_port 或监听端口。不要通过再次运行 easy-install.sh 来替换旧绑定;它可能合并旧配置,导致重复实例。
确认配置正确后重启并检查。如果启动失败,恢复备份中的原配置与凭据后重启,不要连续反复重装。
sudo nginx -t
sudo systemctl restart oo.service
sudo systemctl status oo.service --no-pager
sudo journalctl -u oo.service -n 60 --no-pager常用命令
查看状态与当前配置位置:
sudo systemctl status oo.service nginx --no-pager
systemctl show oo.service -p ExecStart -p WorkingDirectory启动、停止、重启节点程序(按需执行其中一条):
sudo systemctl start oo.service停止:
sudo systemctl stop oo.service重启:
sudo systemctl restart oo.service实时日志,按 Ctrl+C 退出:
sudo journalctl -u oo.service -f -n 100检查 Nginx 和本机健康接口(仅适用于启用默认健康端口 65530):
sudo nginx -t
curl -fsS http://127.0.0.1:65530/healthz更新程序
先备份,再在 oo 菜单选择 2。更新会重启节点服务,连接可能短暂中断。不要用全新安装命令代替更新。
从 v1.0.15 起,服务名统一为 oo.service,节点程序为 oo-node,管理工具为 ooctl,快捷命令为 oo。下载文件为 oo-node-linux-amd64 / oo-node-linux-arm64 和 ooctl-linux-amd64 / ooctl-linux-arm64;不要再使用旧二进制文件名覆盖新版程序。
sudo oo upgrade首次迁移旧版服务命名,请下载新版安装脚本执行 upgrade。升级会备份旧服务,验证 oo.service 正常后归档旧程序;失败则回滚。自定义服务或重复安装不会强行迁移。
curl -fL https://node.xboardnext.com/oo/dev/install.sh -o /tmp/oo-install.sh && sudo bash /tmp/oo-install.sh upgrade完成后统一使用 sudo oo restart 或 sudo systemctl restart oo.service;实时日志使用 sudo oo logs。
卸载程序
卸载会停止节点转发。默认保留配置;不要加入 --purge,除非明确需要删除配置。Nginx 与证书应单独确认,不要一并清理。
sudo oo uninstall没有 oo 菜单时,仅适用于确认当前部署位于 /etc/oo 的情况:
sudo bash /etc/oo/install.sh uninstall旧部署请先确认实际配置位置,不要直接删除配置目录。新版管理工具保留旧路径兼容识别。
常见报错
health_port ... used by both:两个实例重复占用健康端口。先确认是否残留旧绑定,不是证书故障。
machine nodes status 401/403:核对面板是否支持机器模式,以及机器 ID / Token 是否属于该面板;不要因此盲目更换域名或证书。
等待证书超时:先查看节点启动日志。如果服务因配置冲突未启动,先修配置;服务启动正常后再检查 DNS、80/443、域名与 ACME 日志。
Nginx 正常不代表 Trojan 客户端一定可用:还需验证节点用户同步、订阅参数和真实客户端连接。
下载与源码
完整安装脚本:
https://node.xboardnext.com/oo/dev/easy-install.sh
基础安装与菜单脚本:
https://node.xboardnext.com/oo/dev/install.sh
Linux amd64 节点程序:
https://node.xboardnext.com/oo/releases/latest/download/oo-node-linux-amd64
Linux arm64 节点程序:
https://node.xboardnext.com/oo/releases/latest/download/oo-node-linux-arm64
Linux amd64 管理工具:
https://node.xboardnext.com/oo/releases/latest/download/ooctl-linux-amd64
Linux arm64 管理工具:
https://node.xboardnext.com/oo/releases/latest/download/ooctl-linux-arm64
源码与原有文档目录:
https://node.xboardnext.com/oo/dev/source/
v1.0.6:回收站与已删除实例
主菜单 10 显示已删除实例;13 进入回收站,输入编号恢复;12 仍为退出。删除整套实例后,运行绑定和默认实例目录移入回收站,保留面板记录。恢复前检查端口、面板连接和证书;过期自动证书尝试续期,失败不启动。手动证书过期需更换。
旧版已删除实例需显式从备份导入,不会因更新自动恢复。删除和恢复会重启共享进程,其他实例可能短暂重连。
curl -fL https://node.xboardnext.com/oo/dev/install.sh -o /tmp/oo-install.sh && sudo bash /tmp/oo-install.sh upgrade --version v1.0.16-dev.20260925https://node.xboardnext.com/oo/releases/download/v1.0.6-dev.20260913/recycle-bin.md
https://node.xboardnext.com/oo/releases/download/v1.0.6-dev.20260913/SHA256SUMS
v1.0.7:多端口 SNI 与 Nginx 目录修复
支持不同域名共用 443 或非 443 端口;新增 --listen-port,默认 443。不同端口组独立配置,内部服务端口需分别配置。
更新节点程序(会短暂重启):
curl -fL https://node.xboardnext.com/oo/dev/install.sh -o /tmp/oo-install.sh && sudo bash /tmp/oo-install.sh upgrade --version v1.0.16-dev.20260925Nginx 目录误删或仅剩 stream 残缺配置时,单独修复基础配置(Debian/Ubuntu;保留 oo 配置与证书,软件包操作可能启停 Nginx):
curl -fL https://node.xboardnext.com/oo/dev/easy-install.sh -o /tmp/oo-easy-install.sh && sudo bash /tmp/oo-easy-install.sh --mode machine --repair-nginx基础修复不等于恢复已删除的 SNI 规则。升级后使用 --resume-nginx、--instance、--domain、--trojan-upstream、--acme-http-port 按实例重建;非 443 加 --listen-port。不会强制重新申请仍有效的证书。
[多套服务与修复说明](https://node.xboardnext.com/oo/releases/download/v1.0.7-dev.20260918/nginx-multiple-trojan.md)
[版本说明](https://node.xboardnext.com/oo/releases/download/v1.0.7-dev.20260918/release-v1.0.7-dev.20260918.md)
v1.0.8:同一机器 ID 多 Trojan 节点
同一机器 ID 绑定多个 Trojan 节点:每个节点使用不同域名和内部端口,Nginx 按域名共用外部 443(亦支持非 443)。域名和证书配置取自各面板节点,不再统一覆盖整个实例。
升级配套程序与菜单(会短暂重启):
curl -fL https://node.xboardnext.com/oo/dev/install.sh -o /tmp/oo-install.sh && sudo bash /tmp/oo-install.sh upgrade --version v1.0.16-dev.20260925新增节点后输入 oo → 10 → 选择机器 → 6 同步域名分流;预览确认后才写入,并短暂重启共享节点进程。不用重装机器实例。同步不是后台自动执行。菜单显示节点域名、外部端口及内部端口。证书签发异步进行,需查看日志确认完成。
https://node.xboardnext.com/oo/releases/download/v1.0.8-dev.20260918/machine-trojan-domains.md
https://node.xboardnext.com/oo/releases/download/v1.0.8-dev.20260918/release-v1.0.8-dev.20260918.md
v1.0.9:节点管理菜单优化
菜单 10 查看、停用、恢复后留在当前机器子菜单。选返回先回机器列表,再选 0 回主菜单。端口重复时不再误显示为运行中。本机停用保留面板数据,可恢复。彻底删除面板记录尚未接入管理员权限,选项标为暂不可用,不会执行删除。
升级配套程序与菜单(会短暂重启共享节点进程):
curl -fL https://node.xboardnext.com/oo/dev/install.sh -o /tmp/oo-install.sh && sudo bash /tmp/oo-install.sh upgrade --version v1.0.16-dev.20260925管理菜单版本:2026.09.18.3。
https://node.xboardnext.com/oo/releases/download/v1.0.9-dev.20260918/release-v1.0.9-dev.20260918.md
子菜单删除、恢复针对选中的子节点 ID,保留机器实例及其他子节点;子菜单不提供移除整个实例的操作。
v1.0.10:删除本机子节点配置
菜单 10 → 选择机器 → 3 删除指定子节点服务 → 选择子节点编号 → 2 删除本机子节点配置。已停用的子节点也可删除。仅清理本机子节点运行目录,保留私有备份、本地删除标记、面板记录、机器实例及其他节点。共享 Nginx 配置不清除。恢复时从面板重新下发配置。需同时更新节点程序与菜单,不能只更新脚本。
升级命令(会短暂重启共享节点进程):
curl -fL https://node.xboardnext.com/oo/dev/install.sh -o /tmp/oo-install.sh && sudo bash /tmp/oo-install.sh upgrade --version v1.0.16-dev.20260925管理菜单版本:2026.09.18.4。
v1.0.11:选择并删除整套机器配置
输入 oo → 10 → 选择机器配置编号 → 7 删除当前机器配置及全部子节点 → 输入 YES。仅将所选机器配置及其全部本机子节点目录移入回收站,保留面板记录和其他机器配置;共享 Nginx 配置不作清除。主菜单 13 可恢复。新增共享凭据和目录引用保护。删除及升级会重启共享节点进程,其他实例可能短暂重连。
升级完整程序与菜单:
curl -fL https://node.xboardnext.com/oo/dev/install.sh -o /tmp/oo-install.sh && sudo bash /tmp/oo-install.sh upgrade --version v1.0.16-dev.20260925管理菜单版本:2026.09.18.5。
v1.0.13:插件自动识别中转节点
面板安装并启用 OoRelayMetadata 1.0.0,正确设置中转父节点。新版 oo 根据 parent_id 跳过中转入口的本机监听,不删除面板记录;初次启动、定时刷新和 WebSocket 更新均支持。插件接口 404 时兼容旧接口,其他错误明确报错。原有手动停用策略保留。
插件下载:[OoRelayMetadata 1.0.0](https://node.xboardnext.com/oo/releases/download/v1.0.13-dev.20260920/OoRelayMetadata-1.0.0.zip)
升级节点(会重启共享节点进程,连接短暂中断):
curl -fL https://node.xboardnext.com/oo/dev/install.sh -o /tmp/oo-install.sh && sudo bash /tmp/oo-install.sh upgrade --version v1.0.16-dev.20260925升级后运行 `oo version` 和 `oo nodes list`。插件生效后,新机器安装无需手填中转 ID;未安装插件仍可使用 --relay-nodes。