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

1.1.1版本的mwss模式依旧存在断流问题 #98

Closed
Qinhank opened this issue Apr 15, 2022 · 5 comments
Closed

1.1.1版本的mwss模式依旧存在断流问题 #98

Qinhank opened this issue Apr 15, 2022 · 5 comments

Comments

@Qinhank
Copy link

Qinhank commented Apr 15, 2022

问题:测速时测完下行直接timeout无法连接。
环境:双端都是debian10
补充:尝试用go编译出来的最新版本也不行,问题依旧存在(go1.1.8,命令:go install github.com/Ehco1996/ehco/cmd/ehco)

@Ehco1996
Copy link
Owner

@Qinhank 能提怎么测试的么?有脚本或者环境么,另外最好附上测试的日志

我直接使用 iperf3 在两端互拉是不会不断流的

❯ go run cmd/ehco/main.go -c config.json
[cfg] Load Config From file: config.json
[web] Start Web Server at http://0.0.0.0:9000/
[cfg] Start to watch config file: config.json
[relay] Start UDP relay <At=127.0.0.1:1234 Over=raw TCP-To=[0.0.0.0:5201] UDP-To=[0.0.0.0:5201] Through=raw>
[relay] Start WSS relay <At=127.0.0.1:3443 Over=wss TCP-To=[0.0.0.0:5201] UDP-To=[] Through=raw>
[relay] Start UDP relay <At=127.0.0.1:1237 Over=raw TCP-To=[wss://0.0.0.0:4443] UDP-To=[0.0.0.0:5201] Through=mwss>
[relay] Start UDP relay <At=127.0.0.1:1235 Over=raw TCP-To=[ws://0.0.0.0:2443] UDP-To=[0.0.0.0:5201] Through=ws>
[relay] Start UDP relay <At=127.0.0.1:1236 Over=raw TCP-To=[wss://0.0.0.0:3443] UDP-To=[0.0.0.0:5201] Through=wss>
[relay] Start WS relay <At=127.0.0.1:2443 Over=ws TCP-To=[0.0.0.0:5201] UDP-To=[] Through=raw>
[relay] Start TCP relay <At=127.0.0.1:1236 Over=raw TCP-To=[wss://0.0.0.0:3443] UDP-To=[0.0.0.0:5201] Through=wss>
[relay] Start TCP relay <At=127.0.0.1:1235 Over=raw TCP-To=[ws://0.0.0.0:2443] UDP-To=[0.0.0.0:5201] Through=ws>
[relay] Start TCP relay <At=127.0.0.1:1234 Over=raw TCP-To=[0.0.0.0:5201] UDP-To=[0.0.0.0:5201] Through=raw>
[relay] Start MWSS relay <At=127.0.0.1:4443 Over=mwss TCP-To=[0.0.0.0:5201] UDP-To=[] Through=raw>
[relay] Start TCP relay <At=127.0.0.1:8888 Over=raw TCP-To=[8.8.8.8:5201 google.com:5201] UDP-To=[] Through=raw>
[relay] Start TCP relay <At=127.0.0.1:1237 Over=raw TCP-To=[wss://0.0.0.0:4443] UDP-To=[0.0.0.0:5201] Through=mwss>
[mwss server init] 127.0.0.1:52799  127.0.0.1:4443
[mwss] Init new session to: 127.0.0.1:4443
[mwss] HandleTCPConn from:127.0.0.1:52798 to:wss://0.0.0.0:4443
[tun] HandleMWssRequest from:127.0.0.1:52799 to:0.0.0.0:5201
[mwss] HandleTCPConn from:127.0.0.1:52801 to:wss://0.0.0.0:4443
[tun] HandleMWssRequest from:127.0.0.1:52799 to:0.0.0.0:5201

结果

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-100.00 sec   156 GBytes  13.4 Gbits/sec                  sender
[  5]   0.00-100.00 sec   156 GBytes  13.4 Gbits/sec                  receiver

iperf Done.

@Qinhank
Copy link
Author

Qinhank commented Apr 16, 2022

首先补充下关于两台机器系统细节。
中转机:Debian10(内核5.10.0-0.bpo.12-cloud-amd64,虚拟架构KVM)
落地机:Debian10(内核5.10.0-0.bpo.9-cloud-amd64,虚拟架构KVM)
假定中转机的IP地址为:120.233.0.0
假定落地机的IP地址为:103.181.0.0
中转机使用的命令是:./ehco_1.1.1_linux_amd64 -l 0.0.0.0:63800 -r wss://103.181.0.0:62100 -tt mwss
落地机使用的命令是:./ehco_1.1.1_linux_amd64 -l 0.0.0.0:62100 -lt mwss -r 127.0.0.1:63701
落地转发的协议为:Shadowsocks-libev
参考搭建地址:这里查看

中转机失败时日志如下:

HandleTCPConn err=read tcp 120.233.0.0:63800->110.191.0.1:51858: i/o timeout name=[At=0.0.0.0:63800 Over=raw TCP-To=[wss://103.181.0.0:62100] UDP-To=[] Through=mwss]
HandleTCPConn err=read tcp 120.233.0.0:63800->110.191.0.1:51862: i/o timeout name=[At=0.0.0.0:63800 Over=raw TCP-To=[wss://103.181.0.0:62100] UDP-To=[] Through=mwss]
HandleTCPConn err=read tcp 120.233.0.0:63800->110.191.0.1:51860: i/o timeout name=[At=0.0.0.0:63800 Over=raw TCP-To=[wss://103.181.0.0:62100] UDP-To=[] Through=mwss]
HandleTCPConn err=read tcp 120.233.0.0:63800->110.191.0.1:51856: i/o timeout name=[At=0.0.0.0:63800 Over=raw TCP-To=[wss://103.181.0.0:62100] UDP-To=[] Through=mwss]
HandleTCPConn err=read tcp 120.233.0.0:63800->110.191.0.1:51864: i/o timeout name=[At=0.0.0.0:63800 Over=raw TCP-To=[wss://103.181.0.0:62100] UDP-To=[] Through=mwss]
HandleTCPConn err=read tcp 120.233.0.0:63800->110.191.0.1:51874: i/o timeout name=[At=0.0.0.0:63800 Over=raw TCP-To=[wss://103.181.0.0:62100] UDP-To=[] Through=mwss]
HandleTCPConn err=read tcp 120.233.0.0:63800->110.191.0.1:51872: i/o timeout name=[At=0.0.0.0:63800 Over=raw TCP-To=[wss://103.181.0.0:62100] UDP-To=[] Through=mwss]
HandleTCPConn err=read tcp 120.233.0.0:63800->110.191.0.1:51870: i/o timeout name=[At=0.0.0.0:63800 Over=raw TCP-To=[wss://103.181.0.0:62100] UDP-To=[] Through=mwss]
HandleTCPConn err=read tcp 120.233.0.0:63800->110.191.0.1:51866: i/o timeout name=[At=0.0.0.0:63800 Over=raw TCP-To=[wss://103.181.0.0:62100] UDP-To=[] Through=mwss]
HandleTCPConn err=read tcp 120.233.0.0:63800->110.191.0.1:51868: i/o timeout name=[At=0.0.0.0:63800 Over=raw TCP-To=[wss://103.181.0.0:62100] UDP-To=[] Through=mwss]

落地机失败时日志如下:

[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset err: timeout
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset from:120.233.0.0:56132 to:-127.0.0.1:63701
[tun] HandleMWssRequset err: read tcp 10.0.0.187:62100->120.233.0.0:56132: read: connection reset by peer
[tun] HandleMWssRequset err: read tcp 10.0.0.187:62100->120.233.0.0:56132: read: connection reset by peer
[mwss] accept stream err: read tcp 10.0.0.187:62100->120.233.0.0:56132: read: connection reset by peer

测速结果截图:
测速结果截图

@Ehco1996
Copy link
Owner

Ehco1996 commented Apr 16, 2022

@Qinhank 从落地机器的日志上看,是 ehco 到 ss 的连接有问题,需要附上 ss 的日志才能排查了


另外发现落地机器上的 ehco 版本不是 master 的,能 build 一个最新的试试么?

@Ehco1996
Copy link
Owner

我在本机做了一下 ss 的测试,也没有发生断流的现象,测试过程和脚本可以参考这里

https://github.com/Ehco1996/ehco/tree/master/test/bench

@Qinhank
Copy link
Author

Qinhank commented Apr 16, 2022

@Ehco1996 我查看了ss的日志,确实有一些错误。
于是我使用了XrayR的ss并且切换为aes-128-gcm加密(之前是chacha20-ietf-poly1305)且全部重新编译master分支的ehco,经过短暂的10分钟测试似乎没有问题了,可能确实是与之前的Shadowsocks-libev存在一些问题。

Shadowsocks-libev的错误日志如下:

Apr 16 21:44:39 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 21:44:39 ERROR: getpeername: Transport endpoint is not connected
Apr 16 21:44:39 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 21:44:39 ERROR: getpeername: Transport endpoint is not connected
Apr 16 21:45:34 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 21:45:34 ERROR: server recv: Connection reset by peer
Apr 16 21:48:52 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 21:48:52 ERROR: server recv: Connection reset by peer
Apr 16 21:49:42 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 21:49:42 ERROR: failed to handshake with 58.32.7.16: authentication error
Apr 16 21:50:56 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 21:50:56 ERROR: server recv: Connection reset by peer
Apr 16 21:53:06 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 21:53:06 ERROR: server recv: Connection reset by peer
Apr 16 21:53:08 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 21:53:08 ERROR: remote recv: Connection reset by peer
Apr 16 21:54:56 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 21:54:56 ERROR: getpeername: Transport endpoint is not connected
Apr 16 21:56:58 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 21:56:58 ERROR: remote recv: Connection reset by peer
Apr 16 21:58:18 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 21:58:18 ERROR: server recv: Connection reset by peer
Apr 16 22:06:58 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 22:06:58 ERROR: remote recv: Connection reset by peer
Apr 16 22:10:38 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 22:10:38 ERROR: failed to handshake with 127.0.0.1: authentication error
Apr 16 22:10:43 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 22:10:43 ERROR: failed to handshake with 127.0.0.1: authentication error
Apr 16 22:10:48 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 22:10:48 ERROR: failed to handshake with 127.0.0.1: authentication error
Apr 16 22:10:50 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 22:10:50 ERROR: remote recv: Connection reset by peer
Apr 16 22:10:53 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 22:10:53 ERROR: failed to handshake with 127.0.0.1: authentication error
Apr 16 22:15:00 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 22:15:00 ERROR: failed to handshake with 103.197.70.186: authentication error
Apr 16 22:16:58 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 22:16:58 ERROR: remote recv: Connection reset by peer
Apr 16 22:17:31 cloud-instance shadowsocks-libev.ss-server-daemon[21859]:  2022-04-16 22:17:31 ERROR: server recv: Connection reset by peer

@Qinhank Qinhank closed this as completed May 7, 2022
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

2 participants