LINUX.ORG.RU

QEMU проблема с доставкой тегированного трафика к VM


0

1

Здравствуйте!!!

Помогите, пожалуйста, решить проблему:

Исходные данные:

На сервере установлен Debian GNU/Linux 7.6 (wheezy). Поверх него установлена система виртуализации QEMU emulator version 1.1.2 (qemu-kvm-1.1.2+dfsg-6+deb7u3, Debian). Управление виртуальными машинами осуществляется через virtual machine manager 0.9.1.

Задача:

Посадить виртуальную машину в VLAN и передавать трафик данной ВМ через определенный физический интерфейс сервера (Eth1).

Проблема:

Руководствуясь статьей: http://www.thetechrepo.com/main-articles/534-pass-vlan-traffic-8021q-to-virtu...

Настроил сетевой интерфейс виртуальной машины на генерирование тегированного трафика. В host системе при помощи VM Manager задал настройки виртуального сетевого адаптера моей виртуальной машины:

Source device: Host device eth1: macvtap Device model: virtio Source mode: Bridge

Запускаю ping с ВМ на устройство в том же VLAN. Трафик физического сетевого интерфейса Eth1 анализирую программой Wireshark, установленной на host системе. Вижу, что от ВМ в сеть уезжают ARP запросы с нужными метками VID, ответы на них приходят. Однако, до виртуальной машины они не доходят (проверял tcpdumpом в ВМ).

Подскажите, в чем может быть проблема???


мост может не пропускать тегированный траффик, если в ядре есть поддержка фильтрация для моста.

Регулируется это через /proc/sys/net/bridge/bridge-nf-filter-vlan-tagged и может влиять /proc/sys/net/bridge/bridge-nf-call-iptables, /sys/class/net/brX/bridge/nf_call_iptables

Если таких файлов нет, значит ядро скорее всего проблема не в ядре.

в самом простом случае

        echo 1 >/proc/sys/net/bridge/bridge-nf-call-iptables
        echo 1 >/proc/sys/net/bridge/bridge-nf-filter-vlan-tagged
        echo 1 >/sys/class/net/brX/bridge/nf_call_iptables
+ разрешение на форвардинг через brX в iptables

vel ★★★★★
()
Ответ на: комментарий от vel

Первые две команды выполнились: не играет никакой рояли. Еще забыл сказать: если убираю из настроек интерфейса в виртуалке VLAN (конфигурирую на передачу нетегированного трафика) при неизменных настройках виртуального интерфейса на хосте, пинги идут. Само собой, Eth1 подключаю к access порту коммутатора. Получается, что форвардинг через мост работает.

fate
() автор топика
Ответ на: комментарий от fate

Если первые две команды выполнились без ругани И если на хосте используется iptables (с DROP правилами в FORWARD), то нужно не забыть разрешить форвардинг пакетов через интерфейс моста.

В третьей команде нужно указать имя интерфейса моста вместо brX

про kvm

VLANs

Please note that the rtl8139 virtual network interface driver does not support VLANs. If you want to use VLANs with your virtual machine, you must use another virtual network interface like virtio.

Проблема скорее всего в мосте. Кто этот мост создает ? Как выглядит мост после запуска виртуалки ? tcpdump запускал на интерфейсах входящих в мост ?

Если все так плохо, то кто мешает на хосте создать vlan, запихнуть его в мост и к этому мосту цеплять виртуалку.

vel ★★★★★
()
Ответ на: комментарий от vel

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

Виртуальную карту использую virtio. Пробовал на всех вариантах, включая rtl8139, эффект одинаковый.

Кто создает мост? Хороший вопрос) Создаю виртуалки через графическую морду virtual machine manager. В нем можно выбрать тип виртуальной карты и способ взаимодействия виртуальных машин друг с другом. У меня карта virtio и режим bridge,

Tcpdump запускал на интерфейсе Eth0 виртуальной машины. Само собой, данный интерфейс должен входить в бридж,

Очень не хочется мутить что-то с мостом. Желательно настройку VLAN вынести на уровень виртуальной машины. На один мост завязано много виртуалок. Если какой косяк в настройках, сеть отвалится не на одной виртуальной машине, а на всех, кто висит на бридже.

fate
() автор топика

qemu-kvm-1.1.2

// это же черти когда было, сейчас же 2.1.92 текущая версия, там много чего после 1.1.2 появилось и исправили, есть смысл обновиться, если важны стабильность и всё такое.

vim
()
Ответ на: комментарий от vel

Обнаружил вот что:

# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.000000000000 yes

То есть, бридж есть, а интерфейсов в нем нет. Теперь надо понять, что означает опция Source mode: Bridge в настройках сети виртуальной машины через virtual machine manager. Сдается мне, что virbr0 никак не связан с Source mode: Bridge.

Еще вопрос: как узнать в хост системе названия виртуальных сетевых интерфейсов моих ВМ? И как понять, какой интерфейс с какой ВМ связан?

fate
() автор топика
Ответ на: комментарий от vim

Дык она и ставилась черти когда =) Можно сказать, мне по наследству досталась. Если я обновлю на более новую версию, мои ВМ будут работать?

fate
() автор топика
Ответ на: комментарий от fate

мои ВМ будут работать?

прикалываешься, спроси у того пацана, который за это отвечает.

vim
()
Ответ на: комментарий от fate

Я всегда не мог понять - нахрена народ использует какие-то менеджеры, если они усложняют понимание настройки системы?

Нафига включать stp ? Лучше бы «setfd 0» для моста выполнил.

kvm умеет подключать сетевой интерфейс VM к мосту, а кто создает этот мост и кто еще туда подключен - это не его проблема :)

Еще вопрос: как узнать в хост системе названия виртуальных сетевых интерфейсов моих ВМ? И как понять, какой интерфейс с какой ВМ связан

имена ? они зависят от гостевой ОС и с хоста это не посмотреть. А идентифицировать проще всего по МАС-адресу.

у меня в конфиге VM написано

 -netdev type=tap,id=net1,ifname=tap0,script=/u/qemu/m1/ifup,downscript=/u/qemu/m1/ifdown,vhost=on \
 -device e1000,mac=0A:46:87:5B:3C:2E,netdev=net1,bus=pci.0,addr=0x12,id=net1 \
и я знаю, что сетевушка с MAC-ом 0A:46:87:5B:3C:2E на хосте соответствует tap0.

vel ★★★★★
()
Ответ на: комментарий от vel

Для виртуалки командой virsh dumpxml VMName получаю вывод:

<interface type='direct'> <mac address='52:54:00:73:10:24'/> <source dev='eth1' mode='bridge'/> <target dev='macvtap6'/> <model type='virtio'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>

Для добвления сетевого интерфейса ВМ в бридж, какое имя нужно использовать: macvtap6 или net0?

fate
() автор топика
Ответ на: комментарий от fate

да без понятия. Никогда не пользовался велосипедами типа virsh.

Запуская qemu/kvm без virsh проблем с тегированным трафиком нет.

Похоже ты не дочитал их вики про interface type & source

vel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.