QEMU ВЗАИМОДЕЙСТВИЕ МЕЖДУ ВИРТУАЛЬНЫМИ МАШИНАМИ [закрыто]

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

позвольте мне рассказать вам несколько шагов, которые я сделал для настройки bridge tap между моей хост-системой и виртуальными машинами qemu. я попробовал два подхода

  1. на основе хоста, ubuntu18(qemu) vm1 и другая ubuntu22(qemu) vm2. параллельные инстанции qemu
  2. на основе хоста ubuntu18(qemu) vm1 и внутри vm1 ещё одна ubuntu20(vm2) вложенная установка vm.

в первом методе я создал два интерфейса tap0, tap1 и мост br0. настроил br0 как мастер для tap0, tap1, eno1(ethernet). удалил ip с eno1 и назначил его мосту, а также настроил br0 как маршрут по умолчанию. таким образом, моя система использовала br0 как сетевой интерфейс, и tap0 и tap1 назначены ему.

modprobe tun tap

ubuntu18@ubuntu18:~/Downloads$ sudo ip link add br0 type bridge

[sudo] password for ubuntu18:

ubuntu18@ubuntu18:~/Downloads$ sudo ip tuntap add dev tap0 mode tap

ubuntu18@ubuntu18:~/Downloads$ sudo ip link set dev en01 master br0

ubuntu18@ubuntu18:~/Downloads$ sudo ip link set dev tap0 master br0

ubuntu18@ubuntu18:~/Downloads$ sudo ip link set br0 up

ubuntu18@ubuntu18:~/Downloads$ sudo ip address delete 192.168.72.67/24 dev eno1

ubuntu18@ubuntu18:~/Downloads$ sudo ip address add 192.168.72.67/24 dev br0

ubuntu18@ubuntu18:~/Downloads$ sudo ip route add default via 192.168.72.1 dev br0

затем я дал команду qemu для запуска vm1

sudo qemu-system-x86_64 -enable-kvm -m 8G -smp 4 -hda ubuntu18.qcow2 -boot d -cpu host -netdev tap,id=foo,ifname=tap0 -device virtio-net-pci,netdev=foo0

для vm2
sudo qemu-system-x86_64 -enable-kvm -m 4G -smp 2 -hda ubuntu22.qcow2 -boot d -cpu host -netdev tap,id=foo1,ifname=tap1 -device virtio-net-pci,netdev=foo1

таким образом, я смог получить ip-адрес для обеих виртуальных машин в той же серии, что и хост.
ip хоста – 192.168.72.67
vm1-192.168.72.71
vm2-192.168.72.233

и благодаря этому я смог пинговать хост с виртуальной машины и наоборот.

таким образом, было очевидно, что связь между хостом и виртуальной машиной возможна.
Затем я использовал этот же подход для настройки моей ubuntu18 vm1 как хоста для ubuntu20 (вложенная vm). но даже не получал интернет внутри ubuntu20.

пожалуйста, помогите мне решить эти два вопроса

  1. включить межвиртуальную коммуникацию между vm1 и vm2 в параллельной установке
  2. включить связь между ubuntu18(vm1) хостом и ubuntu20 при вложенной установке vm

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

Вопрос, связанный с организацией межвиртуальной коммуникации в QEMU, требует глубокого понимания сетевых технологий и инструментов виртуализации. Для решения поставленных задач: 1) обеспечения коммуникации между виртуальными машинами (VM) в параллельной установке; 2) обеспечения связи между хостовой системой (VM1) и вложенной виртуальной машиной (VM2) в nested-среде, необходимо разобраться с несколькими аспектами.

Теория

QEMU, будучи мощным инструментом виртуализации, предоставляет возможности для создания сложных сетевых топологий. Виртуальные машины в QEMU могут общаться друг с другом и с внешним миром через виртуальные сети, которые могут быть настроены с использованием TAP-интерфейсов и мостов (bridge). TAP (англ. Terminal Access Point) — это виртуальные сетевые интерфейсы, которые позволяют программам напрямую взаимодействовать с сетевыми подключениями. Технически, TAP-интерфейс можно рассматривать как виртуальный узел в сети, к которому можно подключить устройства, эмулируемые программным обеспечением, таким как QEMU.

Мост (bridge) на хосте работает аналогично сетевому коммутатору: он объединяет несколько сетевых интерфейсов в одну общую сеть. Это позволяет виртуальным машинам общаться друг с другом и с внешними сетями через общий IP-адрес.

Для успешной коммутации между виртуальными машинами необходимо корректно настроить эти сетевые компоненты.

Пример

Вы описали два подхода для реализации сетевой конфигурации:

  1. Параллельная установка: включала в себя создание двух TAP-интерфейсов (tap0 и tap1) и бриджа br0. Каждый из TAP-интерфейсов выступает в качестве сетевого интерфейса для отдельной виртуальной машины. В таком подходе для обеспечения коммуникации между VM1 и VM2 важно убедиться, что оба виртуальных интерфейса (tap0 и tap1) корректно подключены к одному бриджу (br0), который также соединен с интерфейсом хоста (eno1). Благодаря этому, виртуальные машины могут обмениваться пакетами как если бы они находились в одной локальной сети.

  2. Nested установка: вынуждает нас работать с сетевыми слоями глубже, так как одна виртуальная машина работает внутри другой. Это может вызвать проблемы с сетевыми настройками, например, вложенные виртуальные машины могут не получать IP-адреса или не иметь доступа к сети. Такие случаи требуют настройки NAT (англ. Network Address Translation) или создания отдельного моста внутри гостевой операционной системы для управления трафиком между вложенными машинами.

Применение

Для решения ваших задач давайте более глубоко разберем возможные настройки.

  1. Параллельная установка: Межвиртуальная связь VM1 и VM2

    Убедитесь, что обе виртуальные машины подключены к одному и тому же мостовому интерфейсу. Это можно проверить с помощью команды:

    brctl show

    Если оба интерфейса tap0 и tap1 привязаны к одному мосту, но связь всё ещё недоступна, проверьте настройки брандмауэра на всех трёх машинах (хост, VM1 и VM2), так как они могут блокировать ICMP-трафик (ping) или другие типы сетевых пакетов.

    Также проверьте, что в виртуальных машинах установлены корректные маршруты по умолчанию, которые направляют трафик к бриджу br0. Это можно сделать с помощью команды:

    ip route
  2. Nested установка: Связь между VM1 и вложенной VM20

    Основной проблемой в такой конфигурации является передача сетевого трафика через несколько слоёв виртуализации. Попробуйте настроить NAT на VM1, что позволит её вложенной машине (VM20) обмениваться данными с внешними сетями под IP-адресом VM1. Выполните следующие шаги:

    • Установите и включите маршрутизацию пакетов на VM1:

      echo 1 > /proc/sys/net/ipv4/ip_forward
    • Настройте правило NAT с использованием iptables на VM1:

      iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

      Убедитесь, что в этой команде используется правильный интерфейс внешней сети (в данном случае eth0), и измените его при необходимости.

    • Проверьте настройки gateway внутри VM20, чтобы они указывали на IP-адрес соответствующий VM1. Это можно сделать:

      ip route add default via <ip_VM1>

    При корректной конфигурации этих параметров ваша вложенная виртуальная машина сможет получить доступ к сети через VM1.

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

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

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