设备环境:物理机 局域网 0.9.35
BUG现象:备份失败通知显示sftp用户名密码错误
出现频率:必现
日志文件:日志未显示相关问题
详细信息:经过AI辅助诊断,局域网路由器及目标设备的设置都没有问题。问题出现在iNAS 的操作系统存在一个持久的、损坏的内核级路由。这个 "卡住" 的路由在暗中阻止了所有发往 192.168.0.8 的流量。NetworkManager 在每次启动或网络重启时都会重新加载这个损坏的配置。以下为详细测试过程及结论:
故障排除报告:iNAS SSH "No route to host"
初始问题
从 iNAS (192.168.0.55) SSH 到树莓派 (192.168.0.8) 失败,并显示 ssh: ... No route to host 错误。
诊断步骤
- 初始 Ping:
sudo ping -c 4 192.168.0.8 失败,显示 Destination Host Unreachable,表明可能存在本地网络问题。
- 隔离网络: 拔掉 iNAS 的网线后,将问题定位到 Wi-Fi 接口 (
wlp2s0)。
- 排除路由器问题: 确认路由器上的 "AP 隔离" (AP Isolation) 功能已禁用。
- 排除目标设备问题: 确认其他 Wi-Fi 设备可以连接到树莓派。
- 排除 iNAS 防火墙问题:
iptables -L -n 和 ufw status 命令确认 iNAS 上没有活动的防火墙。
- 排除 iNAS 路由问题:
ip route 和 ip rule list 命令显示路由表和路由策略均正确。
- 识别核心矛盾:
ip route get 192.168.0.8 命令显示内核知道正确的路由 (dev wlp2s0 src 192.168.0.55 ...),但却对应用程序"撒谎"了。
- 确认持久性:
sudo reboot 重启未能解决问题,证明损坏状态是持久性的,并在启动时重新加载。
最终结论
iNAS 的操作系统存在一个持久的、损坏的内核级路由。这个 "卡住" 的路由在暗中阻止了所有发往 192.168.0.8 的流量。NetworkManager 在每次启动或网络重启时都会重新加载这个损坏的配置。
最终解决方案
1. 手动修复命令
一个三步命令,用于清除错误路由并恢复正确路由。由于第一步会导致用户断开连接,因此该命令被链接在一起以便在远程终端上运行。
sudo ip route del 192.168.0.0/24; sudo ping -c 1 192.168.0.8; sudo ip route add 192.168.0.0/24 dev wlp2s0 proto kernel scope link src 192.168.0.55 metric 600
2. 永久自动修复
创建了一个调度程序脚本 (dispatcher script),以便在 Wi-Fi 每次连接时自动运行这个三步修复命令。
文件:/etc/NetworkManager/dispatcher.d/99-fix-stuck-route.sh
权限:sudo chmod +x /etc/NetworkManager/dispatcher.d/99-fix-stuck-route.sh
脚本内容:
#!/bin/bash
# $1 是接口 (interface), $2 是动作 (action)
if [ "$1" = "wlp2s0" ] && [ "$2" = "up" ]; then
# 等待 5 秒钟让一切稳定下来
sleep 5
# 运行三步刷新命令,使用完整路径
/usr/bin/ip route del 192.168.0.0/24
ping -c 1 192.168.0.8
/usr/bin/ip route add 192.168.0.0/24 dev wlp2s0 proto kernel scope link src 192.168.0.55 metric 600
fi