Hysteria: Fix Unix masquerade socket path - #6705
Open
XXcipherX wants to merge 1 commit into
Open
Conversation
LjhAUMEM
approved these changes
Sep 1, 2026
Collaborator
|
这里确实同步错了,感谢修复
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The current Xray code handles Unix-socket targets in the following order:
The original parsed URL is overwritten before its path is saved:
The replacement URL has an empty
Path, so the next assignment always produces:Consequently, the custom transport effectively attempts:
On Linux, this fails with an error similar to:
The Hysteria masquerade handler then returns
502 Bad Gateway, while Xray logs:This affects all supported Unix-socket target formats, not just one particular URL form, because the parsed socket path is discarded in every case.
Upstream behavior
In the upstream Hysteria implementation, the socket path is saved before constructing the synthetic HTTP target:
Only after that does it return the target used by
httputil.ReverseProxy:The custom transport therefore captures the original socket path:
The incorrect ordering was introduced while adapting this logic in #6565 it is not caused by the upstream Hysteria implementation.
Fix
Save
u.Pathbefore replacinguwith the synthetichttp://localhosttarget:This preserves the original Unix socket address while leaving HTTP and HTTPS masquerade behavior unchanged.