[GH-ISSUE #478] frp所有版本都存在的一个严重问题 #361

Closed
opened 2026-05-05 12:10:13 -06:00 by gitea-mirror · 17 comments
Owner

Originally created by @hijk1234 on GitHub (Oct 5, 2017).
Original GitHub issue: https://github.com/fatedier/frp/issues/478

用frp来充当转发的角色,作者可以去百度,搜索gh0st随便下载个软件用来测试TCP长时间连接(七八个小时)。一个晚上就能测试出来所有问题,比如当一个tcp连接由于某种未知原因死了后(其实并不是真死,tcpview查看用户端网络连接状态其实还是ESTABLISHED),frp没有能力及时的检测出来。通俗的来讲就是frp无法及时感知用户端和客户端之间(注意,用户端【gh0st软件服务端】和客户端【gh0st软件生成的客户端】)tcp连接的健康状态。这样就会导致假死连接。出现假死的时候只能在gh0st服务端手动去点一下,这个tcp连接才会释放。然后经过一段时间后(这个连上来的时间不知是多久,不会掉线后,立刻重新连接上来)才会重新连接上来。当同时有上百个gh0st客户端连接gh0st服务端,这个问题会导致gh0st服务端连接上来的客户端特别乱,基本没办法使用了。

Originally created by @hijk1234 on GitHub (Oct 5, 2017). Original GitHub issue: https://github.com/fatedier/frp/issues/478 用frp来充当转发的角色,作者可以去百度,搜索gh0st随便下载个软件用来测试TCP长时间连接(七八个小时)。一个晚上就能测试出来所有问题,比如当一个tcp连接由于某种未知原因死了后(其实并不是真死,tcpview查看用户端网络连接状态其实还是ESTABLISHED),frp没有能力及时的检测出来。通俗的来讲就是frp无法及时感知用户端和客户端之间(注意,用户端【gh0st软件服务端】和客户端【gh0st软件生成的客户端】)tcp连接的健康状态。这样就会导致假死连接。出现假死的时候只能在gh0st服务端手动去点一下,这个tcp连接才会释放。然后经过一段时间后(这个连上来的时间不知是多久,不会掉线后,立刻重新连接上来)才会重新连接上来。当同时有上百个gh0st客户端连接gh0st服务端,这个问题会导致gh0st服务端连接上来的客户端特别乱,基本没办法使用了。
Author
Owner

@sunnyboy00 commented on GitHub (Oct 5, 2017):

我觉得在这个问题应该是后台服务来管理,frp 只做中继

<!-- gh-comment-id:334407693 --> @sunnyboy00 commented on GitHub (Oct 5, 2017): 我觉得在这个问题应该是后台服务来管理,frp 只做中继
Author
Owner

@hijk1234 commented on GitHub (Oct 5, 2017):

你错了,经过测试。使用圣剑内网通的话,就不会存在这个问题。同样的客户端,服务端,用户端。用圣剑做反向代理TCP就没问题。,换了frp就出现很大的问题。说明frp的TCP模块还是有很大的问题的。这还是四五个电脑测试一个晚上的结果。如果是上百个电脑,那就大乱特乱了。

<!-- gh-comment-id:334463550 --> @hijk1234 commented on GitHub (Oct 5, 2017): 你错了,经过测试。使用圣剑内网通的话,就不会存在这个问题。同样的客户端,服务端,用户端。用圣剑做反向代理TCP就没问题。,换了frp就出现很大的问题。说明frp的TCP模块还是有很大的问题的。这还是四五个电脑测试一个晚上的结果。如果是上百个电脑,那就大乱特乱了。
Author
Owner

@yanggis commented on GitHub (Oct 6, 2017):

这个问题我很早就报告过了,可惜作者一直没有重视:
https://github.com/fatedier/frp/issues/457

<!-- gh-comment-id:334654368 --> @yanggis commented on GitHub (Oct 6, 2017): 这个问题我很早就报告过了,可惜作者一直没有重视: https://github.com/fatedier/frp/issues/457
Author
Owner

@yanggis commented on GitHub (Oct 6, 2017):

现在的解决办法就是隔一段时间把frp客户端重启一次。

<!-- gh-comment-id:334654480 --> @yanggis commented on GitHub (Oct 6, 2017): 现在的解决办法就是隔一段时间把frp客户端重启一次。
Author
Owner

@yanggis commented on GitHub (Oct 6, 2017):

@hijk1234 不过你也不用借机用商业软件来黑frp,虽然它有问题,我还是希望推荐更多的人用frp,把那些收费的内网通软件全部灭掉,包括你提到的什么软件。

<!-- gh-comment-id:334656977 --> @yanggis commented on GitHub (Oct 6, 2017): @hijk1234 不过你也不用借机用商业软件来黑frp,虽然它有问题,我还是希望推荐更多的人用frp,把那些收费的内网通软件全部灭掉,包括你提到的什么软件。
Author
Owner

@hijk1234 commented on GitHub (Oct 6, 2017):

@yanggis frp从第1版到现在最新版本,TCP模块都存在这个问题。只是向作者真实反馈问题,没有黑frp之说。

<!-- gh-comment-id:334756556 --> @hijk1234 commented on GitHub (Oct 6, 2017): @yanggis frp从第1版到现在最新版本,TCP模块都存在这个问题。只是向作者真实反馈问题,没有黑frp之说。
Author
Owner

@xirotech commented on GitHub (Oct 9, 2017):

单纯就问题来说 这是一个影响业务持续性的严重问题

不过我好想看到一个拥有上百只肉鸡的黑产老铁现身了。 呵呵呵

<!-- gh-comment-id:335267095 --> @xirotech commented on GitHub (Oct 9, 2017): 单纯就问题来说 这是一个影响业务持续性的严重问题 不过我好想看到一个拥有上百只肉鸡的黑产老铁现身了。 呵呵呵
Author
Owner

@dsf848dfgvs commented on GitHub (Oct 11, 2017):

@fatedier frp确实有这个问题,老早以前就知道了。这个问题估计比较难,不然作者不会到现在也不修复哦。

<!-- gh-comment-id:335810559 --> @dsf848dfgvs commented on GitHub (Oct 11, 2017): @fatedier frp确实有这个问题,老早以前就知道了。这个问题估计比较难,不然作者不会到现在也不修复哦。
Author
Owner

@zhangcunxiang commented on GitHub (Oct 19, 2017):

@dsf848dfgvs 确实是这样,我自己用erlang 撸的 一个 tcp 转发服务也存在这样的问题,莫名其妙连接就假死了,但是双方都认为对方是正常连接着的,之前试过 ngrok 1.7 也存在这个问题,不知道有没有大牛能够指点指点 解决方案

<!-- gh-comment-id:337852552 --> @zhangcunxiang commented on GitHub (Oct 19, 2017): @dsf848dfgvs 确实是这样,我自己用erlang 撸的 一个 tcp 转发服务也存在这样的问题,莫名其妙连接就假死了,但是双方都认为对方是正常连接着的,之前试过 ngrok 1.7 也存在这个问题,不知道有没有大牛能够指点指点 解决方案
Author
Owner

@fatedier commented on GitHub (Oct 19, 2017):

@zhangcunxiang 双方都认为对方是正常的,你们的应用都不加心跳包的?

<!-- gh-comment-id:337853151 --> @fatedier commented on GitHub (Oct 19, 2017): @zhangcunxiang 双方都认为对方是正常的,你们的应用都不加心跳包的?
Author
Owner

@hijk1234 commented on GitHub (Oct 19, 2017):

@fatedier 把frp换成圣剑内网通,其它都不变,就一切正常了。那还不能说明frp tcp方面存在问题吗?

<!-- gh-comment-id:337854302 --> @hijk1234 commented on GitHub (Oct 19, 2017): @fatedier 把frp换成圣剑内网通,其它都不变,就一切正常了。那还不能说明frp tcp方面存在问题吗?
Author
Owner

@fatedier commented on GitHub (Oct 19, 2017):

@hijk1234 你的逻辑有问题,XXXX 和 frp 没有关系,其他项目有的功能 frp 不一定会支持,取决于项目的发展和目的。

客户端和服务端的通信,需要考虑网络环境的各种异常,所以通常我们会在通信协议中加上心跳包,比如 frpc 和 frps 两者的交互,即使没有数据传输,也会定期发送心跳确认服务正常。所以即使你把 frpc 客户端机器上的网线拔了,frps 端也是可以感知到客户端异常。

同理,用户自己的程序也可以自己通过心跳维持服务正常,和中间的代理层没有关系。

<!-- gh-comment-id:337862090 --> @fatedier commented on GitHub (Oct 19, 2017): @hijk1234 你的逻辑有问题,XXXX 和 frp 没有关系,其他项目有的功能 frp 不一定会支持,取决于项目的发展和目的。 客户端和服务端的通信,需要考虑网络环境的各种异常,所以通常我们会在通信协议中加上心跳包,比如 frpc 和 frps 两者的交互,即使没有数据传输,也会定期发送心跳确认服务正常。所以即使你把 frpc 客户端机器上的网线拔了,frps 端也是可以感知到客户端异常。 同理,用户自己的程序也可以自己通过心跳维持服务正常,和中间的代理层没有关系。
Author
Owner

@hijk1234 commented on GitHub (Oct 19, 2017):

@fatedier 不太明白你说的,感觉frp TCP设计的确实有缺陷,说不上来什么问题。还是觉得既然frp 支持tcp模块,还是做的完善一些比较好。

<!-- gh-comment-id:337864397 --> @hijk1234 commented on GitHub (Oct 19, 2017): @fatedier 不太明白你说的,感觉frp TCP设计的确实有缺陷,说不上来什么问题。还是觉得既然frp 支持tcp模块,还是做的完善一些比较好。
Author
Owner

@fatedier commented on GitHub (Oct 19, 2017):

@hijk1234 如果还不明白可以先去阅读一些相关的文章,TCP 协议,网络编程相关的,常见的服务器程序对于各种网络异常问题的处理,然后熟悉了之后再一起讨论讨论,看是哪方面的问题。

从我的角度来看,这个问题是在帮写的不完善的用户程序解决问题,暂时还没有这个计划。

<!-- gh-comment-id:337865529 --> @fatedier commented on GitHub (Oct 19, 2017): @hijk1234 如果还不明白可以先去阅读一些相关的文章,TCP 协议,网络编程相关的,常见的服务器程序对于各种网络异常问题的处理,然后熟悉了之后再一起讨论讨论,看是哪方面的问题。 从我的角度来看,这个问题是在帮写的不完善的用户程序解决问题,暂时还没有这个计划。
Author
Owner

@hulucc commented on GitHub (Oct 12, 2020):

frp用在生产环境也遇到了类似的问题,工作一段时间以后就出现假死,必须重启,每月都会来几次。

<!-- gh-comment-id:707001137 --> @hulucc commented on GitHub (Oct 12, 2020): frp用在生产环境也遇到了类似的问题,工作一段时间以后就出现假死,必须重启,每月都会来几次。
Author
Owner

@Yangxcasear commented on GitHub (Sep 20, 2023):

I also having this issue, and fix it.
I guess this problem may occurs by CMD's default properties.
When u open a .bat to run frp, the apperd cmd window default open "Qucik Edit" function,
and the meaning of "Quick Edit" function is that when your mouse click cmd window , the tasks that running with cmd
windows will be paused, so i suggest to right click running frp's CMD window's top bar , and unchecked "Qucik Edit"
function in it's properties.
Hope it can help you. @fatedier

<!-- gh-comment-id:1727022133 --> @Yangxcasear commented on GitHub (Sep 20, 2023): I also having this issue, and fix it. I guess this problem may occurs by CMD's default properties. When u open a .bat to run frp, the apperd cmd window default open "Qucik Edit" function, and the meaning of "Quick Edit" function is that when your mouse click cmd window , the tasks that running with cmd windows will be paused, so i suggest to right click running frp's CMD window's top bar , and unchecked "Qucik Edit" function in it's properties. Hope it can help you. @fatedier
Author
Owner

@HellowBoy commented on GitHub (Feb 7, 2025):

我是这样解决的,目前测试没问题了。
1、客户端和服务器端关闭端口复用,下面只给出了服务端的配置,客户端也有相应的设置
transport.tcpMux = false
transport.tcpMuxKeepaliveInterval = 60

transport.heartbeatTimeout = 60

2、部分客户端插件注册间隔时间设置为0。如openwrt中

大家可以试试,有用点赞呢

<!-- gh-comment-id:2642080170 --> @HellowBoy commented on GitHub (Feb 7, 2025): 我是这样解决的,目前测试没问题了。 1、客户端和服务器端关闭端口复用,下面只给出了服务端的配置,客户端也有相应的设置 transport.tcpMux = false transport.tcpMuxKeepaliveInterval = 60 transport.heartbeatTimeout = 60 2、部分客户端插件注册间隔时间设置为0。如openwrt中 大家可以试试,有用点赞呢
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#361
No description provided.