ShadowsocksR-Live / overtls

A simple proxy tunnel, minimalist tool for bypassing the GFW.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

overtls + ssrWin 出现 Connection reset without closing handshake 错误

HeelooFriiend opened this issue · comments

你好, 感谢你开发出这款工具.
最近由之前的SSRoT升级到 overtls 后, 按照 readme 部署服务器后, 复制控制台中提供的 ssr:// 连接, 配置在ssrDroid上成功正常翻墙. 但是windows 上配置到 ssrWin 报错.

环境:
服务端: ubuntu 22.04
1

客户端: windows 10
2

你用 overtls 命令行客户端 试试看.

试过命令行执行客户端了, 打开日志显示的还是这个错误.
3

哪个版本? overtls -V, 现在是 overtls 0.2.16.

前天下载的, 应该是0.2.15, 我更新到最新的0.2.16 尝试之后, 问题是一样的.
4

嗯, 看到服务端有正确返回, 就不用担心了. 有一两个 reset 是无关紧要的.

image

你可以把下载下来的 包里的 overtls.dll 文件替换 ssrWin 里的 那个. 就可以了.

我将下载的 overtls 0.2.16版本中的 overtls.dll, 替换了 ssrWin中的, 然后运行 ssrWin, 还是有上述报错信息, 也无法访问页面.

https://github.com/ssrlive/socks-hub 再下载这个, 把原来的 socks_hub.dll 替换掉以后呢?

两个dll都替换了, 还是无法访问. 为了避免本地配置问题, 我换台设备排查试试.
7

我切换到另一台电脑上, 还是复现了这个问题. 然后把工程拉下来, 本地IDE中运行也复现了这个问题, 这里是控制台的日志. 启动后测试访问 github 或 baidu 等正常, 测试访问 google 或 facebook, 还是 Connection reset without closing handshake 错误.
log.txt

从日志看, tls 连接是正确建立了, ping/pong 也是正确响应了, 而且服务器不应连接不到外网, 除非你服务器本身位于墙内.

你如果购买的是 腾讯云 阿里云 等** vps 主机, 可能会出现这种问题.

你使用命令 能返回结果吗。curl --proxy socks5h://127.0.0.1:1080 https://google.com

服务器在境外,服务器上也能ping通境外网站。 本地执行上述命令报错。
目前测试下来, overtls(Server) + ssrDroid(Client) 是正常的。
overtls(Server) + overtls(Client Win) + Edge(ProxyOmega) 或者
overtls(Server) + ssrWin + Edge 会报错。
8

其它平台上呢? 比如 Linux 或 macOS 上.

这个命令连百度有结果吗? curl --proxy socks5h://127.0.0.1:1080 https://baidu.com

目前测试 mac(x86_64) 客户端上与windows 相同。
这是 windows上curl的显示:
10
这是 MAC上curl的显示:
11

这太奇怪了, 我想不出还有哪些可能.

我先尝试完全重新部署/更换VPS/不用一键脚本 等方式解决问题。感谢帮忙排查,谢谢!

你在 VPS 上, 停掉 overtls 服务端,

sudo systemctl stop overtls

然后手工 运行 overtls 服务端.

/usr/bin/overtls -r server -c /etc/overtls/config.json -v trace

然后在本地机器上运行

curl --proxy socks5h://127.0.0.1:1080 https://google.com

连接 谷歌, 观察 服务端的 输出是啥?

日志提示没有发现 /tunnerl_path/ , 我猜测是设定的 / 与 \ 等字符转义问题. 我修改了测试下.
13

知道了, 你的服务器是双栈网络, 你关掉 IPv6 就好了.

https://github.com/ShadowsocksR-Live/shadowsocksr-native/wiki/%E7%A6%81%E7%94%A8-IPv6

问题解决了, 我按照 overtls里面的操作, 忘了参考SSRoT里面的操作. 非常感谢!

现在,我认为这可能是 overtls 的一个 bug,现在请你帮忙测试一下:

将你的 vps 恢复 成支持 IPv6 的双栈模式,
然后在这个服务器上直接 用 命令 curl https://google.com 试试,看能否返回结果?

如果有结果, 那就是 overtls 的bug了,下一步考虑怎么修正。

你好,按照你的方法操作了。是能返回结果的。
14

在双栈模式下,命令 nslookup google.com 返回的结果是啥。

返回结果为:
root@www:~# nslookup google.com
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: google.com
Address: 142.250.72.238
Name: google.com
Address: 2607:f8b0:4007:816::200e

嗯。知道问题在哪里了,下一步应该能很快搞定。

我这更改服务器为双栈模式后,之前使用 overtls 是无法翻墙的,但是我修改 /etc/sysctl.conf 文件后, 执行 sudo sysctl -p , 发现客户端正常翻墙。不确定是否更改成功。

你现在还禁掉 IPv6 保险一点。

改完提交了, 没有打包发布,你有空把代码拉到你vps 上编译跑一下看看是否已经修正了?观察它的输出日志,把 IPv4 和 IPv6 的地址都打印出来了。

不知你看到提醒沒有,希望你測試一把,看這個問題是否已經修正了。

刚看到消息,我晚点回去试试

这边把最新代码拉下来编译后,执行
cargo build --release
sudo cp target/release/overtls /usr/local/bin/
然后运行启动后,打印出来的日志是这样的
16

ipv6 已經確認啓用了的畫,這就表明這個問題已經解決了。

overtls 的安裝路徑是 /usr/bin/ 不是 /usr/local/bin/

这边启用 ip6 后, 运行 /usr/bin/overtls , 功能是正常的.

OK. 感謝你的測試配合,看來這個問題徹底修復了。

感谢你开发这个工具. 确实帮助我解决了翻墙问题.