💡 故障排查记录:阿里云 fnOS 网络不可达 (Network is Unreachable)

本文档记录了阿里云 fnOS 系统出现 network is unreachable 故障的完整排查与修复过程。

故障现象: 服务器突然断网,无法 ping 通外网。
image.png


1. 发现问题:查看当前路由表

首先排查网络基础配置,检查系统的路由表情况。

ip route

image.png
排查结果: 从路由表可以看出,系统丢失了默认路由(Default Route)。


2. 临时恢复:手动添加默认路由

为了恢复基础网络连通性,手动向网卡 ens5 添加默认网关。

ip route add default via 你的网关 dev ens5

image.png

测试连通性: 添加完成后,测试 ping 阿里云 DNS(223.5.5.5),网络已成功连通。


3. 固化配置:fnOS 界面设置静态 IP

网络临时恢复后,成功登录 fnOS 的 Web 管理页面。为防止网络再次漂移,在页面中将网卡设置为手动(静态 IP)。

0389183aba3d62ac393ab21c62cef7fb.png


4. 故障复发:网络再次中断

运行一段时间后,发现 SSH 终端无响应,网络再次掉线,配置未能彻底固化。

image.png


5. 深入排查:使用 nmcli 彻底重置网卡配置

怀疑是系统底层的 NetworkManager 与 Web 界面的配置未完全同步或存在 DHCP 冲突。决定通过命令行工具 nmcli 强制写入网络配置。

# 1. 强制将网卡设置为纯手动模式,彻底关闭 DHCP 行为
nmcli connection modify "ens5" ipv4.method manual

# 2. 重新写入静态 IP 和网关(请确认之前找出的网关是否为 .253)
nmcli connection modify "ens5" ipv4.addresses 阿里云ip
nmcli connection modify "ens5" ipv4.gateway 阿里云网关
nmcli connection modify "ens5" ipv4.dns "223.5.5.5 114.114.114.114"

# 3. 重新加载并激活配置,使其永久生效
nmcli connection up "ens5"

执行过程与结果如下:
image.png


6. 发现端倪:WireGuard 引起冲突

底层网络恢复后,发现 WireGuard (wg) 始终无法连接,且尝试重启系统后再次断网。 通过检查网络接口,初步判断是 WireGuard 的路由或 DNS 劫持导致了系统网络瘫痪。
162a0056b1553432c2bd9d799c64d219.png


7. 解决冲突:清理 WireGuard 网关

在 fnOS 的网络设置中,删除受 WireGuard 影响产生的异常网关配置,剥离隧道对全局网络的干扰。
7b76311b8a03cf23ae4e1b6e89b66307.png


8. 修复配置:优化 WireGuard 客户端参数

修改 WireGuard 的配置文件,移除强制的全局 DNS 劫持,并增加 Keepalive 防止云服务器防火墙阻断 UDP 状态。

[Interface]
PrivateKey = xxx
Address = 10.44.0.21/32
# ⚠️ 注意:彻底删除或注释掉下面这行,让云服务器继续使用其原生的 DNS(如 223.5.5.5)
# DNS = 10.44.0.1

[Peer]
PublicKey = xxx
# 这里的路由分流保持不变(仅代理内网网段)
AllowedIPs = 192.168.50.0/24, 10.44.0.1/32
Endpoint = xxx:33902
# 💡 强烈建议新增心跳保活机制(每 25 秒发一次握手包)
# 作用:防止阿里云的安全组防火墙因 UDP 长时间无数据而默默阻断隧道
PersistentKeepalive = 25

9. 最终验证:网络全面恢复正常

应用新配置后,WireGuard 隧道正常建立,阿里云服务器外网不再中断。

d02d424581cc160e2cc7bc1d7c5b09a6.png

持续 Ping 测,网络稳定无丢包。


📝 最终总结与故障根因

死循环的根因:

  1. 家里宽带的 公网 IP 发生了变动,导致阿里云上的 WireGuard 客户端突然断线。

  2. 由于 WireGuard 之前的配置强行接管了全局 DNS (DNS = 10.44.0.1),断线后阿里云服务器无法解析任何外部域名。

  3. 系统上不到网 ➡️ 导致连不上新的动态公网 IP 建立 wg 隧道 ➡️ wg 连不上又导致 DNS 无法恢复 ➡️ 继续上不到网,从而形成了死循环。

解决思路: 将 WireGuard 作为纯粹的旁路隧道使用,不劫持云服务器的 DNS,同时加入 PersistentKeepalive 维持 NAT 映射状态,从根本上杜绝了此类断网死循环。