OpenWrt 后台密码正确却无法登录问题排查与修复

温馨提醒
总结摘要
OpenWrt 后台密码正确却无法登录?记一次被 Homebox 和网络连接数“坑惨”的排查经历

前言

回到家,突然发现路由器后台又无法登录,提示“无效的用户名/密码”

后台无法登陆

太频繁了,一周已经出现三次了……
想起最近 Nginx 爆出的漏洞,而且自己的路由又开了 ipv6 用于远程访问,顿时心头一紧
于是赶紧尝试登录 SSH ,能正常连接
周一出现问题这个的时候,重启解决了,但总是重启也不是办法,于是开始着手解决这个问题

故障排查

环境如下,设备是作为主路由接入了光猫

  • 硬件型号:FriendlyElec NanoPi R2S
  • 运行内存:1GB
  • 设备环境:OpenWrt (Snapshot 24.10 分支),架构为 Nginx + uWSGI + LuCI,使用 Argon 主题。
  • 关键组件:Docker, Lucky, Passwall, ddns-go, Homebox。

尝试了一下后台 ssh 登陆,登陆成功,排除了用户名和密码错误的情况,于是我做了如下排查:

怀疑浏览器缓存:清理浏览器缓存、无痕模式登陆、清 Cookie 后登录 -> 无效

怀疑存储空间满:df -h 检查 /overlay -> 空间充足

1
df -h  

用户名密码正确却无法登陆

怀疑 luci 或者 Nginx 挂了:清理 luci 缓存、重启 Nginx -> 无效

1
2
3
4
5
6
7
8
# 清除 LuCI 的模块缓存  
rm -rf /tmp/luci-modulecache/*   
# 清除当前所有网页登录会话  
rm -rf /tmp/luci-sessions/*   
# 重启 uwsgi 服务  
/etc/init.d/uwsgi restart   
# 重启 Nginx   
/etc/init.d/nginx restart  

关键线索:RPC 报错

没招了,问了一下谷歌 Gemini Ai,它建议我切换一下主题

1
2
3
4
# 修改配置文件将主题改回 bootstrap   
uci set luci.main.mediaurlbase='/luci-static/bootstrap'  
uci commit luci   
/etc/init.d/uwsgi restart  

切换回 BootStrap 后,刷新进入后台,出现了一个关键报错信息

RPC Error: RPC call to luci/getFeatures failed

BootStrap 主题出现报错线索

原来是 RPC 服务出问题了,于是先重启 rpcd 服务

执行重启命令:

1
2
3
4
# 重启 rpcd 服务  
/etc/init.d/rpcd restart  
# 重启 uwsgi  
/etc/init.d/uwsgi restart  

再次刷新后台,能够登录了!

但是页面一直在加载,无法操作……过两分钟又让我强制登录,且提示密码无效

登陆成功无法加载后台

回到后台,输入 top 命令查看,想看看有哪些服务在运行
一看吓一跳,Homebox 怎么在疯狂吃内存啊,还有 ddns-go 和 netdata
top发现占用高的进程

看来是 Homebox 这几个应用消耗了大量内存,导致系统的 rpcd、uwsgi 这些服务被干掉了概率比较大

于是先把 HomeboxNetdata 这些服务停止

1
2
3
4
5
6
# 停止 Netdata  
/etc/init.d/netdata stop   
# 停止 ddns-go (动态域名)   
/etc/init.d/ddns-go stop  
# 停止 homebox (宽带测试)  
/etc/init.d/homebox stop  

然后清理缓存、重新启动 Rpcduwsgi 服务

1
2
3
4
5
6
7
# 再次清理缓存  
rm -rf /tmp/luci-modulecache/*  
rm -rf /tmp/luci-indexcache  
  
# 重启核心服务  
/etc/init.d/rpcd restart  
/etc/init.d/uwsgi restart  

刷新浏览器……OK,成功登录后台了~
登陆后,把主题改回来测试了两天,关闭了 homebox
顺便修改了 ddns-go 的检测时间,从 5 分钟修改到 1 小时
然后给 ddns-golucky 大吉也升级到了最新版本(用新 bug 打败旧 bug
截止目前,暂时没有问题

避坑总结

一开始以为是浏览器缓存的问题
看来还是 R2s 的机器性能不够,跑个科学,再加上 ddns 、docker……
日常运行内存占用得有 40 ~ 50%,docker 我也没启动
主题可能也会影响,所以性能不够的机器,还是用简单一些主题吧

由于 OpenWrt 的 Argon 主题在登录后会一次性拉取所有信息(温度、流量、DHCP 列表),如果系统此时很忙,rpcd 就会响应不过来。

最后根据 Gemini 的建议,调整了 tcp 一些网络参数(可选)

1
2
3
# 再次执行网络优化 (防止两分钟后断连)  
sysctl -w net.ipv4.tcp_tw_reuse=1  
sysctl -w net.ipv4.tcp_fin_timeout=15  

希望能帮到遇到相同问题的软路由网友,有遇到过相同问题的朋友欢迎评论区交流~
以后得上个运行内存大点的软路由,或者上 x86 了(