【Day 82】虚拟化-虚拟网络
一、虚拟网卡
1、虚拟网卡驱动
| 驱动类型 | 虚拟化方式 | 核心特性 | 性能 | 适用场景 | 特殊要求 |
|---|---|---|---|---|---|
| rtl8139 | 全虚拟化 | 模拟 Realtek RTL8139 硬件,完全兼容物理网卡行为 | 较差(模拟开销大) | 老旧系统(如 Windows XP、早期 Linux)、兼容性优先场景 | 无(系统自带驱动) |
| e1000 | 全虚拟化 | 模拟 Intel 千兆网卡,功能更完善(支持千兆速率) | 中等(优于 rtl8139) | 无法使用 virtio 但需要较好性能的场景(如 Windows 桌面版) | 无(系统自带驱动) |
| virtio(virtio-net) | 半虚拟化 | 基于 virtio 协议直接通信,跳过硬件模拟,依赖前后端驱动协作 | 最优(接近物理网卡) | 生产环境、高带宽 / 低延迟场景(服务器、数据库、高并发服务) | Linux 内核≥2.6.25 默认支持;Windows 需手动安装驱动 |
(1)软件虚拟化驱动:rtl8139
特性:完全模拟 Realtek RTL8139 网卡硬件,属于全虚拟化驱动,无需在虚拟机内安装额外驱动(主流操作系统如 Windows、Linux 默认自带驱动)。
适用场景:兼容性优先的场景(如老旧操作系统、无法安装 virtio 驱动的环境)。
缺点:性能较差(模拟硬件开销大),不适合高带宽、低延迟需求。
(2)模拟 Intel 千兆网卡的全虚拟化驱动:e1000
特性:兼容性强(主流系统自带驱动,即插即用),性能中等(比 rtl8139 好,不如 virtio)。
适用场景:系统不支持 virtio 但需要比 rtl8139 好的性能(如老旧 Windows、快速部署测试环境)。
前提:虚拟机系统内置 e1000 驱动(几乎所有现代系统都满足),KVM 环境默认支持。
(3)半虚拟化驱动:virtio
特性:基于半虚拟化技术,虚拟机与宿主机通过 virtio 协议直接通信,跳过硬件模拟层,性能接近物理网卡。
适用场景:对网络性能要求高的场景(如服务器、数据库、高并发服务)。
前提:需在虚拟机内安装 virtio 驱动(Linux 内核通常自带,Windows 需手动安装)。

2、添加网卡
(1)命令行
# 临时添加网卡(重启虚拟机后失效)
virsh attach-interface vm01_centos79 --type network --model virtio --source default# 永久添加网卡(写入虚拟机配置文件)
virsh attach-interface vm01_centos79 --type network --model virtio --source default --persistent# 验证添加结果
virsh domiflist vm01_centos79
(2)图形


3、查看网卡


4、删除网卡
[root@sul ~] virsh detach-interface kvm_cenos_002 --type network --mac 52:54:00:02:b8:
# 成功分离接口[root@sul ~] virsh detach-interface kvm_cenos_002 --type network --mac 52:54:00:85:80:
# 成功分离接口[root@sul ~]# virsh domiflist kvm_cenos_002
接口 类型 源 型号 MAC
-------------------------------------------------------
vnet0 network default virtio 52:54:00:d3:b3:25
二、虚拟网络
1、查看网络
# 查看网络
virsh net-list --all
# 查看网络配置文件
[root@sul ~] virsh net-dumpxml default
<network connections='5'> # 表示当前名为 default 的虚拟网络,有 5 台虚拟机 正在连接使用。<name>default</name> # 虚拟网络的名称为 default(KVM 默认虚拟网络的固定名称)。<uuid>7e0702eb-64eb-46f9-a0de-2ff1ce1609f9</uuid> # 虚拟网络的唯一标识(UUID),用于在 KVM 内部区分不同虚拟网络。<forward mode='nat'><nat> # 定义虚拟网络的转发模式为 nat(网络地址转换<port start='1024' end='65535'/> # 宿主机将使用 1024-65535 端口为虚拟机提供端口转换服务</nat></forward><bridge name='virbr0' stp='on' delay='0'/> # 虚拟网络对应的 虚拟网桥 名称为 virbr0
# (宿主机上会生成一个名为 virbr0 的虚拟网卡,作为虚拟网络的 “交换机”)。
# stp='on':启用生成树协议(防止虚拟网络内出现环路)。
# delay='0':网桥启动时的延迟时间为 0(立即生效)。<mac address='52:54:00:5f:33:09'/> # 虚拟网桥 virbr0 的 MAC 地址(虚拟网卡的硬件地址)。<ip address='192.168.122.1' netmask='255.255.255.0'># 虚拟网络的网关 IP 地址为 192.168.122.1(即宿主机上 virbr0 网卡的 IP),子网掩码为 255.255.255.0,对应子网为 192.168.122.0/24。<dhcp><range start='192.168.122.2' end='192.168.122.254'/></dhcp>
# 虚拟网络内置了 DHCP 服务,自动为连接的虚拟机分配 IP 地址,分配范围是 192.168.122.2 到 192.168.122.254。
# 这也是为什么连接 default 网络的虚拟机,默认会自动获取到该网段的 IP。</ip>
</network>
2、NAT 模式
(1)SNAT 配置(实现虚拟机访问外网)
工作流程:当虚拟机访问外网(如ping 8.8.8.8)时:
- 虚拟机将请求发送到网关192.168.122.1(宿主机的virbr0网桥)。
- 宿主机通过 IP 转发功能,将请求从virbr0转发到物理网卡(如ens33)。
- 宿主机的 SNAT 规则自动将虚拟机的私有 IP(如192.168.122.122)转换为物理网卡的公网 / 物理网段 IP(如192.168.140.111)。
- 外网响应通过宿主机物理网卡接收,再经 NAT 反向转换后,转发回虚拟机。
总结
① 虚拟机上要有网关
② 物理机上要有路由的转发
③ 物理机上要有NAT的转换
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE# 确认 IP 转发开启
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久开启(重启生效)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
# 查看KVM默认NAT网络配置
virsh net-dumpxml default# 手动配置SNAT规则(若默认规则丢失)
# 物理机公网网卡假设为ens33,虚拟网络子网为192.168.122.0/24
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o ens33 -j MASQUERADE# 保存iptables规则(CentOS 7)
service iptables save


(2)DNAT 端口映射(实现外网访问虚拟机)
# 将物理机80端口映射到虚拟机192.168.122.101的80端口
iptables -t nat -I PREROUTING -d 192.168.140.111 -p tcp --dport 80 -j DNAT --to-destination 192.168.122.253:80# 将物理机55555端口映射到虚拟机192.168.122.101的22端口(SSH)
iptables -t nat -I PREROUTING -d 192.168.140.111 -p tcp --dport 55555 -j DNAT --to-destination 192.168.122.253:22# 允许端口通过防火墙
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=55555/tcp --permanent
firewall-cmd --reload# 查看已配置的NAT规则
iptables -t nat -L PREROUTING --line-numbers
3、桥接模式(bridge)
① 物理机地址必须是静态地址
② 物理机关闭networkmanager服务
(1)前提准备
# 1. 关闭NetworkManager服务(避免冲突)
systemctl stop NetworkManager
systemctl disable NetworkManager# 2. 确保物理机网卡(如ens33)配置为静态IP(后续会迁移到网桥)
(2)创建网桥
# 自动创建网桥br1并绑定物理网卡ens33(会自动修改网络配置)
virsh iface-bridge ens33 br1# 查看网桥状态
ip addr show br1
ip link show br1 # 确认状态为UP# 查看物理网卡状态(确认已绑定到网桥)
ip addr show ens33
(3)手动配置网桥(若自动配置失败)
# 创建网桥配置文件
cat > /etc/sysconfig/network-scripts/ifcfg-br1 << EOF
DEVICE="br1"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="192.168.140.200"
NETMASK="255.255.255.0"
GATEWAY="192.168.140.2"
STP="on" # 启用生成树协议,防止环路
DELAY="0" # 网桥启动延迟
EOF# 配置物理网卡绑定到网桥
cat > /etc/sysconfig/network-scripts/ifcfg-ens33 << EOF
DEVICE="ens33"
ONBOOT="yes"
BRIDGE="br1" # 绑定到网桥br1
TYPE="Ethernet"
BOOTPROTO="none" # 由网桥分配IP,物理网卡无需IP
EOF# 重启网络服务
systemctl restart network
(4)虚拟机绑定网桥
# 为虚拟机添加桥接模式网卡(永久生效)
virsh attach-interface vm01_centos79 --type bridge --model virtio --source br1 --persistent# 验证网卡配置
virsh domiflist vm01_centos79
4、隔离模式(私有网络)
# 创建隔离模式虚拟网络(仅虚拟机内部通信,不连接物理网络)
virsh net-define << EOF
<network><name>isolated</name><bridge name='virbr1' stp='on' delay='0'/><ip address='192.168.100.1' netmask='255.255.255.0'/>
</network>
EOF# 启动隔离网络并设置开机自启
virsh net-start isolated
virsh net-autostart isolated# 为虚拟机添加隔离网卡
virsh attach-interface vm01_centos79 --type network --model virtio --source isolated -

