Общение между двумя виртуальными машинами на QEMU

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

Я создал 2 виртуальные машины Ubuntu, используя 2 экземпляра QEMU параллельно на моей базе Ubuntu.
Настройка:
хост-машина – Ubuntu20
VM1(Qemu) – ubuntu18
VM2(Qemu) – ubuntu22

Я создал мост br0 на моей хост-машине и создал 2 tap-интерфейса для 2 виртуальных машин и назначил br0 мастером для 3 сетевых интерфейсов (ethernet(eno1), tap0, tap1). Когда я запустил 2 виртуальные машины, они получили IP-адрес из той же подсети, что и хост.
IP хоста – 192.168.72.67
IP VM1 – 192.168.72.25
IP VM2 – 192.168.72.233
Теперь я могу пинговать хост-машину с VM1 и наоборот. Также хост-машину с VM2 и наоборот.

sudo ip link add br0 type bridge
sudo ip link set dev ens3 master br0 

sudo ip tuntap add dev tap0 mode tap 

sudo ip link set dev tap0 master br0 
sudo ip tuntap add dev tap1 mode tap

sudo ip link set dev tap1 master br0 
sudo ip address delete 192.168.72.71/24 dev ens3 
sudo ip address add 192.168.72.71/24 dev br0 
sudo ip route add default via 192.168.72.1 dev br0 
    
#Для VM1
sudo qemu-system-x86_64 -enable-kvm -m 8G -smp 4 -hda ubuntu18.qcow2 -boot d -cpu host \
-netdev tap,id=net0,ifname=tap0,script=no,downscript=no \
-device virtio-net-pci,netdev=net0

#Для VM2
sudo qemu-system-x86_64 -enable-kvm -m 4G -smp 2 -hda ubuntu22.qcow2 -boot d -cpu host \
-netdev tap,id=net1,ifname=tap1,script=no,downscript=no \
-device virtio-net-pci,netdev=net1

Я не могу пинговать 2 виртуальные машины. Пожалуйста, найдите мне решение этой проблемы

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

Связь между двумя виртуальными машинами (VM) на базе QEMU может быть сложной задачей, если вы не знакомы с настройкой сетевых мостов. В описанном случае вы уже выполнили большую часть работы по настройке мостового адаптера и интерфейсов tap, но столкнулись с проблемой связи между двумя виртуальными машинами.

Теория

Чтобы обеспечить связь между виртуальными машинами на одном хосте через QEMU, необходимо правильно настроить сетевой мост (bridge) и убедиться, что все сетевые пакеты могут корректно передаваться между интерфейсами. В данном случае вы настроили bridge и назначили его в качестве master для интерфейсов. Однако проблема заключается в том, что виртуальные машины не могут пинговать друг друга, несмотря на успешную комиссию с хостом.

Основная цель сетевого моста — объединить несколько сетевых интерфейсов в одном сетевом сегменте, позволяя всем участникам правильно обмениваться данными. Мост функционирует на канальном уровне модели OSI, что позволяет ему обрабатывать Ethernet-фреймы между различными сетевыми сегментами.

Пример

Проблема, которая возникла, может быть связана с несколькими факторами:

  1. Правильность настройки моста и интерфейсов. Несмотря на установку моста и назначение его в качестве master, стоит тщательно проверить все шаги: настройка IP-адресов, маршрутизация и т.д.

  2. Правильная работа TAP интерфейсов. TAP-интерфейсы должны быть правильно настроены для работы в мосте. Они должны эффективно обмениваться Ethernet-фреймами.

  3. Файрволл и другие сетевые политики. На уровне хоста могут быть активны правила файрволла (например, iptables или ufw), которые препятствуют обмену данными между виртуальными машинами.

  4. Настройки внутри самих виртуальных машин. Проверка конфигураций сети (например, Netplan или NetworkManager в Ubuntu) внутри виртуальных машин может выявить неполадки.

Применение

Решение проблемы можно разделить на несколько шагов:

  1. Проверка Конфигурации Сетевого Моста:

    • Убедитесь, что bridge br0 правильно подключен ко всем интерфейсам и имеет назначенную ссылку на физический интерфейс хоста.
    • Используйте команды bridge или brctl для проверки статуса моста:
      sudo bridge link show
      или
      sudo brctl show
  2. Проверка TAP Интерфейсов:

    • Убедитесь, что tap-интерфейсы активны и назначены правильно.
    • Убедитесь, что они видны как части моста:
      ip link show tap0
      ip link show tap1
  3. Правила Файрволла:

    • Проверка настроек iptables или ufw на хосте.
    • Для временного отключения ufw (если он используется):
      sudo ufw disable
    • Для проверки текущих правил iptables:
      sudo iptables -L -v
  4. Обновление и Проверка Рмаршрутизации:

    • Перезагрузите сетевые сервисы, чтобы обновить настройки:
      sudo systemctl restart networking
  5. Верификация Внутри ВМ:

    • Для каждой виртуальной машины убедитесь в наличии корректной сетевой конфигурации:
      ip addr show
      ip route show
  6. Тесты на Пинг:

    • Используйте команду ping для проверки связи не только между VMs и хостом, но и непосредственно между VMs:
      ping 192.168.72.25 (с VM2)
      ping 192.168.72.233 (с VM1)

После выполнения всех этих проверок и изменений, если всё настроено правильно, связь между двумя виртуальными машинами должна восстановиться. Если проблема все еще сохраняется, это может требовать более глубокого анализа сетевых логов и траблшутинга.

Для более углубленного анализа и устранения неполадок также можно использовать инструменты системного мониторинга сетевого трафика, такие как tcpdump или wireshark. Эти инструменты помогут выявить, на каком этапе происходит блокировка или потеря пакетов.

Следуя вышеописанным шагам и рекомендациям, у вас получится наладить стабильную и надежную связь между виртуальными машинами на QEMU, что позволит вам уверенно продвигаться в дальнейших проектах и задачах по виртуализации и настройке сетевого окружения.

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

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