1. 故障背景
在公网独立服务器上运行 PVE 8.x,如果虚拟机内有 飞牛OS/fnOS、qBittorrent、OPNsense 等高并发网络应用,宿主机可能会突然断网离线。
- 现象:PING 不通,SSH 断开。
- 诊断报错:在
journalctl或系统日志中发现:nf_conntrack: table full, dropping packet甚至伴随e1000e: Detected Hardware Unit Hang。
2. 方案 A:解决物理网卡假死 (Intel 82579V/e1000e)
老款 Intel 网卡的硬件卸载功能与 PVE 虚拟网桥存在兼容性 Bug。最稳妥的办法是关闭它。
操作: 编辑 /etc/network/interfaces,在物理网卡(如 eno1)下添加:
auto eno1
iface eno1 inet manual
# 彻底关闭硬件加速,杜绝网卡驱动崩溃
post-up /usr/sbin/ethtool -K eno1 tso off gso off gro off
3. 方案 B:通过 Web UI 解决连接表爆满 (推荐做法)
不需要手动修改底层 /etc/sysctl.conf,直接通过 PVE 官方界面修改,既安全又防冲突。
步骤:
- 进入路径:选中 节点 (Node) → Firewall → Options。
- 提升上限:找到
nf_conntrack_max,修改为1048576(100万)。 - 加速回收:找到
nf_conntrack_tcp_timeout_established,修改为7875(这是 GUI 允许的最小值)。
- 注:默认值是 5 天,改为 2 小时后能极大释放内存账本。
- 放宽过滤:将
TCP flags filter设置为No。
4. 验证命令
修改完成后,在宿主机 Shell 执行以下命令,确认设置是否真的生效(内核不会撒谎):
# 确认网卡状态 (应全为 off)
ethtool -k eno1 | grep -E "segmentation|receive-offload"
# 确认连接数上限
cat /proc/sys/net/netfilter/nf_conntrack_max
# 确认超时回收时间
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
5. 总结
- 原理:第一步修好了“路”(网卡),第二步扩建了“收费站账本”(连接表)。