mirror of
https://github.com/snail007/goproxy.git
synced 2026-04-27 00:15:51 +03:00
[GH-ISSUE #295] 内网穿透mysql端口有问题 #212
Labels
No labels
TODO
bug
duplicate
enhancement
good first issue
help wanted
helpful
invalid
need-confirm
pull-request
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/goproxy#212
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @breath-co2 on GitHub (Jul 5, 2019).
Original GitHub issue: https://github.com/snail007/goproxy/issues/295
按照文档里的做法配置启动后,使用 mysql 客户端连接后无反应,改配置为 http 端口可以,多链接和多路复用都试过不行。
经过分析,是因为当mysql有一个新连接后它会主动发送类似
这样的一串验证信息,但是使用 goproxy 的内网穿透,当连接到 proxy server 的端口后(没有发送数据)它不会去 client 创建连接,这样自然就不会收到 mysql 下发的信息,然后就有问题了。。
@snail007 commented on GitHub (Jul 5, 2019):
你的网络问题,client没连接上bridge。“当连接到 proxy server 的端口后(没有发送数据)它不会去 client 创建连接”不存在这样的逻辑,只要有server连接,就会去连接client。
@breath-co2 commented on GitHub (Jul 5, 2019):
可能我表述不正确,详细说下吧:
启动服务
有3台机器分别A,B,C表示:
A: bridge服务器,先启动
B: 这机器上有 80、3306端口分别是http和mysql,需要穿透给 C 用,其中 172.17.2.1 是 bridge 的IP
启动后B输出:
A bridge log输出
C: 启动参数如下,其中***是bridge的外网IP
启动后输出
bridge 和 client 无任何log输出。
此时3服务器都已启动,C服务器上执行
netstat -nltp | grep proxy输出:测试服务,http测试正常
C上执行
curl -i http://127.0.0.1:800可以输出 A 服务器的 html 内容。A log 输出:
B log 输出:
C log 输出:
以上表明配置已生效
测试mysql服务,异常
接下来用mysql 连接,执行
mysql -P306 -h127.0.0.1 -uroot -p输入密码后无任何反应,异常。ctrl + c 退出用
telnet 127.0.0.1 306测试端口,输出:A,B,C没任何log信息。而如果用
telnet 127.0.0.1 3306(本机mysql端口) 正确的输出是:因为mysql在连接后会输出这个认证数据包。
还是用
telnet 127.0.0.1 306测试,输入一个1并按回车:发现可收到mysql的内容,并且:
A 输出:
B 输出:
C 输出:
@snail007 commented on GitHub (Jul 5, 2019):
bug已经确认,下个版本中已经修复。
@snail007 commented on GitHub (Jul 9, 2019):
fixed in v7.9
@breath-co2 commented on GitHub (Jul 17, 2019):
@snail007 感谢你的修复,升级到 8.0 后使用 telnet 测试连接上可以收到mysql的包头数据了,但是实际用mysql客户端或任何别的语言连接这个穿透的端口,会出现 MySQL server has gone away 的错误。
仍旧无法使用
@breath-co2 commented on GitHub (Jul 17, 2019):
@snail007 抱歉,参数设置问题,已经测试可用了,非常感谢