virt-manager配置NAT

发布于:2025-04-09 ⋅ 阅读:(34) ⋅ 点赞:(0)

在 ‌virt-manager‌ 中配置 NAT 模式,可以通过以下步骤完成。NAT(Network Address Translation)模式允许虚拟机通过宿主机的网络连接访问外部网络,同时对外隐藏虚拟机的真实 IP 地址。以下是具体操作步骤:


步骤 1:确认默认 NAT 网络是否存在

KVM 默认会创建一个名为 default 的 NAT 网络(使用 virbr0 网桥)。首先检查该网络是否已启用:

virsh net-list --all

如果输出中包含 default 且状态为 ‌active‌,则已启用。否则,启动默认网络:

virsh net-start default virsh net-autostart default # 设置开机自启


步骤 2:为虚拟机配置 NAT 网络

  1. 打开 virt-manager

    virt-manager

  2. 创建或编辑虚拟机

    • 新建虚拟机时,在 ‌网络选择‌ 步骤中,选择 ‌Virtual network 'default': NAT‌。
    • 对已存在的虚拟机,右键选择 ‌Edit‌ -> ‌Virtual Hardware‌ -> ‌NIC‌,设置如下:
      • Network source‌: default(或自定义的 NAT 网络)
      • Device model‌: 默认选择 virtio(高性能驱动)。

 

1. 检查 libvirt 服务状态

确保 libvirtd 服务已运行:

sudo systemctl status libvirtd

若未启动,执行:

sudo systemctl start libvirtd sudo systemctl enable libvirtd # 设置开机自启

2. 验证默认网络定义

查看 /etc/libvirt/qemu/networks/ 目录下是否存在 default.xml

sudo ls /etc/libvirt/qemu/networks/default.xml

若文件丢失,需手动创建或从模板恢复‌。

3. 重新定义默认网络

若网络定义损坏,需删除并重新定义:

# 删除残留配置 sudo virsh net-undefine default # 重新定义默认网络(使用标准 NAT 配置) sudo virsh net-define /usr/share/libvirt/networks/default.xml sudo virsh net-autostart default # 设置自动启动 sudo virsh net-start default

步骤 1:检查宿主机的默认路由

启动虚拟机后,宿主机默认网关可能被错误指向 virbr0(NAT 网桥)。执行以下命令查看路由表:

ip route show default

正常情况应指向宿主机物理网卡(如 eth0wlan0)。若显示类似:

default via 192.168.1.1 dev eth0

若默认路由指向 virbr0(如 192.168.122.1),需手动修复:

sudo ip route del default via 192.168.122.1 sudo ip route add default via [原网关IP] dev [物理网卡名]


步骤 2:排查防火墙规则(关键)

libvirt 默认会修改 iptables/nftables 规则,可能导致宿主机流量被错误拦截。

检查 NAT 规则

sudo iptables -t nat -L -n -v

重点观察 POSTROUTING 链,应有如下规则:

Chain POSTROUTING (允许物理网卡出口流量伪装) MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24

若缺失该规则,手动添加:

sudo iptables -t nat -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE

恢复宿主机的 FORWARD 策略

若 FORWARD 链默认策略为 DROP,需允许转发:

sudo iptables -I FORWARD 1 -i virbr0 -j ACCEPT sudo iptables -I FORWARD 1 -o virbr0 -j ACCEP