Вопрос или проблема
Запускаю rockylinux9 с KVM и libvirt / virsh и установил openvswitch, чтобы использовать его как мост для гостевых ОС.
Независимо от того, что я пробовал, я не могу заставить виртуальные гостевые ОС получать интернет, когда они подключены к мосту openvswitch. Если я захожу в панель управления cockpit, сети отображаются, но виртуальная машина гостевой ОС показывает, что IP-адрес недоступен.
Шаги, предпринятые для настройки моста и виртуальной сети:
- создан мост openvswitch (
ovs-vsctl add-br bridge1
) - добавлен физический интерфейс ethernet в мост (
ovs-vsctl add-port bridge1 enp00
) - Я назначил IP-адрес мосту, но это не изменило ситуацию, поэтому я пропустил это во второй раз, когда настраивал мост.
- создана виртуальная сеть (
virt-br1
), которая будет использоваться с мостом openvswitch (virsh net-edit virt-br1
, xml ниже) - создана виртуальная машина (гостевая ОС – 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
.
Рекомендации по улучшению конфигурации
-
Проверьте, что ваш интерфейс
enp00
правильно добавлен вbridge1
. Убедитесь, что вы используете правильные команды:ovs-vsctl add-port bridge1 enp00
-
Проверьте настройки маршрутизации. Убедитесь, что шлюз установлен на
bridge1
и виртуальные машины имеют правильный маршрут к интернету. Это можно сделать с помощью:ip route
-
Настройте IP для
bridge1
. Попробуйте присвоить IP-адрес вашему мосту:ip addr add 192.168.1.2/24 dev bridge1 ip link set dev bridge1 up
-
Проверьте NAT, если он необходим. Если ваши виртуальные машины будут обращаться в интернет, возможно, вам нужно будет настроить NAT. Это можно сделать с помощью IPTables:
iptables -t nat -A POSTROUTING -o enp00 -j MASQUERADE
-
Проверьте конфигурации DNS. Убедитесь, что ваши виртуальные машины могут разрешать DNS-имена. Это важно для функционирования интернета. Проверьте файл
/etc/resolv.conf
в гости. -
Перезагрузите Open vSwitch. После изменения конфигураций попробуйте перезагрузить Open vSwitch и виртуальные сети:
systemctl restart openvswitch virsh net-destroy virt-br1 virsh net-start virt-br1
-
Проверьте логи. Хотя вы уже проверили логи SELinux и Firewalld, стоит также взглянуть на системные журналы (
/var/log/messages
илиjournalctl
) для получения информации о других возможных ошибках.
Заключение
Эти рекомендации помогут вам выявить и устранить проблемы с подключением ваших виртуальных машин к интернету. Если после всех попыток проблема не ликвидирована, рекомендуется использовать сетевые утилиты для диагностики, такие как tcpdump
и wireshark
, чтобы отслеживать и анализировать сетевой трафик на уровне пакетов. Это может дать более глубокое понимание происходящих процессов и подсказать, где именно возникает сбой.