Xboard Next/ooPublic mirror

多协议节点程序 · 机器模式 / 节点模式 · 安装、迁移与日常管理

⑂ dev 自托管文件下载 ▾
oo /192 个文件 · 实际托管内容

这里展示实际托管文件,不是 Git 提交记录。点击目录浏览,点击文件进入代码详情页。

☷ README · SOCKS5 出站教程

SOCKS5 出站教程

← 返回 oo 安装教程 · 查看教程源码

单个 AnyTLS / Trojan 节点使用 SOCKS5 出站

适用版本与作用范围

适用于 oo v1.0.16-dev.20260925 及包含同项功能的后续版本。本教程使用机器模式、singbox 内核,示例节点 ID 为 237,入口为 node.example.com:11449。示例域名、IP、账号密码均需替换,不是可直接使用的线路。

客户端仍连接原来的 AnyTLS 或 Trojan 入口。只有选中的子节点把用户代理流量转交给 SOCKS5,其他子节点、面板地址、用户认证、证书和 Nginx 路由不因此改变。

客户端 → AnyTLS 节点 237 :11449 → SOCKS5 出口 → 目标网站
原 AnyTLS 节点 :11443       → 保持原出口
原 Trojan 节点 :443        → 保持原出口

范围由“机器实例目录 + 节点 ID”共同确定。两个面板即使节点 ID 相同,只要使用不同实例目录,也不会互相覆盖。

目前这是配置文件功能,没有新增“SOCKS5 设置”菜单。不要把出站配置写到整个实例的公共 kernel.custom_config 中,否则该实例下的其他节点也可能继承它。

第一步:升级并确认版本

旧版本不认识单节点覆盖文件,可能继续直连。先升级,再配置;不要降级后继续启用带专用出口的节点。

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
sudo oo version

首次升级旧命名安装,请使用上面的完整安装器升级命令,不要仅替换核心或使用旧版菜单里的下载地址。升级器会检查旧服务、备份并迁移到 oo.service;发现两套安装或自定义服务时会停止,需先核对。

升级会重启共享节点进程,现有连接会短暂重连。配置、凭据、证书、单节点覆盖文件和既有共享 Nginx 配置应保留;先备份并安排合适的更新时间。

第二步:在面板创建独立入口

新节点绑定后可能立即按原出口启动。完成停用、配置、恢复和出口 IP 验证之前,不要分发或使用这个新节点。

在现有机器下新增 AnyTLS 节点,选择该机器 ID;设置正确的 TLS 域名,并使用尚未占用的服务端口。例如已有 AnyTLS 使用 11443,新节点就使用 11449。直接监听时,连接端口与服务端口均填写 11449,同时放行服务器防火墙和云安全组的 TCP 11449。

同一机器实例、相同域名、自动 ACME 模式可以复用已有有效证书,不需要为了新增端口另申请证书。不同机器实例、手工证书和不同域名不保证共享。证书正常不代表代理流量已可用,仍要完成后面的认证访问测试。

新增独立 AnyTLS 端口不需要让 Nginx 再占用这个端口,也不要停用其他网站使用的 Nginx。节点入口协议仍是 AnyTLS,不要为了配置 SOCKS5 出口把入口协议改成 socks。

第三步:找到正确的机器实例和节点

sudo oo list
sudo oo nodes list

记下目标节点对应的完整 INSTANCE 值。节点 ID 不是机器 ID,也不是监听端口。

同时在节点启动日志中确认 effective_kernel=singbox;若显示 xray,不能直接使用本页 JSON。尤其是曾经手动指定 Xray 的 Trojan 实例,不要仅根据协议名称判断内核。

在 /etc/oo/config.yml 中找到该实例已有的 kernel.config_dir。默认形如 /etc/oo/instances/INSTANCE_ID,但以实际配置为准。不要覆盖或公开这个主配置文件,它可能引用敏感凭据。

单节点覆盖文件的固定位置是:

<该实例的 kernel.config_dir>/node-237/kernel.override.json

例如默认目录结构下:

/etc/oo/instances/INSTANCE_ID/node-237/kernel.override.json

下面命令中的 INSTANCE_ID 必须替换为实际完整实例名称;节点 ID 和端口也要按自己的部署修改。先以 root 权限备份目标实例目录,备份保存在网站目录以外,不要上传到公开托管。

第四步:只停用待配置的子节点

sudo oo nodes delete --instance INSTANCE_ID --node-id 237 --yes
sudo ss -lntp 'sport = :11449'

这里的 delete 表示仅本机停用,保留面板数据和本地配置;不是 purge,不会删除实例。等待节点停止,确认 11449 已无监听后再修改。如果仍有监听,应核对进程与端口,不要继续覆盖配置。不要使用 --all。

第五步:填写 SOCKS5 出口

确认上述实际节点目录存在,使用编辑器创建 kernel.override.json。例如默认目录下可使用:

sudo nano /etc/oo/instances/INSTANCE_ID/node-237/kernel.override.json

粘贴以下完整 JSON,并替换 SOCKS5 地址、端口、账号和密码。192.0.2.10 是文档示例 IP,不能作为真实出口。

{
  "outbounds": [
    {
      "type": "socks",
      "tag": "node-237-socks",
      "server": "192.0.2.10",
      "server_port": 1080,
      "version": "5",
      "username": "CHANGE_ME_USER",
      "password": "CHANGE_ME_PASSWORD"
    }
  ],
  "route": {
    "final": "node-237-socks"
  }
}

无需认证的 SOCKS5 可以删除 username 与 password 两行,注意 JSON 最后一项不能保留多余逗号。含双引号或反斜杠的密码要使用正确的 JSON 转义。不要把真实密码放进命令参数、公开教程或截图。

限制文件权限并检查 JSON 语法:

sudo chmod 600 /etc/oo/instances/INSTANCE_ID/node-237/kernel.override.json
sudo python3 -m json.tool /etc/oo/instances/INSTANCE_ID/node-237/kernel.override.json > /dev/null

python3 检查只验证 JSON 语法,不验证出口是否在线,也不替代内核配置检查。该文件不能是符号链接。实例若已有公共 kernel.custom_config,新文件会被拒绝而不是静默覆盖;需先整理原有定制配置。

这个文件使用 singbox 原生格式,不能直接用于 Xray。不要修改运行时自动生成的 config.json,也不要在此文件中添加入站或证书设置。

第六步:恢复选中的节点

sudo oo nodes restore --instance INSTANCE_ID --node-id 237 --yes
sudo ss -lntp 'sport = :11449'
sudo journalctl -u oo.service -n 80 --no-pager

管理进程会读取覆盖文件并重新启动该子节点。不需要为这一步重启所有实例;其他子节点保持运行。仅保存文件不会可靠地让一个已经运行的节点重新加载,所以每次修改都应先停用该节点、确认停止、再编辑和恢复。

若使用 sudo systemctl restart oo.service,则会重启共享进程,所有 oo 实例会短暂重连。这不是日常修改单节点出口的首选方式。

第七步:验证实际出口,而不只看端口

用支持对应协议的客户端连接新节点。客户端填写的是 AnyTLS 的域名、端口和面板下发的用户密码,不是 SOCKS5 的账号密码。

在确认浏览器流量经过该节点的情况下访问出口 IP 查询网站,并访问实际 HTTPS 网站;出口 IP 应与 SOCKS5 服务商提供的出口一致。再切回原 AnyTLS、Trojan 节点,确认它们仍使用原出口。

https://api.ipify.org

服务器直接运行 curl 查看的是服务器自己的出口,不能据此判断子节点是否走了 SOCKS5。服务器直连 Google 成功也不代表客户端 → AnyTLS → SOCKS5 的完整链路成功。

面板的“机器在线”和“节点在线”是不同状态。机器在线不代表所有子节点都启动成功;新节点还需成功拉取用户、上报状态。访问测试后等待一次上报周期再刷新面板,不要仅凭红、黄、绿圆点判断线路是否可用。

分流、DNS 与 UDP 注意事项

route.final 只指定未被其他规则匹配的默认出口。已有面板直连规则或其他出站规则仍然优先。需要该节点的公网代理流量全部走 SOCKS5 时,必须先检查并清理不符合目标的分流规则;不要添加位于私网保护之前的粗暴全匹配规则。

此配置不改变服务器的面板 API、证书申请、其他进程的系统流量,也不保证全部 DNS 查询通过 SOCKS5。普通 SOCKS5 链路本身不提供 TLS 加密,请使用可信的出口服务和网络。

TCP 可用不代表 UDP 可用。UDP 还需要 SOCKS5 服务端支持 UDP 转发并开放相应网络;不要把开关或 UDP over TCP 当成上游自动具备的能力。本教程的 HTTPS 验证仅证明 TCP 链路。

常见问题

端口冲突:新增节点不能使用已有服务的监听端口。面板改好端口后,如节点之前已经启动失败,需要仅停用并恢复该子节点;不应删除其他服务来腾出端口。

JSON 或覆盖配置被拒绝:查看 oo 日志,检查文件位置、权限、JSON 格式、是否误用了 Xray 字段、是否与公共 custom_config 冲突。选中节点应停止,不要为了“变绿”移除专用出口后继续直连。

SOCKS5 连接失败或认证失败:核对地址、端口、账号密码、出口白名单与上游状态。先确认节点服务器能访问上游,再测试完整代理链路。

网站能访问但出口仍是服务器 IP:检查是否升级到支持本功能的版本、文件是否放在正确实例的正确子节点目录、是否完成子节点重启、客户端是否真的使用该节点,以及有无优先匹配的直连规则。

证书错误:检查域名解析、证书有效期、TLS/SNI 和现有续期入口。修改 SOCKS5 出站不需要删除证书或重装 Nginx。

文件在运行期间被移走或破坏:本功能不是持续的防篡改或强制断网保护。已有原生配置加载器在后续重建时可能跳过丢失文件;务必先停用子节点,再编辑或移动文件。备份恢复、回收站恢复后也需重新验证出口。

恢复原出口(仅在确实希望取消 SOCKS5 时)

先停用目标子节点并确认端口停止。把该节点的 kernel.override.json 移到实例外的私有备份目录,然后恢复这个子节点。不要删除整个 node-237 目录、证书或父实例,也不要直接删除 SOCKS5 出站却保留指向它的 route.final。

移走整个单节点覆盖文件后,该节点回到继承的原配置;只有原配置没有其他出站或分流定制时,才等于直连。恢复后重新核对出口 IP,其他节点不应改变。

若配置失败,请让该节点保持停用。不要通过降级到不支持覆盖文件的旧核心来排错,否则该节点可能意外恢复直连。

返回安装与升级指南

https://node.xboardnext.com/oo/