记一次frp的被阻断的问题

配置frp客户端的过程中总是出现下面的一句话:

2021/09/23 02:51:20 [W] [service.go:104] login to server failed: EOF
EOF

解决

防火墙应该是探测到了某些特征流量而触发了规则,导致frp认证的包被重置,于是服务端frp关闭了链接,而翻开源码,我们能看到再发送完认证信息后执行了ReadMsgInto方法,因为连接已经关闭,所以我们就得到了EOF错误!
回头再看wireshark的RST包之前的三个IRC包,等等,IRC是什么鬼?在FRP源代码中根本搜不到这个关键字啊!从源代码的登录逻辑来看,基本都是TCP的操作。于是再试着抓一次包,IRC又变回了TCP,看来wireshark也有误报的情况发生。
究其原因,很有可能是这一段明文数据暴露了frp,然后导致被防火墙封杀。

那么如何解决login to server failed: EOF的问题呢?

其实看了源代码就知道了,原来frp在v0.25.0版本后增加了一个客户端选项,支持了tls传输,也就是传说中的非对称加密,原来在frps初始化服务时,在内存中已经为我们生成了一个简易的TLS服务,简直完美!

开启的办法很简单,在服务端和客户端原来的[common]配置中加入tls_enable = true即可!

注意:服务端和客户端都要配置!

另一种解决办法

其实嘛,还有一种解决办法,但是不一定能行,而且可能会带来一些问题!

什么方法呢?既然防火墙检测了我的tcp,那我换成udp行不行?

frp支持使用kcp作为底层的通讯协议,而kcp默认就是基于udp协议,废话不多说,赶紧试一试!

步骤(假设kcp的端口为7000):

在服务端原来的[common]配置中加入kcp_bind_port = 7000,使其支持udp
在客户端原来的[common]处加入protocol = kcp即可,注意端口一定要对上!

上一篇
下一篇