[GH-ISSUE #2063] frpc 在网络切换时,未即时刷新域名解析服务器,导致无限重连 #1641

Closed
opened 2026-05-05 13:02:57 -06:00 by gitea-mirror · 2 comments
Owner

Originally created by @wangzexi on GitHub (Nov 7, 2020).
Original GitHub issue: https://github.com/fatedier/frp/issues/2063

我现在连接在 无线网甲 (192.168.43.1)

此时该 无线网甲 路由器关闭,操作系统自动切换至 无线网乙 (192.168.2.1)

frpc 发现断开,开始重连,但 frpc 仍然使用先前的 无线网甲 的网关地址作为 DNS 去解析 frps 服务器域名。

192.168.43.1/24192.168.2.1/24 不在同一网络内,导致 frps 域名无法解析,进入无限重连状态。

经测试,手动重启 frpc 容器即可恢复连接。

frpc:0.34.1
系统:Armbian 20.08.1 Orangepizero buster current 5.8.5
Docker 镜像:snowdreamtech/frpc

docker run --restart=always --network host -d -v /root/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc
2020/11/07 07:11:34 [I] [service.go:288] [28c857c5f2d9878c] login to server success, get run id [28c857c5f2d9878c], server udp port [0]
2020/11/07 07:11:34 [I] [proxy_manager.go:144] [28c857c5f2d9878c] proxy added: [orangepi-ssh orangepi-socks5]
2020/11/07 07:11:34 [I] [control.go:180] [28c857c5f2d9878c] [orangepi-ssh] start proxy success
2020/11/07 07:11:34 [I] [control.go:180] [28c857c5f2d9878c] [orangepi-socks5] start proxy success
2020/11/07 07:16:04 [E] [control.go:158] [28c857c5f2d9878c] work connection closed before response StartWorkConn message: EOF
2020/11/07 07:16:04 [I] [control.go:276] [28c857c5f2d9878c] control writer is closing
2020/11/07 07:16:04 [I] [service.go:174] [28c857c5f2d9878c] try to reconnect to server...
2020/11/07 07:16:04 [I] [visitor_manager.go:60] [28c857c5f2d9878c] gracefully shutdown visitor manager
2020/11/07 07:16:14 [W] [service.go:177] [28c857c5f2d9878c] reconnect to server error: dial tcp: lookup frp.example.com on 192.168.43.1:53: read udp 192.168.43.202:48472->192.168.43.1:53: i/o timeout
2020/11/07 07:16:15 [I] [service.go:174] [28c857c5f2d9878c] try to reconnect to server...
2020/11/07 07:16:15 [W] [service.go:177] [28c857c5f2d9878c] reconnect to server error: dial tcp: lookup frp.example.com on 192.168.43.1:53: dial udp 192.168.43.1:53: connect: network is unreachable
2020/11/07 07:16:17 [I] [service.go:174] [28c857c5f2d9878c] try to reconnect to server...
2020/11/07 07:16:27 [W] [service.go:177] [28c857c5f2d9878c] reconnect to server error: dial tcp: lookup frp.example.com on 192.168.43.1:53: read udp 192.168.2.238:35677->192.168.43.1:53: i/o timeout
2020/11/07 07:16:31 [I] [service.go:174] [28c857c5f2d9878c] try to reconnect to server...
2020/11/07 07:16:41 [W] [service.go:177] [28c857c5f2d9878c] reconnect to server error: dial tcp: lookup frp.example.com on 192.168.43.1:53: read udp 192.168.2.238:59648->192.168.43.1:53: i/o timeout
2020/11/07 07:16:49 [I] [service.go:174] [28c857c5f2d9878c] try to reconnect to server...
2020/11/07 07:16:59 [W] [service.go:177] [28c857c5f2d9878c] reconnect to server error: dial tcp: lookup frp.example.com on 192.168.43.1:53: read udp 192.168.2.238:36312->192.168.43.1:53: i/o timeout
......
Originally created by @wangzexi on GitHub (Nov 7, 2020). Original GitHub issue: https://github.com/fatedier/frp/issues/2063 我现在连接在 `无线网甲 (192.168.43.1)` 。 此时该 `无线网甲` 路由器关闭,操作系统自动切换至 `无线网乙 (192.168.2.1)`。 `frpc` 发现断开,开始重连,但 `frpc` 仍然使用先前的 `无线网甲` 的网关地址作为 DNS 去解析 `frps` 服务器域名。 而 `192.168.43.1/24` 与 `192.168.2.1/24` 不在同一网络内,导致 `frps` 域名无法解析,进入无限重连状态。 经测试,手动重启 `frpc` 容器即可恢复连接。 frpc:0.34.1 系统:Armbian 20.08.1 Orangepizero buster current 5.8.5 Docker 镜像:snowdreamtech/frpc ``` docker run --restart=always --network host -d -v /root/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc ``` ``` 2020/11/07 07:11:34 [I] [service.go:288] [28c857c5f2d9878c] login to server success, get run id [28c857c5f2d9878c], server udp port [0] 2020/11/07 07:11:34 [I] [proxy_manager.go:144] [28c857c5f2d9878c] proxy added: [orangepi-ssh orangepi-socks5] 2020/11/07 07:11:34 [I] [control.go:180] [28c857c5f2d9878c] [orangepi-ssh] start proxy success 2020/11/07 07:11:34 [I] [control.go:180] [28c857c5f2d9878c] [orangepi-socks5] start proxy success 2020/11/07 07:16:04 [E] [control.go:158] [28c857c5f2d9878c] work connection closed before response StartWorkConn message: EOF 2020/11/07 07:16:04 [I] [control.go:276] [28c857c5f2d9878c] control writer is closing 2020/11/07 07:16:04 [I] [service.go:174] [28c857c5f2d9878c] try to reconnect to server... 2020/11/07 07:16:04 [I] [visitor_manager.go:60] [28c857c5f2d9878c] gracefully shutdown visitor manager 2020/11/07 07:16:14 [W] [service.go:177] [28c857c5f2d9878c] reconnect to server error: dial tcp: lookup frp.example.com on 192.168.43.1:53: read udp 192.168.43.202:48472->192.168.43.1:53: i/o timeout 2020/11/07 07:16:15 [I] [service.go:174] [28c857c5f2d9878c] try to reconnect to server... 2020/11/07 07:16:15 [W] [service.go:177] [28c857c5f2d9878c] reconnect to server error: dial tcp: lookup frp.example.com on 192.168.43.1:53: dial udp 192.168.43.1:53: connect: network is unreachable 2020/11/07 07:16:17 [I] [service.go:174] [28c857c5f2d9878c] try to reconnect to server... 2020/11/07 07:16:27 [W] [service.go:177] [28c857c5f2d9878c] reconnect to server error: dial tcp: lookup frp.example.com on 192.168.43.1:53: read udp 192.168.2.238:35677->192.168.43.1:53: i/o timeout 2020/11/07 07:16:31 [I] [service.go:174] [28c857c5f2d9878c] try to reconnect to server... 2020/11/07 07:16:41 [W] [service.go:177] [28c857c5f2d9878c] reconnect to server error: dial tcp: lookup frp.example.com on 192.168.43.1:53: read udp 192.168.2.238:59648->192.168.43.1:53: i/o timeout 2020/11/07 07:16:49 [I] [service.go:174] [28c857c5f2d9878c] try to reconnect to server... 2020/11/07 07:16:59 [W] [service.go:177] [28c857c5f2d9878c] reconnect to server error: dial tcp: lookup frp.example.com on 192.168.43.1:53: read udp 192.168.2.238:36312->192.168.43.1:53: i/o timeout ...... ```
Author
Owner

@Becods commented on GitHub (Nov 7, 2020):

既然重启就能解决的事情

那么就写一个插件/脚本来解决它吧

主机层的网络切换应该不会通知到容器层,容器层应该只会感知到无法连接到互联网

不知你的docker设置的是桥接还是直连,我还是建议指定dns服务器,改改dockerfile的事情

frp 自身的核心代码不会再引入过多的这一类的能力,而是更多的以框架的形式来提供基础能力,通过插件来完善整体生态和满足部分用户的定制化需求

从我个人的角度而言,这个阶段不太希望引入各种琐碎的 feature,很容易让项目成为一个大杂烩,既提高开发者的维护成本,也增加了用户的使用成本。最终某些功能可能只有几个人使用,甚至没有人用,但是持续的维护却需要耗费很多精力。

所以,目前可能更多的是希望做减法,专注核心能力,做一些重构。之后能通过插件的方式开放更多的扩展能力出来,可以由有需求的人来完善。

<!-- gh-comment-id:723438369 --> @Becods commented on GitHub (Nov 7, 2020): 既然重启就能解决的事情 那么就写一个插件/脚本来解决它吧 主机层的网络切换应该不会通知到容器层,容器层应该只会感知到无法连接到互联网 不知你的docker设置的是桥接还是直连,我还是建议指定dns服务器,改改dockerfile的事情 >frp 自身的核心代码不会再引入过多的这一类的能力,而是更多的以框架的形式来提供基础能力,通过插件来完善整体生态和满足部分用户的定制化需求 >从我个人的角度而言,这个阶段不太希望引入各种琐碎的 feature,很容易让项目成为一个大杂烩,既提高开发者的维护成本,也增加了用户的使用成本。最终某些功能可能只有几个人使用,甚至没有人用,但是持续的维护却需要耗费很多精力。 >所以,目前可能更多的是希望做减法,专注核心能力,做一些重构。之后能通过插件的方式开放更多的扩展能力出来,可以由有需求的人来完善。
Author
Owner

@fatedier commented on GitHub (Nov 8, 2020):

Maybe it's caused by docker. SSH to your docker container to see what's the content of /etc/resolv.conf.

<!-- gh-comment-id:723525325 --> @fatedier commented on GitHub (Nov 8, 2020): Maybe it's caused by docker. SSH to your docker container to see what's the content of `/etc/resolv.conf`.
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#1641
No description provided.