{
"log": {
"loglevel": "info"
},
"routing": {
"rules": [
{
"inboundTag": [
"REMNAWAVE_API_INBOUND"
],
"outboundTag": "REMNAWAVE_API"
}
]
},
"inbounds": [
{
"tag": "REMNAWAVE_API_INBOUND",
"port": 61000,
"listen": "127.0.0.1",
"protocol": "dokodemo-door",
"settings": {
"address": "127.0.0.1"
},
"streamSettings": {
"security": "tls",
"tlsSettings": {
"alpn": [
"h2"
],
"serverName": "internal.remnawave.local",
"disableSystemRoot": true,
"rejectUnknownSni": true,
"certificates": [
{
"certificate": [
"-----BEGIN CERTIFICATE-----",
"...omitted...",
"-----END CERTIFICATE-----"
],
"key": [
"-----BEGIN PRIVATE KEY-----",
"...omitted...",
"-----END PRIVATE KEY-----"
]
},
{
"usage": "verify",
"certificate": [
"-----BEGIN CERTIFICATE-----",
"...omitted...",
"-----END CERTIFICATE-----"
]
}
]
}
}
},
{
"tag": "Simple SS22",
"port": 1237,
"protocol": "shadowsocks",
"settings": {
"method": "2022-blake3-aes-256-gcm",
"clients": [],
"network": "tcp,udp",
"password": "UZP5LS5McIBplREbAnHWBu2KVY+8xsdV6zerIV5IqdU="
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
}
],
"outbounds": [
{
"tag": "DIRECT",
"protocol": "freedom"
},
{
"tag": "BLOCK",
"protocol": "blackhole"
},
{
"tag": "RW_TB_OUTBOUND_BLOCK",
"protocol": "blackhole"
}
],
"stats": {},
"api": {
"services": [
"HandlerService",
"StatsService",
"RoutingService"
],
"tag": "REMNAWAVE_API"
},
"policy": {
"levels": {
"0": {
"statsUserUplink": true,
"statsUserDownlink": true,
"statsUserOnline": true
}
},
"system": {
"statsInboundDownlink": true,
"statsInboundUplink": true,
"statsOutboundDownlink": true,
"statsOutboundUplink": true
}
}
}
</details>
Integrity requirements
Description
If the initial Xray configuration (used at startup) contains an empty
clientsarray for a Shadowsocks 2022 inbound (2022-blake3-aes-256-gcm) — any attempt to add a user to that inbound via the gRPC API will result in the following error:The inbound can be listed via gRPC and confirmed to be present — however, adding users to it programmatically is not possible.
{ "$type": "xray.app.proxyman.command.ListInboundsResponse", "inbounds": [ { "$type": "xray.core.InboundHandlerConfig", "tag": "REMNAWAVE_API_INBOUND" }, { "$type": "xray.core.InboundHandlerConfig", "tag": "Simple SS22" } ] }Reproduction Method
clientsarray intentionally empty. Don't forget to remove TLS protection from API before starting Xray.inbound. (proto:xray.proxy.shadowsocks_2022.Account)/xray.app.proxyman.command.HandlerService/AlterInbound UNKNOWN: app/proxyman/command: proxy is not a UserManager. The user will not be added to the inbound.Client config
Not related
Server config
Details
{ "log": { "loglevel": "info" }, "routing": { "rules": [ { "inboundTag": [ "REMNAWAVE_API_INBOUND" ], "outboundTag": "REMNAWAVE_API" } ] }, "inbounds": [ { "tag": "REMNAWAVE_API_INBOUND", "port": 61000, "listen": "127.0.0.1", "protocol": "dokodemo-door", "settings": { "address": "127.0.0.1" }, "streamSettings": { "security": "tls", "tlsSettings": { "alpn": [ "h2" ], "serverName": "internal.remnawave.local", "disableSystemRoot": true, "rejectUnknownSni": true, "certificates": [ { "certificate": [ "-----BEGIN CERTIFICATE-----", "...omitted...", "-----END CERTIFICATE-----" ], "key": [ "-----BEGIN PRIVATE KEY-----", "...omitted...", "-----END PRIVATE KEY-----" ] }, { "usage": "verify", "certificate": [ "-----BEGIN CERTIFICATE-----", "...omitted...", "-----END CERTIFICATE-----" ] } ] } } }, { "tag": "Simple SS22", "port": 1237, "protocol": "shadowsocks", "settings": { "method": "2022-blake3-aes-256-gcm", "clients": [], "network": "tcp,udp", "password": "UZP5LS5McIBplREbAnHWBu2KVY+8xsdV6zerIV5IqdU=" }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls", "quic" ] } } ], "outbounds": [ { "tag": "DIRECT", "protocol": "freedom" }, { "tag": "BLOCK", "protocol": "blackhole" }, { "tag": "RW_TB_OUTBOUND_BLOCK", "protocol": "blackhole" } ], "stats": {}, "api": { "services": [ "HandlerService", "StatsService", "RoutingService" ], "tag": "REMNAWAVE_API" }, "policy": { "levels": { "0": { "statsUserUplink": true, "statsUserDownlink": true, "statsUserOnline": true } }, "system": { "statsInboundDownlink": true, "statsInboundUplink": true, "statsOutboundDownlink": true, "statsOutboundUplink": true } } } </details>