mirror of
https://github.com/fatedier/frp.git
synced 2026-05-15 08:05:49 -06:00
[GH-ISSUE #3778] login to server failed: session shutdown #3004
Labels
No labels
In Progress
WIP
WaitingForInfo
bug
doc
duplicate
easy
enhancement
future
help wanted
invalid
lifecycle/stale
need-issue-template
need-usage-help
no plan
proposal
pull-request
question
todo
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/frp#3004
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 @qakcn on GitHub (Nov 16, 2023).
Original GitHub issue: https://github.com/fatedier/frp/issues/3778
Bug Description
刚从旧版本更新,服务器端正常启动,甚至旧版本客户端都可以正常连接到服务器端(见下方
frps.log,其中id为63d08845171ca0f4的qakcn-nas相关条目就是还未更新版本的旧版客户端的连接。但是从另一台更新到了新版客户端的机器上却无法连接。
请问问题可能出在哪里?该如何排查?
谢谢!
frpc Version
0.52.3
frps Version
0.52.3
System Architecture
linux/amd64
Configurations
frps.toml:frpc.toml:conf.d/proxies.toml:Logs
frps.log(receive heartbeat已删减):frpc.log:Steps to reproduce
运行
./frpc -c frpc.toml就出错。Affected area
@qakcn commented on GitHub (Nov 16, 2023):
有时客户端日志会出现另一种错误:
@qakcn commented on GitHub (Nov 16, 2023):
给服务器增加
kcpBindPort和在客户端设置transport.protocol="kcp"之后可以使用。但是旧版本使用tcp协议没有问题,不知何解。@Markan325 commented on GitHub (Nov 17, 2023):
我也有同样问题,TCP搭配TLS也是报一样错误,设定TLS_Enable=false就又能连上了,不知道原因为何
同样TCP搭配TLS,退回0.50.0版又没问题了
@superzjg commented on GitHub (Nov 17, 2023):
之前调试时也出现过类似情况,感觉是多次连接断开,导致7000端口没有来得及释放。此时换个端口号重启frps试试。
@qakcn commented on GitHub (Nov 17, 2023):
应该不是。前面说了,旧版客户端可以连上新版服务器,新版客户端就连不上,所以端口应该没有问题。
@superzjg commented on GitHub (Nov 17, 2023):
依据经验,还有一个情况,就是你frps设置的https端口与默认绑定端口号相同,但是没有设置
transport.tls.disableCustomTLSFirstByte = false启用 TLS 连接时,不发送 0x17 特殊字节。默认为 true。当配置为 true 时,无法和 vhostHTTPSPort 端口复用。
@qakcn commented on GitHub (Nov 17, 2023):
我的配置文件在上面贴出来了,没有其他设置。这个服务器也没有http或是https等服务。因为是买的国内服务器没有备案,现在是完全当作内网穿透服务器来用的。目前只用了stcp这一种类型。
话说你这我倒是怀疑,是不是默认TLS导致服务商那边当作HTTPS流量了,但是旧版就没问题,旧版的TLS有所不同吗?我试试。实践证明并不行。我现在倒是可以勉强KCP用一用,但是毕竟现在的运营商都不太喜欢UDP流量,可以的话我还是想搞明白问题在哪儿。新版的客户端和旧版的到底哪里配置不同。
@superzjg commented on GitHub (Nov 17, 2023):
我测试过quic比kcp快,也是udp的
TLS是在v0.50.0改成了默认true的。
目前我路由器上服务器,当设置了https 端口和绑定端口一样,而frpc没有设置 transport.tls.disableCustomTLSFirstByte = false。frpc就会复现 session shutdown 错误。改前者或后者都可以消除。其他情况没有见到。
@qakcn commented on GitHub (Nov 17, 2023):
看来确实是TLS的问题,禁用了之后就好了。不知道是不是服务器没有配置TLS证书的原因。
软件层面没有任何相关日志,要不是看了你和上面那位朋友 @Markan325 的说明,完全不知道是这方面的问题。谢谢你们的帮助。
希望作者能在日志层面对TLS错误有所体现吧。
@superzjg commented on GitHub (Nov 17, 2023):
好吧,可能是某种特定情况下有bug。
禁用TLS也没关系,反正你是用 stcp 模式,配合frpc在每个代理上配置一个
transport.useEncryption = true也是很安全的。@qakcn commented on GitHub (Nov 17, 2023):
应该不是bug,可能是TLS需要配置证书。但是在日志里完全看不出是TLS的问题,这是需要改进的地方。
此issue暂时不关闭吧,希望作者能看到。
最后再次谢谢诸位以及作者!
@xqzr commented on GitHub (Nov 17, 2023):
域名未备案 被 RST。
尝试
serverAddr="<server IP>"或者transport.protocol="quic"526e809bd5/conf/frps_full_example.toml (L15)@github-actions[bot] commented on GitHub (Dec 18, 2023):
Issues go stale after 30d of inactivity. Stale issues rot after an additional 7d of inactivity and eventually close.
@liaorongjian commented on GitHub (May 23, 2024):
这个问题,你们解决了
@1434537427 commented on GitHub (May 25, 2024):
我的情况是这样的:

镜像版本:frpc 0.57.0、同一份配置文件;
过程:在极空间正常运行1个月左右后,突然无法正常启动,报[login to server failed: session shutdown];
测试:在Docker Desktop中启动正常,也能正常代理并访问;
处理:极空间系统版本升级到V1.0.0410090,然后“系统设置”中重启docker服务,就能正常启动frpc,并代理访问了;我推测是“重启docker服务”起的作用,遇到的同学可以先试试。
@Fatalerr commented on GitHub (Jun 3, 2025):
感谢! 我的问题通过将serverAddr的域名改为ip地址后解决。
@gigberg commented on GitHub (Jun 16, 2025):
de690a55c8/conf/frpc_full_example.toml (L100-L102)just add
transport.tls.enable = trueto your frpc.toml configuration, if your frp client's version superior to v0.50.0@RockNHawk commented on GitHub (Oct 28, 2025):
transport.tls.enable = false
this works for me
@Raiscies commented on GitHub (Dec 2, 2025):
transport.tls.serverName = " "将sni置为一个空格可行. 如果将serverName直接置为空串会导致frp客户端默认发送serverAddr的域名. 实际上任意(已备案或暂时不在黑名单上)的串都能绕过RST, 例如baidu.com. 但x.com测试不行.
另外目前不知道在sni填入任意非域名的串是否会导致在未来继续被RST, 这个有待测试.
另外这个逻辑是不是应该改一改呢? 也许将serverName=""的逻辑更改为在TLS握手时不发送SNI更加合适?