Как VirtualBox работает с Wi-Fi мостом?

Вопрос или проблема

Сегодня я установил VirtualBox на Debian 12 и использую WiFi-бридж, я могу пинговать виртуальную машину, используя тот же класс IP, что и wlan0 (драйвер 88x2bu), но ip addr и ip link sh не отображают интерфейс

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether ******** brd ******
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether ************ brd ********** permaddr *******

, где же бридж?

С другими приложениями, такими как kvm/qemu libvirt, у меня никогда не получалось настроить бридж с wlan (с ethernet все в порядке), как так получилось, что VirtualBox может использовать бридж, а libvirt нет?
Для libvirt я всегда использую решение с virbr: создаю интерфейс virbr, который “указывает” на wlan, что-то вроде этого

    <name>wifibr</name>
  <uuid>***</uuid>
  <forward dev='wlan0' mode="route">
    <interface dev='wlan0'/>
  </forward>
  <bridge name="virbr5" stp='on' delay='0'/>
  <mac address="****"/>
  <domain name="rosso.priv"/>
  <ip address="192.168.201.1" netmask='255.255.255.0'>
    <dhcp>
      <range start="192.168.201.128" end='192.168.201.254'/>
    </dhcp>
  </ip>
  <dnsmasq:options>
    <dnsmasq:option value="dynamic-host=rosso.priv,0.0.0.0,wlan0"/>
  </dnsmasq:options>
</network>

Попытка создать бридж завершилась неудачей

brctl addif br0 wlan0
нельзя добавить wlan0 в бридж br0: операция не поддерживается

Вопрос: как работает бридж VirtualBox? Можно ли сделать что-то подобное с libvirt?
Я предпочел бы использовать мой IP-класс wlan0

VirtualBox не делает бриджинг таким же образом. Он использует интерфейс “net filter” для перехвата пакетов.

Из https://www.virtualbox.org/manual/ch06.html#network_bridged

С бриджевым сетевым подключением Oracle VM VirtualBox использует драйвер устройства на вашей хост-системе, который фильтрует данные с вашего физического сетевого адаптера. Поэтому этот драйвер называют драйвером net filter. Это позволяет Oracle VM VirtualBox перехватывать данные с физической сети и внедрять данные в неё, фактически создавая новый сетевой интерфейс в программном обеспечении. Когда гость использует такой новый программный интерфейс, это выглядит для хост-системы так, как будто гость физически подключен к интерфейсу с помощью сетевого кабеля.

Хост не увидит этого в обычных инструментах ip -a и т. д., потому что это на более низком уровне; с ним не связан интерфейс.

Из графического интерфейса virtualbox вы можете выбрать, какой интерфейс будет подключен через бридж. Это также будет показано в конфигурационном файле .vbox для виртуальной машины

например:

    <Network>
        <Adapter slot="0" enabled="true" MACAddress="XXX">
          <DisabledModes>
            <NAT localhost-reachable="true"/>
            <InternalNetwork name="intnet"/>
            <NATNetwork name="NatNetwork"/>
          </DisabledModes>
          <BridgedInterface name="enp1s0"/>
        </Adapter>

Ответ или решение

Виртуализация и работа с сетями, особенно через Wi-Fi, может быть сложной задачей, особенно когда речь идет о мостовом соединении (bridge) в различных виртуализаторах. Я постараюсь объяснить, как работоспособность мостового соединения в VirtualBox отличается от других систем виртуализации, таких как libvirt для KVM/QEMU, и что можно сделать для достижения ваших целей.

Как работает мостовое соединение в VirtualBox?

VirtualBox использует механизм, называемый "net filter driver", для внедрения данных из вашего физического сетевого адаптера. Это означает, что VirtualBox перехватывает пакеты данных, проходящие через физический адаптер, и направляет их в виртуальную машину. Это позволяет виртуальной машине выглядеть так, как будто она подключена к сети напрямую, без необходимости создания дополнительных интерфейсов, которые вы могли бы видеть с помощью команд, таких как ip addr или ip link.

В частности, когда вы настраиваете мостовое соединение в VirtualBox:

  1. Вы выбираете физический сетевой интерфейс (например, wlan0).
  2. VirtualBox создает виртуальный интерфейс, который взаимодействует с вашим физическим адаптером.
  3. Этот интерфейс не отображается в системных инструментах управления сетью, поскольку он работает на более низком уровне.

Конфигурация адаптера в файле .vbox может выглядеть следующим образом:

<Network>
    <Adapter slot="0" enabled="true" MACAddress="XXX">
      <DisabledModes>
        <NAT localhost-reachable="true"/>
        <InternalNetwork name="intnet"/>
        <NATNetwork name="NatNetwork"/>
      </DisabledModes>
      <BridgedInterface name="enp1s0"/>
    </Adapter>
</Network>

Проблемы с мостовым соединением в KVM/QEMU (libvirt)

С другой стороны, при использовании libvirt для KVM/QEMU создание мостового соединения на Wi-Fi интерфейсах может вызывать проблемы. Это связано с тем, что не все Wi-Fi адаптеры поддерживают работу в режиме мостового соединения. Часто вы можете наткнуться на ошибку, например:

brctl addif br0 wlan0
can't add wlan0 to bridge br0: Operation not supported

Это происходит из-за особенностей работы Wi-Fi адаптеров и их поддержки режимов в ядре Linux. Большинство адаптеров на базе Wi-Fi требуют, чтобы вы использовали NAT или другой метод маршрутизации, поскольку они могут не поддерживать полное мостовое соединение.

Альтернативные варианты

Если вы хотите, чтобы ваши виртуальные машины использовали IP-адреса из диапазона (wlan0), вы можете рассмотреть следующие подходы:

  1. Используйте NAT: Настройка NAT в libvirt (что вы уже сделали) позволяет вашей виртуальной машине получить доступ к сети, выходя в интернет через основной Wi-Fi адаптер. Это привычный подход и достаточно прост.

  2. Используйте "Host-Only" сети: Если вы полностью контролируете вашу локальную сеть и хотите, чтобы VMs видели друг друга и взаимодействовали, вы можете создать "host-only" сеть через libvirt. Этот подход предполагает создание виртуального адаптера, который будет доступен только для вашего хоста и виртуальных машин, но в большинстве случаев для доступа к интернету потребуется отдельное NAT.

  3. Проверьте поддержку вашего Wi-Fi адаптера: Некоторые адаптеры могут поддерживать работающие bridge возможности. Вы можете обратиться к документации к вашему адаптеру или провести тесты, чтобы узнать, будет ли он функционировать в качестве моста.

Заключение

В заключение, VirtualBox использует более простой подход к работе с мостами через программное обеспечение, в то время как libvirt (KVM/QEMU) имеет ограничения, связанные с физическими Wi-Fi адаптерами. Если вы хотите использовать ваш IP-адрес класса wlan0, вам обычно придется полагаться на NAT или "host-only" сети. Если вам необходимо постоянно использовать bridge-соединение, рассмотрите возможность использования Ethernet-адаптера, который, как правило, будет работать стабильнее и проще.

Оцените материал
Добавить комментарий

Капча загружается...