sing-box
sing-box copied to clipboard
通过http_proxy访问http服务器时, 请求完成后代理连接关闭, http连接没有关闭
操作系统
Windows
系统版本
win11 preview(27723)
安装类型
sing-box 原始命令行程序
如果您使用图形客户端程序,请提供该程序版本。
v2rayN 6.60
版本
sing-box version 1.10.0-beta.12
Environment: go1.23.2 windows/amd64
Tags: with_gvisor,with_quic,with_dhcp,with_wireguard,with_ech,with_utls,with_reality_server,with_acme,with_clash_api
Revision: e68a9e623f09840552554ea15e4973b668a9d648
CGO: disabled
描述
通过sing-box的http代理访问其他http站点(直连, 没试过走代理的时候会不会)时, http请求完成, 且代理连接关闭后, 到该http站点的请求连接不会被关闭, 长时间运行后造成系统端口耗尽触发拒绝服务 如果保持连接是为了复用, 那么新的http请求应该继续使用之前建立的连接, 否则连接应该是跟随http代理请求的关闭一同关闭的
我本地的情况就是因为之前在环境变量里面设置了代理, 造成了v2n访问clash_api的时候会走代理触发这个bug, 最后卡了几万个连接在那里, 把127.0.0.1上的端口都用完了, 其他程序都无法开启或监听新的socket
测试配置文件
{
"inbounds": [
{
"type": "http",
"tag": "http",
"listen": "::",
"listen_port": 56501,
"domain_strategy": "ipv4_only",
"sniff": true,
"sniff_override_destination": true
}
],
"route": {
"rules": [
{
"outbound": "direct",
"port_range": [
"0:65535"
]
}
]
},
"experimental": {
"clash_api": {
"external_controller": "127.0.0.1:56506"
}
}
}
重现方式
sing-box run -c test.json, 测试配置文件中上面- 在git bash中执行
export http_proxy=http://127.0.0.1:56501(用浏览器的话, 每次请求关下浏览器也行, 不然浏览器每次都是复用的同一个连接) - 在同一个bash中重复执行
curl http://127.0.0.1:56506/connections -s(其他本地或远程的http站点也行), 可以通过直接对比返回的json连接数据或netstat或windows的资源监视器直接观察到打开的到56501端口的连接越来越多
日志
No response
支持我们
- [ ] 我已经 赞助
完整性要求
- [X] 我保证阅读了文档,了解所有我编写的配置文件项的含义,而不是大量堆砌看似有用的选项或默认值。
- [X] 我保证提供了可以在本地重现该问题的服务器、客户端配置文件与流程,而不是一个脱敏的复杂客户端配置文件。
- [X] 我保证提供了可用于重现我报告的错误的最简配置,而不是依赖远程服务器、TUN、图形界面客户端或者其他闭源软件。
- [X] 我保证提供了完整的配置文件与日志,而不是出于对自身智力的自信而仅提供了部分认为有用的部分。
@yyjdelete
你可以参考这个修改自行编译 sing-box 测试一下: https://github.com/SagerNet/sing/pull/73
降低 IdleConnTimeout 后,http(s) 连接的回收和复用会更积极一点,可以避免连接数过多。