You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have read all the comments in the issue template and ensured that this issue meets the requirements.
I confirm that I have read the documentation, understand the meaning of all configuration items used below, and did not pile up random or unnecessary options.
I provide the full minimal config shape, startup log, certificate generation details, and packet capture behavior, not only selectively truncated fragments.
I searched existing issues and did not find an exact duplicate for this case.
The problem is reproducible on the latest Release I tested.
Description
I am testing Hysteria v2 inbound on Xray Core 26.3.27.
The inbound starts successfully, binds to the configured UDP port, and client UDP packets clearly reach the server host. However, during connection attempts, the server appears to send no UDP response packets at all, and the client always ends with timeout.
Observed behavior:
Xray starts successfully
UDP packets from the client reach the server
Xray does not appear to send any UDP packets back to the client
client times out
server logs contain startup information only, but no useful per-connection Hysteria/QUIC error
This does not look like a basic firewall/routing problem, because incoming UDP packets are visible on the server interface.
It also does not look like a startup/config parse failure, because Xray starts normally and binds successfully.
In earlier config variants, I also saw:
[Warning] infra/conf: congestion & up & down & udphop move to finalmask/quicParams
So I removed deprecated up/down/udphop fields and reduced the config to a more minimal shape. The behavior remained the same.
So the key symptom is:
Hysteria inbound starts successfully and receives client UDP packets, but sends no visible response packets during QUIC handshake, resulting in client timeout and no useful server-side logs.
Reproduction Method
Start Xray with the Hysteria inbound config shown below
Confirm startup log shows successful bind on UDP port
From a LAN client, connect using a Hysteria2 URL with alpn=h3 and insecure=1
Run tcpdump on the server for the Hysteria UDP port
Observe incoming UDP packets from client
Observe no response UDP packets from server
Client always times out
Client config
Minimal obfuscated client URL used for LAN testing:
subject=CN = xray, O = Local Xray, C = US
issuer=CN = xray, O = Local Xray, C = US
For client-side testing, certificate validation was explicitly relaxed using insecure=1, so this setup is only intended for handshake/connectivity testing, not for production use.
Client log
The client side only shows timeout. No useful additional error beyond connection timeout.
Server log
Xray 26.3.27 (Xray, Penetrates Everything.) ...
[Info] infra/conf/serial: Reading config: &{Name:/tmp/...json Format:json}
[Debug] app/log: Logger started
[Debug] app/proxyman/inbound: creating stream worker on 0.0.0.0:PORT
[Warning] core: Xray 26.3.27 started
In an earlier config variant, I also saw:
[Warning] infra/conf: congestion & up & down & udphop move to finalmask/quicParams
After removing those deprecated fields, startup still succeeds and the timeout behavior remains unchanged.
tcpdump evidence
Command used:
tcpdump -ni any "host CLIENT_LAN_IP and udp port PORT"
Observed packet capture:
17:08:27.xxx In IP CLIENT_LAN_IP.53XXX > SERVER_LAN_IP.PORT: UDP, length 1280
17:08:27.xxx In IP CLIENT_LAN_IP.53XXX > SERVER_LAN_IP.PORT: UDP, length 1280
17:08:27.xxx In IP CLIENT_LAN_IP.53XXX > SERVER_LAN_IP.PORT: UDP, length 1280
17:08:28.xxx In IP CLIENT_LAN_IP.53XXX > SERVER_LAN_IP.PORT: UDP, length 1280
17:08:29.xxx In IP CLIENT_LAN_IP.53XXX > SERVER_LAN_IP.PORT: UDP, length 1280
...
What is missing is any reverse traffic such as:
SERVER_LAN_IP.PORT > CLIENT_LAN_IP.53XXX
So the server clearly receives client UDP packets, but appears not to send any response packets at all during handshake.
Related issues / similar reports checked
I searched existing Xray-core issues and found some related Hysteria/Hysteria2 reports, but none appears to exactly match this case.
The Hysteria2 client-side clientManager bug #5911 - The Hysteria2 client-side clientManager bug The Hysteria2 client-side clientManager bug #5911
This appears to be a client-side auth caching bug when multiple Hysteria2 outbounds share the same destination. It does not seem to match this case, because here I am testing a server-side inbound and the failure happens already at the handshake stage.
hysteria2 obfs (Salamander) #5712 - hysteria2 obfs (Salamander) hysteria2 obfs (Salamander) #5712
This one also involves timeout behavior with packets reaching the server, but it is specifically about Salamander obfuscation compatibility. My test case does not use Salamander or other obfuscation masks.
Integrity requirements
Description
I am testing Hysteria v2 inbound on Xray Core 26.3.27.
The inbound starts successfully, binds to the configured UDP port, and client UDP packets clearly reach the server host. However, during connection attempts, the server appears to send no UDP response packets at all, and the client always ends with timeout.
Observed behavior:
This does not look like a basic firewall/routing problem, because incoming UDP packets are visible on the server interface.
It also does not look like a startup/config parse failure, because Xray starts normally and binds successfully.
In earlier config variants, I also saw:
So I removed deprecated
up/down/udphopfields and reduced the config to a more minimal shape. The behavior remained the same.So the key symptom is:
Reproduction Method
alpn=h3andinsecure=1Client config
Minimal obfuscated client URL used for LAN testing:
Server config
{ "log": { "loglevel": "debug" }, "inbounds": [ { "tag": "hy2-in", "listen": "0.0.0.0", "port": PORT, "protocol": "hysteria", "settings": { "version": 2, "clients": [ { "auth": "********-****-****-****-************" } ] }, "streamSettings": { "network": "hysteria", "security": "tls", "tlsSettings": { "alpn": [ "h3" ], "minVersion": "1.3", "maxVersion": "1.3", "certificates": [ { "certificateFile": "/etc/xray/certs/server-cert.crt", "keyFile": "/etc/xray/certs/server-key.pem" } ] }, "hysteriaSettings": { "version": 2, "auth": "********-****-****-****-************", "udpIdleTimeout": 60 } } } ], "outbounds": [ { "tag": "direct", "protocol": "freedom" } ], "routing": { "rules": [ { "type": "field", "inboundTag": [ "hy2-in" ], "outboundTag": "direct" } ] } }Certificate generation
For testing, I used a self-signed certificate and key generated locally on the router.
The files referenced in the config:
were generated with:
Verification command:
Result:
For client-side testing, certificate validation was explicitly relaxed using
insecure=1, so this setup is only intended for handshake/connectivity testing, not for production use.Client log
The client side only shows timeout. No useful additional error beyond connection timeout.
Server log
In an earlier config variant, I also saw:
After removing those deprecated fields, startup still succeeds and the timeout behavior remains unchanged.
tcpdump evidence
Command used:
tcpdump -ni any "host CLIENT_LAN_IP and udp port PORT"Observed packet capture:
What is missing is any reverse traffic such as:
So the server clearly receives client UDP packets, but appears not to send any response packets at all during handshake.
Related issues / similar reports checked
I searched existing Xray-core issues and found some related Hysteria/Hysteria2 reports, but none appears to exactly match this case.
The Hysteria2 client-side
clientManagerbug #5911 - The Hysteria2 client-sideclientManagerbugThe Hysteria2 client-side
clientManagerbug #5911This appears to be a client-side auth caching bug when multiple Hysteria2 outbounds share the same destination. It does not seem to match this case, because here I am testing a server-side inbound and the failure happens already at the handshake stage.
hysteria2 obfs (Salamander) #5712 - hysteria2 obfs (Salamander)
hysteria2 obfs (Salamander) #5712
This one also involves timeout behavior with packets reaching the server, but it is specifically about Salamander obfuscation compatibility. My test case does not use Salamander or other obfuscation masks.
[Bug] Hysteria2 出站使用自签证书配合 pinnedPeerCertSha256 连接失败 #5655 - self-signed cert / pinnedPeerCertSha256 related issue
[Bug] Hysteria2 出站使用自签证书配合 pinnedPeerCertSha256 连接失败 #5655
This is also not an exact match. That case is more explicitly TLS/certificate related, while in my case the key symptom is that the server receives UDP packets but does not appear to send any response packets at all during handshake.
Proxy: Add Hysteria 2 inbound & transport (supports listening port range, Salamander finalmask) #5679 - Add Hysteria 2 inbound & transport
Proxy: Add Hysteria 2 inbound & transport (supports listening port range, Salamander finalmask) #5679
I used this as an important reference for config shape. My test config is aligned with that server-side format:
protocol: "hysteria"settings.version = 2streamSettings.network = "hysteria"streamSettings.hysteriaSettings.version = 2security = "tls"alpn = ["h3"]So while there are related Hysteria/Hysteria2 issues, I could not find an existing report that exactly matches this specific symptom set:
Expected behavior
One of the following should happen:
Actual behavior
Notes
What I believe is already ruled out:
up/down/udphop, because removing them does not change the behaviorprotocol: "hysteria2", because current Xray server-side config clearly expectsprotocol: "hysteria"withversion: 2I would like to know whether: