KVM 虚拟网络
type
status
date
slug
summary
tags
category
icon
password
概览
KVM 的虚拟网络相当于物理世界里的交换机/路由器,常见模式有:
- NAT 模式(默认 libvirt 网络) — 虚拟机位于私网,通过宿主机做 NAT 与外网通信。
- 桥接(bridge)模式 — 虚拟机直接接入物理网络,像物理主机一样获得同网段地址。
- 隔离模式(isolated) — 虚拟机互通但无法访问外网/宿主机(用于测试或安全隔离)。
一、虚拟网卡(guest interface)
关键概念
- 虚拟网卡模型(model):常用
virtio(高性能 paravirtualized 驱动)。
- libvirt 提供对 VM 网络接口的动态添加/删除能力(
virsh命令)。
虚拟网卡驱动

常用操作(步骤与示例)
- 添加网卡(临时或持久)
成功提示:
Interface attached successfully。- 查看虚拟机接口
输出列出 Interface, Type, Source, Model, MAC。
- 删除网卡
成功提示:
Interface detached successfully。注意:--persistent 表示重启后仍保留配置;不加则为临时(重启 VM 会丢失)。
二、NAT 模式(libvirt 默认网络)
概念要点
- 虚拟网络视作私网(例如 192.168.122.0/24),宿主机充当网关并对外做 NAT。
- 需要关注:网关地址、路由、SNAT/MASQUERADE、DNAT(端口映射)。
- 若要让外部能访问虚拟机(端口映射),需在宿主机上配置 DNAT/转发规则并开启 IP 转发。
常见配置与命令示例
- 开启 IP 转发(宿主机)
- SNAT / MASQUERADE(通常用于源地址转换,让虚拟机访问外网)
- DNAT(端口映射,外部端口 → 虚拟机:端口)
- 对应的 FORWARD 规则(放行转发)
建议:在现代 RHEL/CentOS/Fedora 上优先使用 firewalld(firewall-cmd --add-forward-port=...)或 nftables,避免直接修改 iptables(除非你熟悉 iptables)。确保 /proc/sys/net/ipv4/ip_forward 为 1。
三、桥接(bridge)模式
概念要点
- 桥接模式使虚拟机像物理主机一样出现在物理网络上,虚拟机可以获得物理网络的 DHCP 或静态地址。
- 宿主机网络配置要点:通常把物理网卡(例如
ens33)“绑定”到 bridge(例如br1),br1承载 IP 配置,而物理接口不再直接有 IP(它作为 bridge 的从接口)。
操作流程与示例(步骤)
- 创建 bridge 并绑定物理接口(libvirt 提供快捷)
输出示例:
Created bridge br1 with attached device ens33,并可用 ip addr show br1 查看 br1 的 IP。- 查看接口状态
br1 会有 IP(例如 192.168.140.200/24),而 ens33 会显示 master br1。- 示例 network-scripts 配置(旧式 ifcfg 文件)
/etc/sysconfig/network-scripts/ifcfg-br1/etc/sysconfig/network-scripts/ifcfg-ens33
桥接场景下宿主机通常应使用稳定的(静态或受控的 DHCP)地址,但关键是在配置桥接时应把 IP 配置放在 bridge 接口(br1)上,而不是物理接口上。另外,并非必须关闭 NetworkManager;若使用 NetworkManager,需用 nmcli 或 NetworkManager 的配置方式创建桥接;若使用 network-scripts,则可能需要禁用 NetworkManager 或调整其配置,避免冲突。
四、隔离模式(简述)
- 阻止虚拟机访问宿主机或外网,仅在虚拟机内部网络中通信。用于安全/测试场景。
- 实现方式:不配置 NAT/路由,或用自定义 libvirt network 并禁用 forward。
五、常见错误与注意事项
- 忘记开启 IP 转发:做 NAT/DNAT 前必须开启
net.ipv4.ip_forward=1,否则流量不会通过宿主机转发。
- iptables 规则被 firewalld 覆盖:在启用
firewalld的系统上直接用iptables命令写规则,可能在重启或 firewalld reload 后丢失。优先使用firewall-cmd或把规则持久化。
- bridge IP 放在物理接口上:错误示范 — 不要给物理接口(ens33)同时配置 IP 再去创建 bridge;正确做法是把 IP 配在
brX上,ens33 作为 bridge 的从接口。
- DNAT 的目标地址需可路由:DNAT 转发到虚拟机前,宿主机的 FORWARD 和虚拟机防火墙必须允许对应端口/地址。
- 使用
virsh iface-bridge的局限:某些发行版/版本中该命令可能不可用或行为不同,建议了解 distro 的网络管理工具(NetworkManager/nmcli、netplan、network-scripts)并按其方式创建 bridge。
- 虚拟化性能优化:使用
virtio驱动可以显著降低网络延迟并提高吞吐。
六、常用命令速查(便于复习)
- 添加接口(持久):
virsh attach-interface <VM> --type network --model virtio --source <network> --persistent- 列出 VM 接口:
virsh domiflist <VM>- 删除接口(持久):
virsh detach-interface <VM> --type network --mac <MAC> --persistent- 创建 bridge(libvirt 快捷):
virsh iface-bridge <physical-dev> <bridge-name>- 查看接口 IP:
ip addr show br1 / ip addr show ens33- 开启内核转发:
sysctl -w net.ipv4.ip_forward=1- DNAT 示例:
iptables -t nat -I PREROUTING -d <host-ip> -p tcp --dport <外部端口> -j DNAT --to-destination <vm-ip>:<vm-port>- SNAT/MASQUERADE 示例:
iptables -t nat -A POSTROUTING -s <vm-subnet> -o <外网接口> -j MASQUERADE七、推荐进阶学习点
- 了解 libvirt network XML(
virsh net-dumpxml default/virsh net-edit)以掌握默认网络配置。
- 学习 firewalld 和 nftables 的端口转发与持久化方式。
- 熟悉 NetworkManager/nmcli、systemd-networkd、netplan 在桥接配置上的差异与实践。
- 研究 SR-IOV、macvtap、ovs(Open vSwitch) 等更高级的虚拟网络选项(用于高性能或复杂网络拓扑)。
Loading...