apernet / hysteria

Hysteria is a powerful, lightning fast and censorship resistant proxy.
https://v2.hysteria.network/
MIT License
13.79k stars 1.56k forks source link

[功能请求] 修改 socks 行为 #563

Open 7ith1um opened 1 year ago

7ith1um commented 1 year ago

功能描述

hysteria client 作为 socks server 代理 udp 请求时,用域名发起的请求会收到一个 ip 地址响应,而且这个 ip 地址是在 hysteria server 上解析的。

我不确定这是 bug 还是 feature, 但是 v2ray 的 socks server 是用域名来响应的。

希望在 hysteria client 解析 ip, 或者也用域名进行响应。

2023-02-08_20-03

2023-02-08_20-03_1

2023-02-08_20-04

这个功能的必要性

如果被代理的应用因为某些原因导致自己解析出的 ip 和 hysteria server 解析出的不一样,就无法工作。

当前可用的替代方案

No response

补充

No response

haruue commented 1 year ago

RFC 1928 里似乎并没有清晰地指定这个行为。 不过我认同 req 和 resp 里的地址不一样会导致 socks5 客户端出错。

dyhkwong commented 2 months ago

这不应当是 RFC 1928 应该规定的东西,也不是只有 SOCKS5 才有的问题。 真实网络是 IP 之间的通信,任何流量最终都要发往真实的网络,此时目标地址是域名的请求必须解析为 IP 才能向目标地址发出,而收到的 响应也必然是来自于 IP 地址。 可能除了 sing-box 以外的所有代理工具都是这样的预期行为(v2ray 这种将 UDP 当作 TCP 处理、没有正确 UDP 行为的除外)。sing-box 也仅仅是针对每个 bind socket 预先记录了第一个请求的目标地址的 域名-IP 映射,如果响应的源地址存在于 域名-IP 映射中,则把响应的源地址由 IP 替换成域名。由于 UDP 是无连接的,且 域名-IP不是一一对应的关系,可想而知会出现误替换、漏替换的情况。 建议保证客户端不要发送目标地址是域名的 UDP 请求。