KVM с мостом openvswitch гостевые ОС без интернета

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

Запускаю rockylinux9 с KVM и libvirt / virsh и установил openvswitch, чтобы использовать его как мост для гостевых ОС.

Независимо от того, что я пробовал, я не могу заставить виртуальные гостевые ОС получать интернет, когда они подключены к мосту openvswitch. Если я захожу в панель управления cockpit, сети отображаются, но виртуальная машина гостевой ОС показывает, что IP-адрес недоступен.

Шаги, предпринятые для настройки моста и виртуальной сети:

  1. создан мост openvswitch (ovs-vsctl add-br bridge1)
  2. добавлен физический интерфейс ethernet в мост (ovs-vsctl add-port bridge1 enp00)
  3. Я назначил IP-адрес мосту, но это не изменило ситуацию, поэтому я пропустил это во второй раз, когда настраивал мост.
  4. создана виртуальная сеть (virt-br1), которая будет использоваться с мостом openvswitch (virsh net-edit virt-br1, xml ниже)
  5. создана виртуальная машина (гостевая ОС – ubuntu) с помощью virt-install, используя виртуальную сеть virt-br1

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

У меня есть два физических сетевых адаптера, и оба могут пинговать как публичный, так и частный интернет, я могу SSH подключиться к обоим IP-адресам на хостовую ОС.

Конфигурация ovs-bridge (ovs-vs show)

    Bridge bridge1
        Port bridge1
            Interface bridge1
                type: internal
        Port en00
            Interface en00
    ovs_version: "2.16.7"

Команда ip a показывает, что связь моста неизвестна

bridge1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 

Интересно, что я не могу изменить, даже используя команду ip link nomaster, это то, что интерфейс, который настроен на использование моста, показывает ovs-system как мастер, а не bridge1

enp00: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master ovs-system state UP group default qlen 1000

XML виртуальной сети (virsh net-dumpxml)

<network connections="1">
  <name>virt-br1</name>
  <uuid>8ff14db2-16e8-428c-a20a-ad04218271b</uuid>
  <forward mode="bridge"/>
  <bridge name="bridge1"/>
  <virtualport type="openvswitch"/>
</network>

Я проверил логи selinux (ничего не запрещено), нет правил firewalld, которые блокируют какие-либо соединения, и таблицы маршрутов имеют правильные DNS и IP-адреса.

Что я делаю неправильно или упускаю? Может быть, есть дополнительные предложения по устранению неполадок?

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

Проблема с отсутствием интернет-соединения для виртуальных машин (гостей), работающих на KVM с использованием Open vSwitch (OVS), может возникнуть по нескольким причинам. Рассмотрим пошагово возможные источники проблемы и варианты ее решения.

Контекст проблемы

Вы используете Rocky Linux 9 в сочетании с KVM и Open vSwitch для настройки сетевой инфраструктуры виртуальных машин. Несмотря на попытки правильно настроить сеть, виртуальные машины не получают доступ в интернет, и отображают статус «IP-адрес недоступен».

Анализ текущей конфигурации

1. Настройка Open vSwitch

На основании ваших сообщений, вы создали мост bridge1, добавили к нему физический Ethernet-интерфейс и следили за его состоянием. Основная проблема заключается в том, что интерфейс enp00 всё ещё связан с ovs-system, а не с bridge1. Это может указывать на неправильную конфигурацию или на проблемы с привязкой интерфейсов в Open vSwitch.

Команда ovs-vs show показывает, что bridge1 настроен как "internal", это может быть проблемой для передачи трафика.

2. IP-адресация

Вы упомянули, что попытка присвоить IP-адрес мосту не изменила ситуацию. Это потенциальная проблема, так как для работы с интернетом мост должен иметь присвоенный IP-адрес, если он не работает в режиме только для "проксирующего моста". Возможно, вам стоит заново присвоить IP-адрес интерфейсу bridge1.

Рекомендации по улучшению конфигурации

  1. Проверьте, что ваш интерфейс enp00 правильно добавлен в bridge1. Убедитесь, что вы используете правильные команды:

    ovs-vsctl add-port bridge1 enp00
  2. Проверьте настройки маршрутизации. Убедитесь, что шлюз установлен на bridge1 и виртуальные машины имеют правильный маршрут к интернету. Это можно сделать с помощью:

    ip route
  3. Настройте IP для bridge1. Попробуйте присвоить IP-адрес вашему мосту:

    ip addr add 192.168.1.2/24 dev bridge1
    ip link set dev bridge1 up
  4. Проверьте NAT, если он необходим. Если ваши виртуальные машины будут обращаться в интернет, возможно, вам нужно будет настроить NAT. Это можно сделать с помощью IPTables:

    iptables -t nat -A POSTROUTING -o enp00 -j MASQUERADE
  5. Проверьте конфигурации DNS. Убедитесь, что ваши виртуальные машины могут разрешать DNS-имена. Это важно для функционирования интернета. Проверьте файл /etc/resolv.conf в гости.

  6. Перезагрузите Open vSwitch. После изменения конфигураций попробуйте перезагрузить Open vSwitch и виртуальные сети:

    systemctl restart openvswitch
    virsh net-destroy virt-br1
    virsh net-start virt-br1
  7. Проверьте логи. Хотя вы уже проверили логи SELinux и Firewalld, стоит также взглянуть на системные журналы (/var/log/messages или journalctl) для получения информации о других возможных ошибках.

Заключение

Эти рекомендации помогут вам выявить и устранить проблемы с подключением ваших виртуальных машин к интернету. Если после всех попыток проблема не ликвидирована, рекомендуется использовать сетевые утилиты для диагностики, такие как tcpdump и wireshark, чтобы отслеживать и анализировать сетевой трафик на уровне пакетов. Это может дать более глубокое понимание происходящих процессов и подсказать, где именно возникает сбой.

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

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