vNIC — виртуальная сетевая карта, которую гипервизор предоставляет виртуальной машине. Гостевая ОС работает с vNIC как с обычным сетевым адаптером (Ethernet). Гипервизор транслирует сетевые запросы ВМ в реальные сетевые операции через физический NIC хоста.
Как работает
В KVM vNIC реализован двумя способами:
- Эмуляция (e1000, rtl8139): гипервизор эмулирует конкретный реальный адаптер. Медленнее, но совместима со старыми ОС без специальных драйверов.
- virtio-net: паравиртуальный интерфейс. Гостевая ОС использует специальный драйвер virtio, который работает напрямую с гипервизором без эмуляции. Пропускная способность до 10 Гбит/с, latency минимальна.
Физически пакеты от ВМ попадают в tap-интерфейс хоста, затем через Linux bridge или OVS (Open vSwitch) выходят на физический NIC. Для SR-IOV (Single Root I/O Virtualization) физическая карта создаёт Virtual Functions (VF), которые передаются напрямую в ВМ, обходя гипервизор — производительность bare-metal.
Каждая ВМ может иметь несколько vNIC: одна для публичного трафика, другая для приватной сети, третья для хранилища. MAC-адрес vNIC назначается гипервизором и уникален в рамках кластера.
История
Эмуляция сетевых карт появилась в первых версиях QEMU (2003). virtio-net разработан Русланом Ижбулатовым и включён в ядро Linux 2.6.25 (2008). SR-IOV в Ethernet-адаптерах появился с Intel 82576 (2008).
На что обращать внимание
Всегда используйте virtio-net в Linux-ВМ: производительность в 5–10 раз выше эмуляции e1000. Для Windows Server устанавливайте VirtIO-Win драйверы. При необходимости 10/25 Гбит/с и минимальной latency — настраивайте SR-IOV passthrough вместо программной коммутации.
Типы vNIC и паравиртуальные драйверы
Virtio-net обеспечивает до 10+ Гбит/с при минимальных накладных расходах на CPU. Эмулируемые e1000 ограничены 1 Гбит/с. Windows Server требует установки Virtio-драйверов от Red Hat.
SR-IOV: прямой доступ к физическому NIC
SR-IOV позволяет ВМ обращаться к физическому NIC напрямую, минуя гипервизор. Физический NIC создаёт виртуальные функции (VF) через PCI passthrough. Производительность: 25–100 Гбит/с при latency менее 1 мкс.
Сетевые режимы в Proxmox VE
Типы vNIC в Proxmox VE: VirtIO (для Linux), E1000 (совместимость с Windows). Сетевая модель: bridge (подключение к Linux-бриджу), NAT (через masquerade), VLAN-тегирование для изоляции сетей.
Настройка сетевой производительности
Jumbo frames (MTU 9000) в приватной сети снижают CPU-overhead при больших объёмах данных. Проверка: ip link show | grep mtu. В KVM: virsh edit vm-name → добавить <driver name='vhost' txmode='iothread'/>. iothread-режим: отдельный поток для сетевых операций.
MTU и фрагментация
По умолчанию MTU 1500 байт. При туннелировании (VXlan, WireGuard) эффективный MTU снижается на overhead: VxLAN -50 байт, WireGuard -80 байт. Без правильного MTU: Path MTU Discovery Black Hole — соединения зависают. Решение: MSS clamping в iptables: -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu.