首页/云/云平台与虚拟化速查/libvirt 默认 NAT 网络
虚拟化基础63 条

libvirt 默认 NAT 网络

libvirt 安装后自带 default 网络:宿主上的 virbr0 充当网关,dnsmasq 提供 DHCP 与 DNS,虚机通过 NAT 出网;该网络并非在所有发行版上都默认启动。

云平台与虚拟化速查云更新于 2026-10-13

default 网络是什么

libvirt 安装后会自带一个名为 default 的 NAT 网络:宿主侧创建 virbr0 网桥,由 dnsmasq 提供 DHCP 与 DNS,虚机从 192.168.122.0/24 取地址,再通过宿主的地址转换访问外网。它适合本机实验与开发,不适合需要被外部网络直接访问、或需要与其他主机处在同一网段的场景。

基本信息

默认网段192.168.122.0/24
宿主接口virbr0
服务dnsmasq 提供 DHCP 与 DNS
管理命令virsh net-list --all / net-start / net-autostart
外部访问默认不可直连,需要端口转发或改用桥接网络

典型使用场景

  • 本机快速拉起实验虚机,不关心外部访问
  • 开发环境里虚机只需要出网下载依赖
  • 临时验证 cloud-init、镜像启动流程
  • 用端口转发把虚机内服务暴露到宿主端口供本机访问
  • 生产或集群场景改用网桥(bridge)或 OVS 网络

启用并查看租约

启用并查看租约
sudo virsh net-list --all            # inactive 表示网络未启动
sudo virsh net-start default          # 启动 default 网络
sudo virsh net-autostart default      # 宿主开机自动启动,避免重启后虚机断网
virsh net-dhcp-leases default         # 查看已分配的租约与 MAC 对应关系
ip -br addr show virbr0               # 确认网桥地址是否为 192.168.122.1
virsh net-dumpxml default             # 查看 DHCP 范围与转发模式的完整定义

默认值速查

对象默认值说明
网段192.168.122.0/24与宿主物理网段重叠会导致路由混乱
宿主网桥virbr0由 libvirt 自动创建与管理
DHCP/DNSdnsmasq由 libvirt 托管独立实例
转发模式NAT虚机可出网,外部无法主动连入
宿主网关192.168.122.1虚机的默认网关即此地址
default 网络的 DHCP 由 libvirt 管理的 dnsmasq 实例提供,宿主上再运行一套同网段的 dnsmasq 会与它冲突,表现为虚机拿到非预期地址或干脆拿不到地址。
修改网络定义建议用 virsh net-edit,改完执行 net-destroy 加 net-start 生效;直接编辑文件而不重载不会生效。

排错顺序

  • 先确认网络是否 active:virsh net-list --all 看状态
  • 再看虚机网卡是否绑定到该网络:virsh domiflist <vm>
  • 然后在虚机内检查是否拿到 192.168.122.x 地址与网关
  • 最后检查宿主转发与防火墙规则是否放行,宿主上 net.ipv4.ip_forward 必须为 1
NAT 模式下虚机出网依赖宿主的转发与伪装规则,libvirt 会自动写入相应规则;如果宿主上手工清空过 iptables/nftables 规则,重启 libvirtd 或重建网络可恢复默认规则。

易错点

  • default 网络未 autostart,宿主重启后虚机网络需要手工拉起
  • 宿主上再搭一套同网段 dnsmasq,DHCP 行为冲突
  • 虚机用 default 网络却期望外部直接访问,NAT 语义决定了必须做端口转发
  • 网段与宿主物理网段重叠,虚机访问同名地址时路由与预期不符

数据来源与参考

  • libvirt 文档:Virtual Networking
  • libvirt wiki:Networking
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌