Проброс сетевой карты в виртуальную машину Proxmox

Когда виртуальная машина в Proxmox VE упирается в ограничения виртуального моста — например, нужен прямой доступ к 10-гигабитной сетевой карте или аппаратная обработка трафика на роутере внутри ВМ — стандартный virtio-интерфейс перестаёт быть решением. Признаком того, что пора задуматься о пробросе, обычно служит высокая загрузка CPU хоста при сетевой активности гостя или требование гостевой ОС видеть «родное» железо, например для работы SR-IOV или специфических драйверов.

Проброс сетевой карты (PCI passthrough) передаёт физическое устройство под полный контроль виртуальной машины через механизм IOMMU. Хост при этом теряет доступ к адаптеру — он становится виден только внутри гостя. Ниже разберём подготовку хоста, настройку vfio, добавление устройства в ВМ и типичные ошибки.

Проверка поддержки IOMMU и подготовка хоста

Первое действие — убедиться, что процессор и материнская плата поддерживают технологию виртуализации ввода-вывода: VT-d у Intel или AMD-Vi у AMD. В BIOS/UEFI соответствующая опция должна быть включена; её название и расположение зависят от производителя платы, поэтому при сомнениях сверьтесь с документацией именно вашей модели.

Далее нужно активировать IOMMU на уровне загрузчика. Для систем на GRUB откройте файл /etc/default/grub и добавьте в строку GRUB_CMDLINE_LINUX_DEFAULT параметр intel_iommu=on для Intel или amd_iommu=on для AMD. Если хост загружается через systemd-boot (типично для ZFS-установок), параметры ядра редактируются через /etc/kernel/cmdline.

# Для GRUB после правки файла:

update-grub

Для systemd-boot:

proxmox-boot-tool refresh

⚠️ Внимание: перед изменением параметров загрузки убедитесь, что у вас есть альтернативный доступ к серверу (IPMI, физическая консоль). Ошибка в параметрах ядра может сделать хост недоступным по сети до ручного вмешательства.

После перезагрузки проверьте результат командой dmesg | grep -e DMAR -e IOMMU — в выводе должны присутствовать строки об инициализации IOMMU. Пустой вывод означает, что параметр не применился или поддержка отключена в BIOS.

Определение сетевой карты и групп IOMMU

Найдите целевой адаптер командой lspci | grep -i ethernet. Вас интересует PCI-адрес вида 02:00.0 и идентификатор устройства, который покажет lspci -nn — например, [8086:10fb]. Эта пара «vendor:device» понадобится при привязке к vfio.

Критически важный момент — группы IOMMU. Устройства на одной шине или за общим коммутатором PCIe могут попадать в одну группу, и тогда пробрасывать придётся все устройства группы сразу. Проверить состав групп можно скриптом, который перебирает содержимое /sys/kernel/iommu_groups/, либо в веб-интерфейсе Proxmox при добавлении PCI-устройства — там виден список устройств и их групп.

  • 🔍 lspci -nn — узнать PCI-адрес и ID устройства
  • 🧩 Проверка групп IOMMU — убедиться, что карта изолирована
  • 🚫 Не пробрасывайте сетевую карту, через которую хост сам выходит в сеть
  • 📝 Запишите MAC-адрес до проброса — пригодится при настройке гостя

Привязка карты к драйверу vfio-pci

Чтобы хост «отпустил» устройство, его нужно отдать драйверу vfio-pci вместо штатного сетевого драйвера. Загрузите необходимые модули, добавив их в /etc/modules:

vfio

vfio_iommu_type1

vfio_pci

vfio_virqfd

Затем создайте файл /etc/modprobe.d/vfio.conf и укажите в нём привязку по ID устройства: options vfio-pci ids=8086:10fb (подставьте свои значения). Если на хосте несколько одинаковых карт с тем же ID, vfio перехватит их все — это нужно учитывать заранее.

Дополнительно полезно запретить загрузку «родного» драйвера через blacklist в отдельном файле в /etc/modprobe.d/, чтобы исключить гонку при старте. После всех правок обновите initramfs командой update-initramfs -u -k all и перезагрузите хост.

☑️ Подготовка карты к пробросу

Выполнено: 0 / 5

Проверка результата: lspci -k напротив вашей карты должен показывать строку Kernel driver in use: vfio-pci. Если там остался прежний драйвер — привязка не сработала, и нужно смотреть логи загрузки.

Добавление PCI-устройства в виртуальную машину

В веб-интерфейсе Proxmox откройте нужную ВМ, перейдите в раздел Hardware и нажмите Add → PCI Device. В списке выберите сетевую карту по её PCI-адресу. Для сетевых адаптеров, в отличие от видеокарт, опции All Functions и ROM-Bar обычно не требуются, а PCI-Express имеет смысл включить только при машинах с машинным типом q35.

То же самое делается из консоли хоста:

qm set 100 --hostpci0 02:00.0

Здесь 100 — идентификатор ВМ, а 02:00.0 — адрес карты. После добавления устройства гостевую систему нужно полностью выключить и запустить заново (не перезагрузку изнутри гостя, а stop/start), чтобы проброс инициализировался корректно.

📊 Для какой задачи вы пробрасываете сетевую карту?
Роутер/файрвол внутри ВМ (pfSense, OpenWrt)
10/25-гигабитная сеть для NAS или СХД
Тестирование драйверов и железа
Другое

Настройка гостевой системы

Внутри гостя карта определяется как обычное физическое устройство. В Linux-госте проверьте её появление командой ip link или lspci; в Windows-госте адаптер появится в диспетчере устройств, и для него потребуется установить драйвер производителя чипа — Intel, Mellanox, Realtek и так далее.

Обратите внимание: MAC-адрес проброшенной карты — аппаратный, он не задаётся из Proxmox, в отличие от виртуальных интерфейсов virtio. Если в госте настроена привязка сетевых параметров к MAC, используйте именно заводской адрес адаптера.

Сравнение: virtio, SR-IOV и полный проброс

Проброс — не единственный способ ускорить сеть внутри ВМ. Выбор зависит от задачи, и сравнить подходы поможет таблица:

МетодПроизводительностьРасход CPU хостаГибкость
VirtIO (мост vmbr)СредняяЗаметныйМаксимальная: VLAN, firewall, live-миграция
PCI passthroughБлизкая к «железной»МинимальныйНизкая: карта занята одной ВМ
SR-IOV (VF)ВысокаяНизкийСредняя: несколько ВМ на одну карту
Мост + multiqueueСредняя+СреднийВысокая, компромиссный вариант

Live-миграция ВМ с проброшенным PCI-устройством в стандартной конфигурации Proxmox невозможна — это одно из главных ограничений метода, которое часто забывают учесть при планировании кластера.

Типичные ошибки и их решение

Чаще всего проброс не работает из-за того, что хост продолжает удерживать карту. Проверьте lspci -k: если драйвер не vfio-pci, вернитесь к конфигурации modprobe и пересоберите initramfs.

  • ⚙️ ВМ не стартует с ошибкой IOMMU — проверьте, включён ли IOMMU в BIOS и в параметрах ядра
  • 🔗 Устройство в общей группе — переставьте карту в другой слот PCIe или пробрасывайте всю группу
  • 🌐 Пропала сеть на хосте — вы пробросили карту, через которую шёл management-трафик; верните конфигурацию через консоль
  • 🪟 Windows не видит адаптер — установите драйвер производителя чипа внутри гостя
⚠️ Внимание: перед пробросом убедитесь, что управление хостом идёт через другой сетевой интерфейс. Если вы пробросите единственную карту, через которую настроен vmbr0, веб-интерфейс и SSH станут недоступны до физического доступа к серверу.
Что делать, если карта в одной группе IOMMU с другими устройствами

Варианты: переставить карту в другой PCIe-слот (слоты нередко завязаны на разные контроллеры), пробросить все устройства группы в ту же ВМ либо, на свой риск, использовать патч ACS override — последний снижает изоляцию и не рекомендуется для production-сред.

Если после всех шагов карта видна в госте, но линк не поднимается, проверьте самое простое: кабель, порт коммутатора и согласование скорости. Проброс устраняет программную прослойку, поэтому физические проблемы начинают проявляться напрямую, без «буфера» в виде виртуального моста.

FAQ: частые вопросы о пробросе сетевой карты

Можно ли пробросить сетевую карту в LXC-контейнер?

Полноценный PCI passthrough в LXC не применяется — контейнеры используют общее ядро хоста. Обычно в контейнер пробрасывают отдельный сетевой интерфейс через конфигурацию lxc.net или назначают интерфейс хоста напрямую, но это другой механизм с иными ограничениями.

Исчезнет ли карта из хоста после проброса?

Да. После привязки к vfio-pci интерфейс пропадает из вывода ip link на хосте и становится недоступен для мостов и маршрутизации Proxmox. Устройство вернётся хосту только после отмены привязки и перезагрузки.

Работает ли проброс с картами Realtek и дешёвыми адаптерами?

Технически — да, если IOMMU работает корректно. Однако поведение конкретных чипов отличается: у некоторых бюджетных карт встречаются проблемы с сбросом устройства (reset bug), из-за чего ВМ после перезапуска может не видеть адаптер до перезагрузки хоста.

Можно ли вернуть карту хосту без перезагрузки?

В общем случае надёжного способа нет: требуется отвязать устройство от vfio-pci и заново загрузить штатный драйвер, что на практике часто завершается нестабильным состоянием. Рекомендуемый путь — убрать устройство из конфигурации ВМ и перезагрузить хост.

Нужен ли проброс, если хватает virtio?

Нет. Если виртуальный интерфейс справляется с нагрузкой и не загружает CPU хоста, проброс не даст заметной выгоды, зато лишит вас live-миграции, firewall Proxmox и гибкости сетевой конфигурации. Passthrough оправдан при высоких скоростях, требованиях к аппаратным функциям карты или при построении роутера внутри ВМ.