Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

reality h2模式切换网络断连,必须客户端重启服务 #2355

Closed
lhbdhr opened this issue Jul 21, 2023 · 12 comments
Closed

reality h2模式切换网络断连,必须客户端重启服务 #2355

lhbdhr opened this issue Jul 21, 2023 · 12 comments

Comments

@lhbdhr
Copy link

lhbdhr commented Jul 21, 2023

服务端:xray 1.8.3
客户端:安卓,v2rayNG客户端,最新版本
wifi和数据流量切换后,无法访问外网,客户端必须重启服务。

大佬们,是我配置出错还是怎样?

看到有两个人遇到类似的问题,这个是h2不能避免的问题吗?

h2传家宝式bug ,同一wifi多ap,ap之间切换,或者wifi/移动数据之间切换也出这个问题。tcp就不会
主要是Xray与v2ray的h2传输方式无自动恢复连接或保持。一旦网络短暂断开,需要客户端再手动连接恢复。
#289 (comment)

"inbounds": [
    {
      "listen": null,
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "xxxxxxxxxxxxxxxxxxxxxxxxx",
            "email": "xxxxxxxxxxxxxxxxxx",
            "flow": ""
          }
        ],
        "decryption": "none",
        "fallbacks": []
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "show": false,
          "dest": "www.bestbuy.com:443",
          "xver": 0,
          "serverNames": [
            "www.bestbuy.com"
          ],
          "privateKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
          "publicKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
          "minClient": "",
          "maxClient": "",
          "maxTimediff": 120000,
          "shortIds": [""]
        }
      },
      "sniffing": {
        "enabled": false,
        "destOverride": ["http", "tls"]
      }
    }
  ],
@lhbdhr lhbdhr changed the title reality h2模式切换网络断连,必须客户端重新连接 reality h2模式切换网络断连,必须客户端重启服务 Jul 21, 2023
@chika0801
Copy link
Contributor

chika0801 commented Jul 21, 2023

你配置没问题。

类似现象,h2/grpc一直都有,你了解用这种配置组合它就有这问题,就释然了。

一些建议
https://github.com/chika0801/Xray-examples/tree/main/VLESS-H2-uTLS-REALITY#%E6%B3%A8%E6%84%8F

@RPRX RPRX closed this as completed Jul 21, 2023
@RPRX
Copy link
Member

RPRX commented Jul 21, 2023

我都不知道有这 bug,早给我说不就早解决了

经调查是 Golang net/http 实现上的 bug,TCP 卡住后没有自动重连,同一 client 的后续请求都会失败:golang/go#30702
要么健康检查,或者,我想了想,可以在 client.Do(request) 失败后扔掉 client(下次请求会自动建新的):51769fd
我觉得后者更优雅,健康检查像是科技树点歪了,不过还是得实测看一下效果,麻烦你先在电脑上试一下最新的 commit


#289 (comment) 是另一个问题,早已修复:#289 (comment)


gRPC 看起来没这个问题:

if client, found := globalDialerMap[dialerConf{dest, streamSettings}]; found && client.GetState() != connectivity.Shutdown {
return client, nil
}

@lhbdhr
Copy link
Author

lhbdhr commented Jul 22, 2023

感谢R大修复,但是我不会编译啊。。。。
而且,电脑端怎么切换网络啊?
手机端就更麻烦了,涉及到v2rayng

@chika0801
Copy link
Contributor

chika0801 commented Jul 22, 2023

感谢R大修复,但是我不会编译啊。。。。 而且,电脑端怎么切换网络啊? 手机端就更麻烦了,涉及到v2rayng

xray文件在这找, https://github.com/XTLS/Xray-core/actions 问题是ng没人会编译使用这些测试版本的apk。

你电脑用v2rayN要模拟你的问题环境如切换网,是不方便,所以你干脆不复测得了233333

@RPRX
Copy link
Member

RPRX commented Jul 22, 2023

感谢R大修复,但是我不会编译啊。。。。 而且,电脑端怎么切换网络啊? 手机端就更麻烦了,涉及到v2rayng

笔记本电脑,从家庭 WiFi 切换到手机热点即可测试,或者在群里拉别人测试

我看 @Fangliding 方力丁 先生在尝试编译 NG 了

@TheValkyrja
Copy link

这就是祖传的”断流“问题吗?
那gRPC也有的吧,断流。

@RPRX
Copy link
Member

RPRX commented Jul 23, 2023

那gRPC也有的吧,断流。

gRPC 似乎已无断流问题,有的话请发 issue,我会优先解决

@TheValkyrja
Copy link

那gRPC也有的吧,断流。

gRPC 似乎已无断流问题,有的话请发 issue,我会优先解决

在使用Telegram的时候偶尔会遇到无限connecting(gRPC),重启代理就好了,不确定具体是哪个环节有问题,也没特地尝试过复现,大概率找不到源头,所以就单纯一提。

@reza04899
Copy link

Then gRPC also has it, cut off the flow.

gRPC seems to have no interruption problem, if there is, please send an issue, I will give priority to solving it

When using Telegram, I occasionally encounter infinite connecting (gRPC). Just restart the agent. I am not sure which link has the problem, and I have not tried to reproduce it. There is a high probability that the source cannot be found, so I will simply mention it.

i have this problem too

@IConfigYou
Copy link

IConfigYou commented Aug 5, 2023

I've pulled latest h2 transport changes. However, it still hangs on client.Do(request). after investigation, I've noticed that request body reader (breader) never is closed, as a result end-point still waiting for new stream data. Therefore, no error is thrown and no response because everything looks correct.

I am not sure if breader intentionally is kept open for next sequences of data or not (stateful connection as the same as TCP).

Edit: 2023-8-6

I've done some comprehensive tests such as fixed body length/different http methods/stream data/different http libraries and etc. all tests were successful. However, breader doesn't work. I logged what is written into it, I saw that nothing is written into breader. I don't know why nothing is written into breader. However, I am sure client.Do(request) hanging is caused by breader

arm64v8a pushed a commit to MatsuriDayo/Xray-core that referenced this issue Aug 24, 2023
Add "Xray REALITY with 'steal oneself'" example to README

Step-by-step instructions for 'steal oneself'

Bump github.com/quic-go/quic-go from 0.37.6 to 0.38.0

Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.37.6 to 0.38.0.
- [Release notes](https://github.com/quic-go/quic-go/releases)
- [Changelog](https://github.com/quic-go/quic-go/blob/master/Changelog.md)
- [Commits](quic-go/quic-go@v0.37.6...v0.38.0)

---
updated-dependencies:
- dependency-name: github.com/quic-go/quic-go
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Bump github.com/quic-go/quic-go from 0.37.5 to 0.37.6

Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.37.5 to 0.37.6.
- [Release notes](https://github.com/quic-go/quic-go/releases)
- [Changelog](https://github.com/quic-go/quic-go/blob/master/Changelog.md)
- [Commits](quic-go/quic-go@v0.37.5...v0.37.6)

---
updated-dependencies:
- dependency-name: github.com/quic-go/quic-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

fix(config): fix grpc cofnig parsing when service name only has one '/' char

Bump github.com/quic-go/quic-go from 0.37.4 to 0.37.5

Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.37.4 to 0.37.5.
- [Release notes](https://github.com/quic-go/quic-go/releases)
- [Changelog](https://github.com/quic-go/quic-go/blob/master/Changelog.md)
- [Commits](quic-go/quic-go@v0.37.4...v0.37.5)

---
updated-dependencies:
- dependency-name: github.com/quic-go/quic-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Update README.md

A better docker image of xray

fix(proxy): removed the udp payload length check when encryption is disabled

refactor(deps): replace github.com/golang/protobuf with google.golang.org/protobuf

Bump github.com/quic-go/quic-go from 0.37.3 to 0.37.4

Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.37.3 to 0.37.4.
- [Release notes](https://github.com/quic-go/quic-go/releases)
- [Changelog](https://github.com/quic-go/quic-go/blob/master/Changelog.md)
- [Commits](quic-go/quic-go@v0.37.3...v0.37.4)

---
updated-dependencies:
- dependency-name: github.com/quic-go/quic-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Bump golang.org/x/net from 0.13.0 to 0.14.0

Bumps [golang.org/x/net](https://github.com/golang/net) from 0.13.0 to 0.14.0.
- [Commits](golang/net@v0.13.0...v0.14.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Bump github.com/quic-go/quic-go from 0.37.1 to 0.37.3

Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.37.1 to 0.37.3.
- [Release notes](https://github.com/quic-go/quic-go/releases)
- [Changelog](https://github.com/quic-go/quic-go/blob/master/Changelog.md)
- [Commits](quic-go/quic-go@v0.37.1...v0.37.3)

---
updated-dependencies:
- dependency-name: github.com/quic-go/quic-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Bump golang.org/x/crypto from 0.11.0 to 0.12.0

Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.11.0 to 0.12.0.
- [Commits](golang/crypto@v0.11.0...v0.12.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Recognize .jsonc files automatically (#2398)

Closes XTLS/Xray-core#2399

Add Furious to README/GUI Clients (#2405)

Bump golang.org/x/net from 0.12.0 to 0.13.0

Bumps [golang.org/x/net](https://github.com/golang/net) from 0.12.0 to 0.13.0.
- [Commits](golang/net@v0.12.0...v0.13.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Bump github.com/quic-go/quic-go from 0.36.2 to 0.37.1

Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.36.2 to 0.37.1.
- [Release notes](https://github.com/quic-go/quic-go/releases)
- [Changelog](https://github.com/quic-go/quic-go/blob/master/Changelog.md)
- [Commits](quic-go/quic-go@v0.36.2...v0.37.1)

---
updated-dependencies:
- dependency-name: github.com/quic-go/quic-go
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Bump google.golang.org/grpc from 1.56.2 to 1.57.0

Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.56.2 to 1.57.0.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](grpc/grpc-go@v1.56.2...v1.57.0)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

H2 transport: Abandon `client` if `client.Do(request)` failed

See golang/go#30702

Fixes XTLS/Xray-core#2355

Add NekoRay and V2rayU to README/GUI Clients

Closes XTLS/Xray-core#2354

CI: Add Linux loong64 build task

Bump github.com/refraction-networking/utls from 1.3.2 to 1.3.3

Bumps [github.com/refraction-networking/utls](https://github.com/refraction-networking/utls) from 1.3.2 to 1.3.3.
- [Release notes](https://github.com/refraction-networking/utls/releases)
- [Commits](refraction-networking/utls@v1.3.2...v1.3.3)

---
updated-dependencies:
- dependency-name: github.com/refraction-networking/utls
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

fix: correct the logic of converting SocksAddr into net.Destination.

fix: revert previous change on IsValid() function; add validation in getUoTConnection();

fix: Check if address is nil for IsValid() function.

fix: Patch potential nil pointer deference in proxy::http::client::fillRequestHeader().

Bump github.com/quic-go/quic-go from 0.36.1 to 0.36.2

Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.36.1 to 0.36.2.
- [Release notes](https://github.com/quic-go/quic-go/releases)
- [Changelog](https://github.com/quic-go/quic-go/blob/master/Changelog.md)
- [Commits](quic-go/quic-go@v0.36.1...v0.36.2)

---
updated-dependencies:
- dependency-name: github.com/quic-go/quic-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Bump google.golang.org/grpc from 1.56.1 to 1.56.2

Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.56.1 to 1.56.2.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](grpc/grpc-go@v1.56.1...v1.56.2)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Refactor: Fragmentation

XTLS/Xray-core@5f5ae37
XTLS/Xray-core@9122d0f

Clean unnecessary code in Trojan

Bump golang.org/x/net from 0.11.0 to 0.12.0

Bumps [golang.org/x/net](https://github.com/golang/net) from 0.11.0 to 0.12.0.
- [Commits](golang/net@v0.11.0...v0.12.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Bump golang.org/x/crypto from 0.10.0 to 0.11.0

Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.10.0 to 0.11.0.
- [Commits](golang/crypto@v0.10.0...v0.11.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Bump golang.org/x/sys from 0.9.0 to 0.10.0

Bumps [golang.org/x/sys](https://github.com/golang/sys) from 0.9.0 to 0.10.0.
- [Commits](golang/sys@v0.9.0...v0.10.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sys
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@RPRX
Copy link
Member

RPRX commented Aug 27, 2023

你们看一下这个 #2232 (comment) ,测一下 d92002a 的 REALITY gRPC 还有没有(复现概率较低的)无限 connecting

*ray 的代码里都不调用 HandshakeContext,也就是说 TLS 握手阶段大概率没超时时间,如果卡住了,对于 gRPC、H2 就是都在等

d92002a 的 REALITY 调用 uTLS 是 HandshakeContext,看代码 gRPC 是 5 秒,H2 可能是默认不设限,暂不确定哪里设 dial 超时

@RPRX
Copy link
Member

RPRX commented Aug 27, 2023

又看了看,gRPC 的普通 TLS、uTLS 可能是有超时的,ClientHandshake() 内调用普通 Handshake 并监测 ctx。。。无论有没有实际生效(它收到的这个 ctx 会不会被 cancel),这写法都挺迷的。。。以后全改成 REALITY 的写法,我感觉研究这屎山真不如重开

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants