背景介绍
Home Server是部署在家里的主机,通过网线连接入家庭网络,目前运行着包括影音、相册备份等一系列服务。
- Home Server:一台去年初装好的主机,本次事件发生前系统版本为Unraid 7.1.0。在系统升级至7.1.4进行重新启动后,出现本次问题。
- 家庭网络:图方便购买的一套Netgear Orbi系列Mesh路由,主机型号为RBR750,分身(卫星)型号为RBS750。所有设备的 IP 地址在
10.0.0.0/24
网段内。
事件介绍
2025年6月29日晚,考虑到之前从6.x版本升级到7.1.0版本出现了诸多问题,选择继续升级Unraid系统至7.1.4,系统更新完毕后,主机进行了重启。重启后出现一系列网络问题:
- AutoBangumi报错无法正常通过本机的v2raya连接到mikan,检查v2raya后排除了代理的问题。
- 尝试进入Unraid面板,发现能够进入但连接并不稳定。
- 试图通过ssh进入CLI,同样是能够进入但连接非常容易断开。
- 直接ping Home Server的IP,发现开始反馈host is down。
- 靠近Home Server所在卫星,使笔记本连上该卫星后访问变得稳定。
问题排查
上述现象简单分析,应当属于局域网卫星之间互联不稳定的问题。
思考Home Server的网络配置,回忆起当初配置时直接在Unraid面板指定了静态IP(10.0.0.10
),而没有在网关中做额外配置。进入网关页面,发现设备列表中没有Home Server。
此时问题就明确了:Orbi Mesh系统在不同卫星之间转发本地有线设备时,出现了路由/ARP学习失败或隔离行为,而我的Home Server使用了静态 IP 且未经过DHCP的MAC地址注册,导致路由器不认识设备。
问题解决
解决方案也比较明确:只需要让路由器为该设备保留静态IP,使路由器正确识别设备,即可解决问题。
这里以网件自带的网关页面为例,介绍如何操作:
临时修改设备网络为DHCP
为了使路由器能识别到Home Server,首先需要临时将设备的网络策略改为DHCP。
进入Unraid面板,找到设置
=>网络设置
,停止docker服务后即可修改IPv4地址分配
为自动。
设置IPv4地址分配
预留设备IP
现在进入网关页面,在设备列表中根据MAC地址找到设备:
根据MAC地址确认设备
确认到设备IP后,进入高级
=>局域网设置
,在地址保留功能中添加设备:
地址保留
设置好IP地址与设备名后,点击添加,路由器将默认把设备设置为固定IP(10.0.0.10
)。
此时可以回到Unraid面板,将IPv4地址重新改为静态IP。当然现在进行过地址保留后,正常情况下路由器都会将10.0.0.10
地址分配给Home Server,这一步也并非必要了。
番外
重新配置Home Server保留后,发现sshd功能挂掉了,进入终端尝试/usr/sbin/sshd -d
,发现如下报错:
text复制代码
1debug1: sshd version OpenSSH_10.0, OpenSSL 3.5.0 8 Apr 2025 2debug1: private host key #0: ssh-rsa SHA256:... 3debug1: private host key #1: ecdsa-sha2-nistp256 SHA256:... 4debug1: private host key #2: ssh-ed25519 SHA256:... 5debug1: rexec_argv[1]='-d' 6debug1: Set /proc/self/oom_score_adj from 0 to -1000 7debug1: Bind to port 22 on 240e:...:70. 8Bind to port 22 on 240e:...:70 failed: Cannot assign requested address. 9debug1: Bind to port 22 on 10.0.0.55. 10Bind to port 22 on 10.0.0.55 failed: Cannot assign requested address. 11Cannot bind any address.
发现sshd仍然试图绑定IP地址到10.0.0.55
,这是此前临时修改为DHCP时路由器分配给设备的IP地址。
解决方案是编辑/etc/ssh/sshd_config
,找到ListenAddress
,修改为:
nginx复制代码
1ListenAddress 0.0.0.0
可能是以前没有显式指定监听IP,导致sshd试图监听到之前分配的IP失败☹️
保存退出,重新启动sshd
:
bash复制代码
1/etc/rc.d/rc.sshd stop; 2/etc/rc.d/rc.sshd start;
确认服务启动成功,问题解决。