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 状态:
查看日志:
实时跟踪:
查看状态文件:
正常情况下状态大概是:
触发流程
按上面的配置,完整动作链路是:
- 每分钟 ping 一次
www.baidu.com。
- 连续失败 5 分钟后,恢复软路由虚拟机。
- 如果虚拟机已停止,执行
qm start <vmid>。
- 如果虚拟机正在运行,优先执行
qm reboot <vmid>。
- 如果软重启失败,再执行
qm reset <vmid>。
- 每次恢复后等待 10 分钟冷却。
- 连续恢复软路由 3 次仍然不通,再等待 5 分钟。
- 如果仍然不通,并且 PVE 重启冷却期已过,执行
systemctl reboot。
这个流程的关键是“逐级升级”:不要把宿主机重启作为第一动作。
临时停用
如果你要维护网络、升级 PVE、调整虚拟网桥或直通网卡,建议先停掉 timer:
维护完成后再启用:
生产环境建议
自动重启 PVE 是高风险动作,建议至少做三点保护:
- 初次部署先把
ENABLE_PVE_REBOOT=0,观察几天日志。
- 确认软路由 VM 能稳定启动,并且设置了开机自启。
- 如果 PVE 上有备份、迁移、快照、升级任务,脚本里应该额外检查这些任务,避免在关键操作中重启宿主机。
如果你还有另一台常在线设备,例如 NAS、旁路由、树莓派,也可以把外部探针加入判断。由 PVE 自己判断“我是否断网”已经能解决大部分场景,但外部视角更适合判断“整个家庭网络是否真的不可达”。
这套脚本不复杂,真正重要的是阈值和冷却策略。网络自愈系统宁可慢一点,也不要因为一两次临时丢包就把关键设备重启掉。