Вопрос или проблема
Сегодня я установил 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:
- Вы выбираете физический сетевой интерфейс (например,
wlan0
). - 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>
</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
), вы можете рассмотреть следующие подходы:
-
Используйте NAT: Настройка NAT в libvirt (что вы уже сделали) позволяет вашей виртуальной машине получить доступ к сети, выходя в интернет через основной Wi-Fi адаптер. Это привычный подход и достаточно прост.
-
Используйте "Host-Only" сети: Если вы полностью контролируете вашу локальную сеть и хотите, чтобы VMs видели друг друга и взаимодействовали, вы можете создать "host-only" сеть через libvirt. Этот подход предполагает создание виртуального адаптера, который будет доступен только для вашего хоста и виртуальных машин, но в большинстве случаев для доступа к интернету потребуется отдельное NAT.
-
Проверьте поддержку вашего Wi-Fi адаптера: Некоторые адаптеры могут поддерживать работающие bridge возможности. Вы можете обратиться к документации к вашему адаптеру или провести тесты, чтобы узнать, будет ли он функционировать в качестве моста.
Заключение
В заключение, VirtualBox использует более простой подход к работе с мостами через программное обеспечение, в то время как libvirt (KVM/QEMU) имеет ограничения, связанные с физическими Wi-Fi адаптерами. Если вы хотите использовать ваш IP-адрес класса wlan0
, вам обычно придется полагаться на NAT или "host-only" сети. Если вам необходимо постоянно использовать bridge-соединение, рассмотрите возможность использования Ethernet-адаптера, который, как правило, будет работать стабильнее и проще.