Xray无法启动,错误码23 解决方法+思路

xray启动状态错误

[root@iZj6c3w6x7zccrjtzelfr8Z ~]# systemctl status xray
● xray.service - Xray Service
Loaded: loaded (/etc/systemd/system/xray.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/xray.service.d
└─10-donot_touch_single_conf.conf
Active: failed (Result: exit-code) since 二 2024-08-20 13:48:30 CST; 17s ago
Docs: https://github.com/xtls
Process: 7027 ExecStart=/usr/local/bin/xray run -config /usr/local/etc/xray/config.json (code=exited, status=23)
Main PID: 7027 (code=exited, status=23)

排错思路

使用journalctl -u xray.service -b --no-pager -n 50查看xray日志,也显示错误码23
错误码报错 23 不出意外为配置文件存在问题
进入配置文件路径下 /usr/local/etc/xray ,将配置文件下载进本机编译软件(例如vscode)方便检查
下载好的配置文件发现有括号路径错误,修改后重新上传进服务器配置文件路径 —— 在此排除配置文件格式问题

需要改动的内容为:

  • “access”、"error"日志路径
  • id ——改为 xray uuid 生成的 uuid
  • 邮箱(可选)

上传回服务器后启动依然报错23,已确定不是配置文件json格式错误,那么有可能是路径找不到,使用 cat /var/log/xray/error.log 查看错误运行日志看看是否为路径问题
查看后发现错误日志为空,怀疑是配置文件路径有误
根据配置文件中的error.log路径,使用ssh路径可视化工具或ls/ll进入该路径下查看,发现可以找到日志文件 —— 在此排除配置文件路径问题
使用 /usr/local/bin/xray -test -config /usr/local/etc/xray/config.json 整体检查一遍配置文件

[root@iZj6c3w6x7zccrjtzelfr8Z xray]# /usr/local/bin/xray -test -config /usr/local/etc/xray/config.json
Xray 1.8.23 (Xray, Penetrates Everything.) 4c82ef8 (go1.22.5 linux/amd64)
A unified platform for anti-censorship.
2024/08/20 21:54:03 [Info] infra/conf/serial: Reading config: /usr/local/etc/xray/config.json
Configuration OK.
输出以上内容,说明配置文件没有问题

既然配置文件没问题,也搜过了各所需文件路径确实正确,那多半是因为权限问题导致配置文件中的证书等所需文件无法访问。
查看证书、日志权限后输出如下:

[root@iZj6c3w6x7zccrjtzelfr8Z xray]# ll /var/log/xray/
总用量 0
-rw--w--w- 1 nobody nobody 0 818 16:11 access.log
-rw--w--w- 1 nobody nobody 0 818 16:11 error.log
[root@iZj6c3w6x7zccrjtzelfr8Z xray]# ll /root/xray_cert/
总用量 16
-rwxr-xr-x 1 root root 317 819 13:37 xray-cert-renew.sh
-rw-r--r-- 1 root root 274 819 14:12 xray-cmd.txt
-rw-r--r-- 1 root root 2832 819 13:26 xray.crt
-rw-r--r-- 1 root root 227 819 13:26 xray.key

得出日志文件只对root用户有读权限
xray运行用户由service文件决定,为确保能享有最高权限,将运行用户改为root用户(按需修改)

#将第一行User=xxx注释掉,会默认使用root用户启动
[Service]
#User=nobody
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/local/bin/xray run -config /usr/local/etc/xray/config.json
Restart=on-failure
RestartPreventExitStatus=23
LimitNPROC=10000
LimitNOFILE=1000000

修改后依然报错23
日志文件目录的上一级查看发现 log 目录下的 xray 用户组为原运行用户组,且对其他用户无任何权限(目录为:var/log/xray/xxx.log)
使用 chomd +ar 对xray文件夹添加所有用户的读权限
再次运行 config 文件,可以成功启动xray
在这里插入图片描述

省流

需检查的部分为以下几点:

  1. 配置文件 json 格式是否正确:括号问题+是否有注释( json配置文件不允许注释 )
  2. 所需文件路径是否正确
  3. 所需文件运行用户是否有读/写权限
  4. xray运行用户是否为有所需权限的用户

走投无路的方法

简化 xray 的 json 文件配置,使用最基本的配置运行,再慢慢添加回原本期望配置,排查是哪个配置块出了问题
简化配置:

{
    "log": {
        "loglevel": "warning"
    },
    "inbounds": [
        {
            "port": 443,
            "protocol": "vless",
            "settings": {
                "clients": [
                    {
                        "id": ""
                    }
                ],
                "decryption": "none"
            },
            "streamSettings": {
                "network": "tcp",
                "security": "tls",
                "tlsSettings": {
                    "certificates": [
                        {
                            "certificateFile": "/root/xray_cert/xray.crt",
                            "keyFile": "/root/xray_cert/xray.key"
                        }
                    ]
                }
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "freedom"
        }
    ]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值