libvirt折腾笔记

xeonds

2026-03-14 08:09

背景

最近在使用virt-manager创建KVM虚拟机时,遇到了一个让人头疼的问题:虚拟机使用默认的NAT网络模式,却无法访问外网,宿主机也无法正常访问虚拟机,但是虚拟机可以访问宿主机。

问题现象

原因分析

经过排查,发现问题出在Docker与libvirt的防火墙规则冲突上。

解决方案

最直接有效的方法是将libvirt的防火墙后端强制切换为iptables,让libvirt和Docker使用同一套规则管理工具,避免冲突。

步骤

  1. 编辑libvirt网络配置文件(如不存在则新建):

    sudo nano /etc/libvirt/network.conf
  2. 添加以下配置

    firewall_backend = "iptables"
  3. 重启libvirtd服务

    sudo systemctl restart libvirtd
  4. 验证修复

验证结果

切换后端后,iptables规则恢复如下(部分):

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
LIBVIRT_FORWARD  all  --  anywhere             anywhere
...
Chain LIBVIRT_FORWARD (1 references)
target     prot opt source               destination
ACCEPT     all  --  192.168.122.0/24     anywhere
ACCEPT     all  --  anywhere             192.168.122.0/24

FORWARD链策略变回ACCEPT,LIBVIRT规则出现,虚拟机网络恢复正常。


网络这块还是得学啊。