【HfSrJun】 在 https://github.com/istoreos/istoreos/issues/2381 发布:
在之前的issue #2011 中我提到过我的内网在通过特定路径访问时存在性能问题,在近期问题复现,并且我找到了问题的大概所在。
网络拓扑大概如下:光猫连接路由器(192.168.1.1)拨号,路由器上运行dockers容器。通过域名访问内网的webui(有些在路由器docker内,有些在其他设备)会先进入路由器的nginx容器,再根据子域名反代到内网ip+端口。
旧的问题总结就是,在内网,走nginx容器反代访问webui会很卡(建立连接的耗时久),直接用内网ip访问没问题。将nginx容器从bridge网络改到host网络则问题解决,或者nginx转发到容器IP(172.17.0.x)而非内网ip(192.168.1.1)也可以解决。可以看出问题出现在路由器的LAN→Docker的转发。
近期网络出现新的问题:我在内网设备上挂了大量的磁力下载(大约2000个磁链),制造了大量的链接。随着挂下载的时间推移问题会加重,不挂下载则不会出现问题(或者说问题发展缓慢),重启路由器问题就会还原。
问题表现为:路由器LAN→Docker的路径访问十分缓慢,且不同设备的表现不同。经过tcpdump抓包,发现在请求方发起第一次握手后,主机的第二次握手要延迟很久才回复。
“不同设备表现不同”具体而言,是不同ip的表现不同,而且联网时间越久的ip状态越差。将联网很久,访问变缓慢的电脑更改ip,访问速度显著提升。此时将另一台刚刚联网,访问很快的电脑改成刚才的ip,速度明显下降。
经过总结以及AI的分析,问题很可能出现在iptable或者nftable上。