在 PVE 上给软路由虚拟机加一个网络 Watchdog
2026-6-14
| 2026-6-14
字数 2065阅读时长 6 分钟
type
Post
status
Published
date
Jun 14, 2026
slug
pve-router-vm-network-watchdog
summary
在 PVE 宿主机上用 Bash 和 systemd timer 实现一个网络 watchdog:先检测公网连通性,连续失败后重启软路由虚拟机,多次自愈无效再升级为重启 PVE 宿主机。
tags
PVE
监控
爱快
ikuai
软路由
Network
Linux
category
技术分享
icon
password
AI summary
Last edited time
Jun 14, 2026 11:38 AM
很多 Homelab 会把软路由跑在 PVE 里的虚拟机上,例如 iKuai、OpenWrt、RouterOS 等。这样做很灵活:网卡直通、快照、备份、迁移都方便。但它也带来一个问题:如果这台“网络出口虚拟机”异常了,整个内网可能都会断网,甚至你连 PVE Web UI 都打不开。
这篇文章记录一个保守的自愈方案:在 PVE 宿主机上运行一个 watchdog,每分钟检测一次外网连通性。如果连续失败,就先重启软路由虚拟机;如果软路由连续自愈多次仍无效,再重启 PVE 宿主机。
注意:下面的 IP、VMID、路径都是示例值。不要把自己的真实公网地址、PVE SSH 别名、真实内网网段写进公开文章或公开仓库。

设计目标

这个 watchdog 的目标不是“网络一断就马上重启”,而是尽量避免误判:
  • 单次 ping 失败只记录状态,不做动作。
  • 连续失败达到阈值后,先恢复软路由虚拟机。
  • 软路由恢复动作有冷却时间,避免反复重启。
  • 连续多次恢复软路由仍失败,才升级为重启 PVE。
  • 所有阈值都放在配置文件里,不写死在脚本里。
  • 只写 systemd journal 日志,不依赖外部通知服务。

判断链路

最小可用检测可以只 ping 一个外网域名:
如果你的环境更复杂,可以同时检测多个目标,例如 DNS、HTTP、上游网关等。本文为了保持脚本简单,只把 www.baidu.com 作为主检测目标,并额外 ping 一下软路由 LAN IP,用于日志诊断。
日志里的含义大致是:
  • 软路由 LAN IP 可达,但外网不可达:更可能是拨号、DNS、运营商或上游出口问题。
  • 软路由 LAN IP 不可达,外网也不可达:更可能是软路由 VM、虚拟网桥、直通网卡或宿主机网络问题。

配置文件

先创建 /etc/default/pve-net-watchdog
如果你还在调试阶段,建议先把 ENABLE_PVE_REBOOT=0,观察几天日志后再打开。

Watchdog 脚本

把下面的脚本保存为 /usr/local/sbin/pve-net-watchdog,并设置为可执行:
授权:

systemd service 和 timer

创建 /etc/systemd/system/pve-net-watchdog.service
创建 /etc/systemd/system/pve-net-watchdog.timer
启用:

验证

先做语法检查:
再做一次 dry-run:
确认 timer 状态:
查看日志:
实时跟踪:
查看状态文件:
正常情况下状态大概是:

触发流程

按上面的配置,完整动作链路是:
  1. 每分钟 ping 一次 www.baidu.com
  1. 连续失败 5 分钟后,恢复软路由虚拟机。
  1. 如果虚拟机已停止,执行 qm start <vmid>
  1. 如果虚拟机正在运行,优先执行 qm reboot <vmid>
  1. 如果软重启失败,再执行 qm reset <vmid>
  1. 每次恢复后等待 10 分钟冷却。
  1. 连续恢复软路由 3 次仍然不通,再等待 5 分钟。
  1. 如果仍然不通,并且 PVE 重启冷却期已过,执行 systemctl reboot
这个流程的关键是“逐级升级”:不要把宿主机重启作为第一动作。

临时停用

如果你要维护网络、升级 PVE、调整虚拟网桥或直通网卡,建议先停掉 timer:
维护完成后再启用:

生产环境建议

自动重启 PVE 是高风险动作,建议至少做三点保护:
  • 初次部署先把 ENABLE_PVE_REBOOT=0,观察几天日志。
  • 确认软路由 VM 能稳定启动,并且设置了开机自启。
  • 如果 PVE 上有备份、迁移、快照、升级任务,脚本里应该额外检查这些任务,避免在关键操作中重启宿主机。
如果你还有另一台常在线设备,例如 NAS、旁路由、树莓派,也可以把外部探针加入判断。由 PVE 自己判断“我是否断网”已经能解决大部分场景,但外部视角更适合判断“整个家庭网络是否真的不可达”。
这套脚本不复杂,真正重要的是阈值和冷却策略。网络自愈系统宁可慢一点,也不要因为一两次临时丢包就把关键设备重启掉。
  • PVE
  • 监控
  • 爱快
  • ikuai
  • 软路由
  • Network
  • Linux
  • Grafana 配置手册命令行自动登录 JumpServer:SSH、TOTP 与密码提示的自动化
    Loading...