跳转至

断网恢复预案(OpenWrt 旁路由改造 · 前置)

用途:在执行「宿主机切 networkd + 建 br0 网桥」这类网络变更时,若发生失联,按本文件在本地控制台逐步恢复。 存放位置:handover/openwrt_bypass/recovery-plan.md(建议同时存一份到手机/打印) 生效前提:变更前必须先执行第 1 章的备份步骤,否则本预案第 3 章失效。


0. 一句话原则

别慌、别重启、先从 .250(eno2)绕进来;绕不进就在本地控制台还原备份。


1. 事前准备(变更前必须先做,否则预案失效)

# 1) 备份全部 netplan 配置到固定路径(固定路径便于失联时盲敲)
sudo rm -rf /root/net-backup
sudo mkdir -p /root/net-backup
sudo cp -av /etc/netplan/. /root/net-backup/

# 2) 记录变更前状态,恢复时用于对照
sudo ip -br addr   | sudo tee /root/net-backup/state-before.txt
sudo ip route      | sudo tee -a /root/net-backup/state-before.txt
sudo ss -tnp state established 2>/dev/null | sudo tee -a /root/net-backup/state-before.txt

# 3) 确认备份落地
sudo ls -l /root/net-backup/

预期:/root/net-backup/ 下能看到 01-network-manager-all.yaml、50-cloud-init.yaml、99-static-ips.yaml 与 state-before.txt。

变更前状态基线(本次改造前实测,恢复时对照用):

网卡 地址 说明
eno1 192.168.31.249/24 默认路由所在
eno2 192.168.31.250/24 SSH 入口,全程不动
eno3 192.168.31.251/24 备用
默认路由 default via 192.168.31.1 dev eno1

2. 哪些操作会导致失联

操作 失联风险 原因
把 eno1 加入 br0 并迁移 IP 高 默认路由所在口被重建,中间有瞬断
把 netplan 渲染器从 NetworkManager 改为 networkd 中高 NM 撒手、networkd 接管的过程若配置有误,网就没了
误动 eno2 高 你的 SSH 正走 .250
改小米路由 / 关 OpenWrt 低 不影响宿主管路

3. 失联后的时间线(先等,别急着动手)

时间 该做什么
0–2 分钟 什么都别做。若用的是 netplan try,120 秒不确认会自动回滚
2–5 分钟 继续等。变更前挂的 at 定时还原任务会在 5 分钟时自动执行
5 分钟后仍不通 走第 5 章,进本地控制台手工恢复

这两道自动回滚是"双保险"。先给它们机会,别一断就冲去改配置,否则会和自动还原打架。


4. 进本地控制台

你实连宿主很方便,两条路:

  • 图形界面:直接登录 rain,打开终端(Terminal)
  • 文本控制台:Ctrl + Alt + F3 切到 TTY,用 rain 登录;回图形界面用 Ctrl + Alt + F1(或 F2)

登录后第一件事是看状态,不是改配置:

ip -br addr
ip route
sudo netplan --debug get        # 看 netplan 实际生成的配置

5. 分级恢复手段(按顺序尝试,命中即停)

5.1 还原 netplan 备份(首选)

sudo cp -av /root/net-backup/. /etc/netplan/
sudo netplan apply
sleep 3
ip -br addr
ip route | grep default
ping -c2 192.168.31.1

预期:192.168.31.249 回到 eno1,默认路由恢复。

5.2 手工拉临时网络(netplan 也不管用时的兜底)

此方式不改配置文件,纯内存生效,重启即消失;用于先把网络救回来,再从容排查。

# 情况 A:桥没建起来,把 IP 抢回物理口
sudo ip link set eno1 up
sudo ip addr flush dev eno1
sudo ip addr add 192.168.31.249/24 dev eno1
sudo ip route replace default via 192.168.31.1 dev eno1

# 情况 B:桥建起来了但 IP 没配上,把 IP 配到桥上
sudo ip link set br0 up
sudo ip addr flush dev br0
sudo ip addr add 192.168.31.249/24 dev br0
sudo ip route replace default via 192.168.31.1 dev br0

验证:

ping -c2 192.168.31.1
ip -br addr

5.3 渲染器(networkd)回退

若怀疑是"切 networkd"导致的问题:先还原配置文件(renderer 回到 NetworkManager),再 apply。不要反过来先停服务。

sudo cp -av /root/net-backup/. /etc/netplan/
sudo systemctl enable --now NetworkManager
sudo netplan apply
sleep 3
ping -c2 192.168.31.1

若确认要彻底退回原渲染器:

sudo systemctl disable --now systemd-networkd
sudo netplan apply

5.4 从 eno2 绕进来(不碰控制台的办法)

eno2 全程未动,只要它还有链路,就能用 .250 连:

ssh rain@192.168.31.250

注意:这是从 Win/其它设备发起的连接,不是宿主机上执行。


6. 诊断命令(恢复不顺时用)

sudo netplan --debug apply                      # 看 netplan 报错
networkctl status                               # networkd 视角
networkctl list
sudo bridge link show                           # 桥端口状态
ip -br addr && ip route
journalctl -u systemd-networkd -n 50 --no-pager
journalctl -u NetworkManager  -n 50 --no-pager
sudo systemctl status systemd-networkd NetworkManager --no-pager | head -40

7. 恢复确认

ping -c2 192.168.31.1                           # 网关通
ip -br addr show eno1 ; ip -br addr show eno2   # .249 / .250 都在
ip route | grep default                         # 默认路由存在

从 Win 侧再验一次:

ssh rain@192.168.31.250                         # eno2 兜底口通
ssh rain@192.168.31.249                         # 主口通(若已恢复)

8. 严禁动作

❌ 禁止 原因
失联时 sudo reboot 配置是错的,重启只会更糟、且可能连本地控制台都要重来一遍
rm -rf /etc/netplan 备份之外的兜底配置也会丢
失联时顺手改 eno2 那是你唯一的远程退路
不备份就 netplan apply 本预案第 5 章直接失效
在自动回滚窗口内反复改配置 会和 at / netplan try 的还原动作互相打架

9. 一键恢复块(可直接整段粘贴到本地控制台)

# ===== 恢复到变更前状态(幂等,可反复执行)=====
set -x
sudo cp -av /root/net-backup/. /etc/netplan/
sudo netplan apply
sleep 3
ip -br addr
ip route | grep default
ping -c2 192.168.31.1

10. 最坏情况:连本地控制台都进不去

  1. 用 iDRAC 虚拟控制台(192.168.0.120)—— ⚠️ 当前该地址不可达(你的网段在 192.168.31.0/24,iDRAC 在 192.168.0.0/24,不同二层)。改造前若需它兜底,得先想办法恢复对它的访问;
  2. 接显示器键盘直连(你已确认可行);
  3. 进 GRUB 编辑内核参数加 systemd.unit=multi-user.target 或单用户模式 init=/bin/bash,手工把网卡拉起(最后手段,需谨慎)。

来源:/home/rain/Documents/kvm/openwrt_bypass/recovery-plan.md | 最后更新:2026-09-15 01:05(由 build/sync.py 同步,请勿在站点侧修改)