[错误]: 订阅链接将客户端的公共 IP 宣传为反向代理后的服务器地址(使用 X-Real-IP 作为主机)
作者: sy3tem创建于 2026年9月17日更新于 2026年9月17日
描述错误
订阅产出中的服务器'字段(raw /sub',/json',/clash')由订阅者自己的公开IP而不是面板的公共主机填充. 值会根据客户端机器获取订阅而变化,因此导入的配置文件在错误的主机和VPN的路由不正确.
我在目前的主要 ' (v3.8.5时代,1c0ce80 ' )上转载了这一点。 该面板被部署在 " 开放 " /nginx倒置代用装置后。
订阅 URL 实例:https://<your-domain>/clash/<subid>>
解码响应 :
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 代理词 :
- 名称:"..." 类型: vless 服务器: < 客户端- public- ip > # <- 这是获取链接的 CLINT 的公用IP 服务器名 :... . . . . . . . .
QQClient-public-ip>`是访客的公开IP,而不是面板主机. 从另一台机器取取出相同的 URL 生成另一台机器在“ 服务器” 中的 IP 。
如何繁殖
1. 在反向代理/CDN后部署3x-ui,将QQ-Real-IP`设定给访客的IP,但**不**设置QQ-Forwarded-Host'(nginx/openresty和几个CDN设置常见默认).
2. Do **not**配置"订阅域"("subDomain")/网页域设置.
3. 创建一个带有节点、空白/通配符(`0.0.0.0')的本地输入式监听。
4. 从客户端取取 " https://<your-domain>/clash/<subid>` " 。
5. 观察`服务器:'在YAML中等于该客户的公开IP.
预期行为
`服务器'字段应保持稳定并反映面板的公开主机(XQ-domain),或至少反映“subDomain” / “webDomain” 所配置的值,或客户拨打的实际“Host”头条,绝不是客户IP。
实际行为
当出现节点地址/routable收听地址/配置的公共主机时,将“服务器”设置到请求客户端的公共IP上。
* 根源(来源分析)
在 " 内部/分/服务.去 " , " 分服务 " 。 决议要求 " 东道方按此顺序:
开始
如果 h, 错误 : = 得到HostFH (前出 ("X- 前出 (Host)")); 错误 : = = = = = ""{
主机=h
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
如果主机为""{
主机=转发 ("X-Real-IP") // <- 将客户端IP作为主机处理
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
如果主机为""{
主机, , 错误 = net. SplitHostPort( c. request. Host) 互联网档案馆的存檔,存档日期2014-12-21.
. . . . . . . .
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
当代理发送QQ-Real-IP,而不是QQ-Forwarded-Host时,‘host'成为了访客的公共IP. (注: nginx/openresty默认地将原来的"Host"标题转发出,所以正确的面板域实际上可以在'c.request. 主机` - 它只是被跳过,因为先检查-Real-IP ' 。 )
东道主 ' 然后通过要求(东道主) ' 储存为s.address? ' Prepare For Reference ' (又称内部/sub/service.go'),在没有其他办法时又回到s.address:
开始 如果 d : = s.confited PublicHost (); d != ""{ 返回 d {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 返回 s. address // = 泄露的客户端公共IP
因此,在未配置“subDomain”/“webDomain”和节点/路由式监听地址的情况下,链接为客户端IP做广告。
建议
. . . . . . .
内容来源: MHSanaei/3x-ui