Skip to content

[BUG] sing-box占用UDP 443导致Xray Reality无法使用TCP 443 #121

Description

@lidangg

问题描述

当同时使用 sing-box Hysteria2(UDP 443)和 Xray VLESS Reality(TCP 443)时,Xray安装脚本会检测到443端口已被占用,并自动将 Xray Reality 的端口修改为8443。

但是,在 Linux 系统中,TCP 443 和 UDP 443 属于不同的 socket,可以同时监听,并不存在端口冲突。

期望支持以下常见部署方式:

TCP 443 → Xray VLESS Reality

UDP 443 → sing-box Hysteria2


环境信息

  • 脚本版本:1.33
  • Xray版本:26.3.27
  • 系统:Ubuntu/Debian Linux
  • sing-box:233boy/sing-box

复现步骤

  1. 首先安装 sing-box Hysteria2,并配置监听 UDP 443。

查看端口:

ss -lunp | grep :443

输出:

udp UNCONN 0 0 *:443 : users:(("sing-box",pid=xxxx))

  1. 安装 Xray VLESS Reality。
  2. 脚本检测到443端口已被占用,并提示端口不可用。

期望行为

脚本应该区分 TCP 和 UDP 端口。

当检测 Xray Reality 所需端口时,只需要检查 TCP 443 是否被占用。

以下配置应该被允许:

TCP 443 → Xray VLESS Reality

UDP 443 → sing-box Hysteria2

因为 TCP 443 和 UDP 443 在 Linux 中是两个独立的网络监听。


当前实际行为

脚本将 UDP 443 的占用也判断为443端口冲突:

UDP 443 已被 sing-box 使用

脚本认为443不可用


当前解决方法

手动修改:

/etc/xray/conf/*.json

将:

"port": XXXX

修改为:

"port": 443

然后重启 Xray:

systemctl restart xray

修改后可以正常运行:

TCP 443 → Xray VLESS Reality

UDP 443 → sing-box Hysteria2


建议改进

建议修改端口检测逻辑:

当前逻辑可能只判断端口号是否存在:

443 已使用 → 禁止使用

建议改为区分协议:

  • 检查 TCP 443 是否被占用
  • 忽略 UDP 443 占用情况

这样可以支持:

  • Xray Reality + Hysteria2
  • Xray Reality + TUIC
  • HTTPS TCP服务 + QUIC UDP服务

等常见多协议共用443端口的部署方式。

感谢维护项目。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions