Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    Proxmox 5.0 и OVS с «dot1q-tunnel»

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Proxmox 5.0 и OVS с «dot1q-tunnel», Proxmox Виртуальная Среда
     
    David Herselman
    Guest
    #1
    0
    10.04.2017 13:40:00
    Я очень рад видеть, что Proxmox использует Debian, и что в Debian Stretch появится ядро 4.10. В нем включена недавно влитая поддержка QinQ VLAN, которая значительно ускорит OVS, но что для нас важнее — добавит необходимую поддержку ядра для «dot1q-tunneling». У коммутаторов Cisco есть функция инкапсуляции как неразмеченных, так и размеченных фреймов внутри другого VLAN при входящем трафике, это реализуется через настройку порта в режим «dot1q-tunnel». Другие производители сетевого оборудования имеют похожие функции, но называют их по-разному (D-Link называет это QinQ VLANs, Netgear — Double VLANs). Эрик Гарвер активно продвигает эту интеграцию, и код ядра был включен в версию 4.9, после чего он упорно трудился, чтобы влить свой код в OVS и завершить эту функциональность. Было бы невероятно удобно использовать это прямо из графического интерфейса Proxmox, чтобы можно было настроить порт сетевого интерфейса гостевой системы как «access», «trunk» или «dot1q-tunnel». Пример команды OVS: ovs-vsctl set port ovs-p0 vlan_mode=dot1q-tunnel tag=4094
     
     
     
    David Herselman
    Guest
    #2
    0
    05.04.2018 14:44:00
    Мы активно используем QinQ VLAN и были ограничены Linux bridge. Однако Linux Bridge не поддерживает VLAN, из-за чего возникали другие неудобства, с которыми постоянно приходилось бороться. Я также обновил Bugzilla, но рады сообщить, что поддержка 'dot1q-tunnel' в OVS работает прекрасно... Эрик Гарвер, ответственный за внедрение этого в OVS и ядро, опубликовал несколько очень интересных статей по производительности (программный QinQ сравним с аппаратным VXLAN) и применению:  
    https://developers.redhat.com/blog/2017/06/06/open-vswitch-overview-of-802-1ad-qinq-support/  
    https://developers.redhat.com/blog/2017/06/27/open-vswitch-qinq-performance/

    Мы завершили тестирование и планируем перевести первые пару виртуальных роутеров и фаерволов в продакшен на эту технологию. Наши заметки:

    1. Сначала запустите OVS с пакетами по умолчанию из Proxmox  
    2. Скачайте Debian-бинарники для SID:  
    https://packages.debian.org/sid/openvswitch-common  
    https://packages.debian.org/sid/openvswitch-switch  
    3. Обновите пакеты: dpkg -i *.deb; apt-get -f install;  
    4. Примените патч к /usr/share/perl5/PVE/Network.pm

    Код патча:  
    --- /root/Network.pm    2018-02-19 12:41:12.000000000 +0200  
    +++ /usr/share/perl5/PVE/Network.pm    2018-04-05 11:42:12.904719562 +0200  
    @@ -251,9 +251,9 @@  
        $trunks =~ s/;/,/g if $trunks;

        my $cmd = "/usr/bin/ovs-vsctl add-port $bridge $iface";  
    -    $cmd .= " tag=$tag" if $tag;  
    -    $cmd .= " trunks=". join(',', $trunks) if $trunks;  
    -    $cmd .= " vlan_mode=native-untagged" if $tag && $trunks;  
    +    $cmd .= " vlan_mode=dot1q-tunnel tag=$tag other-config:qinq-ethtype=802.1q" if $tag;  
    +    $cmd .= " cvlans=". join(',', $trunks) if $trunks && $tag;  
    +    $cmd .= " trunks=". join(',', $trunks) if $trunks && !$tag;

        $cmd .= " -- set Interface $iface type=internal" if $internal;  
        system($cmd) == 0 ||  

    Это устанавливает порт сетевого адаптера ВМ как 'dot1q-tunnel', который будет инкапсулировать все пакеты при входе и удалять внешний тег при выходе. Voilà — роутер на одной шине, фаервол на одной шине и т.д.
     
     
     
    wbumiller
    Guest
    #3
    0
    06.04.2018 10:00:00
    Можно проверить, сработает ли vlan-aware linux bridge с параметром `/sys/class/net/vmbr0/bridge/vlan_protocol`, установленным в 0x88a8. Сейчас мы в сетевых настройках показываем только флаг vlan filtering, но добавление протокола vlan может быть полезным для кого-то. Пока это нужно добавлять вручную в скриптах post-up в /etc/network/interfaces.
     
     
     
    David Herselman
    Guest
    #4
    0
    09.04.2018 21:41:00
    Настройка порта dot1q-tunnel работает безупречно, я бы настоятельно порекомендовал Proxmox рассмотреть возможность стандартизации на OVS и внедрения относительно простой патчи.
     
     
     
    jonatan
    Guest
    #5
    0
    30.05.2018 00:44:00
    Пожалуйста, добавьте нативную поддержку для qinq, +1 за это.
     
     
     
    David Herselman
    Guest
    #6
    0
    30.05.2018 14:33:00
    Запуск виртуальных файрволов или роутеров без необходимости большого количества интерфейсов возможен с использованием QinQ VLAN. Разные сайты, зоны или сервисы доставляются виртуальному гостю, поддерживающему VLAN, с помощью внешнего VLAN доставки клиента. Это фактически требует от Proxmox снимать внешний тег VLAN на выходе к виртуальной машине и оборачивать все фреймы, исходящие из виртуалки, в такой же VLAN тег.

    Пример виртуального роутера:  
    Код:  
    vlan950 - Кастомер А  
    vlan10 - интернет  
    vlan11 - хостинг  
    vlan12 - Сайт А  
    vlan13 - Сайт Б  
    vlan14 - Сайт В  

    Пакет при выходе с хоста виртуальной машины будет иметь внешний тег 950 и внутренний тег 10, если он идет из виртуального роутера клиента в сторону интернета. Это можно реализовать либо с помощью запуска Proxmox с нелокальным Linux bridge, который не поддерживает VLAN, либо используя более свежий пакет openvswitch, чтобы использовать возможности QinQ VLAN в ядре версии 4.9 и новее.

    Нелокальный Linux bridge — решение не идеальное, ведь при хостинге виртуальных роутеров и файрволов он будет путаться, так как исходящий MAC-адрес будет выглядеть, как будто приходит из разных направлений. Установка опции 'vlan_protocol' у VLAN-aware Linux bridge на 802.1ad (0x88a8), вместо стандартного 802.1Q (0x8100), может помочь, но тогда все коммутаторы и маршрутизаторы должны будут обрабатывать внешний тег как тег VLAN провайдера услуг.

    Эрик Гарвер руководил разработкой QinQ VLAN патчей для OVS, а также изменениями в ядре. Он также публиковал информацию о производительности, показывая, что такой подход работает лучше, чем аппаратно-ускоренный VXLAN или GENEVE:  
    https://developers.redhat.com/blog/2017/06/06/open-vswitch-overview-of-802-1ad-qinq-support/  
    https://developers.redhat.com/blog/2017/06/27/open-vswitch-qinq-performance/

    Proxmox версии 5.0 и выше содержит нужное ядро для поддержки этого из коробки, а также поддерживает более свежие версии OVS. Пакеты openvswitch 2.8.1+dfsg1-6 из Debian Sid стабильны и без проблем работают на Debian Stretch.

    Применение патча к файлу '/usr/share/perl5/PVE/Network.pm' (описанному выше) просто превращает интерфейс ВМ в порт инкапсуляции и повышает безопасность, так как обмен VLAN будет невозможен — на порту просто не будет нативного VLAN. Это полностью совместимо с обычными хостами (например, Windows-гостями), но при этом даёт возможность использовать QinQ VLAN, когда это нужно.

    Опция транкинга VLAN продолжает работать так же, как и сейчас.
     
     
     
    pieteras.meyer
    Guest
    #7
    0
    29.07.2019 16:17:00
    Привет, Proxmox! Нам тоже нужны эти функции, не могли бы вы, пожалуйста, добавить их в сам Proxmox?
     
     
     
    David Herselman
    Guest
    #8
    0
    30.07.2019 02:38:00
    Proxmox 6 теперь включает OvS 2.10, нужно всего лишь пропатчить /usr/share/perl5/PVE/Network.pm, как описано выше (изменить 3 строки). В любом случае спасибо за поддержку!
     
     
     
    pieteras.meyer
    Guest
    #9
    0
    30.07.2019 10:20:00
    Привет, Дэвид! Спасибо, что ответил, и спасибо, что поделился своими знаниями. У меня есть ещё один вопрос. Мы также активно используем QinQ и QinQinQ. После обновления до PVE6 и внесения изменений в /usr/share/perl5/PVE/Network.pm, можно ли настроить использование указанных ниже опций через графический интерфейс? И запускается ли команда ovs-vsctl автоматически? Как это сказывается на работе в среде с высокой доступностью (HA) или при миграции виртуальных машин между хостами?

    - Подключение сетевого адаптера виртуалки к мосту с указанием VLAN ID:

    Строка конфигурации сети виртуальной машины:
    net0: virtio=E4:8D:8C:82:94:97,bridge=vmbr0,tag=1

    Сгенерированная команда:
    /usr/bin/ovs-vsctl add-port vmbr0 tap101i0 vlan_mode=dot1q-tunnel tag=1 other-config:qinq-ethtype=802.1q

    Результат: Виртуальный роутер отлично общается со всеми остальными сетевыми устройствами. Вот примеры:

    Интерфейс                   - Виртуальная машина       - Сеть                       = Тестирование  
    ether1                      - Без тегирования          - VLAN 1                     = ОК  
    ether1-vlan50               - 802.1Q:1                 - VLAN 1 с QinQ 50            = ОК  
    ether1-vlan50-vlan10        - 802.1Q:1_802.1Q:50       - VLAN 1 с QinQinQ 50:10      = ОК  
    ether1-vlan60               - 802.1Q:1_802.1Q:60       - VLAN 1 с QinQ 60            = ОК
     
     
     
    David Herselman
    Guest
    #10
    0
    01.08.2019 02:18:00
    Всё работает как задумано: живая миграция, управление через GUI и так далее. Протестировано и работает в продакшене с нетегированными (trunks всех VLAN), выборочным trunking или указанием тега, в этом случае порт OvS инкапсулирует все пакеты, получаемые от ВМ. Это то же самое, что подключить файрвол или роутер к коммутатору Cisco, где порт настроен как 'dot1q-tunnel'.
     
     
     
    pieteras.meyer
    Guest
    #11
    0
    08.08.2019 09:50:00
    Привет, Дэвид! Спасибо за ответ, я добавил эту поддержку, и, похоже, она отлично работает. У меня есть ещё вопрос: знаешь ли ты, возможно ли сделать двойной QinQ-теггинг? То есть двойной Stag? Что-то вроде этого:

    Interface – VM – Network  
    ether1-vlan50-vlan10 – без тегов – QinQinQ 50:10:untagged

    В Linux это можно сделать так:  
    ip link add link eth0 name eth0.50 mtu 9000 type vlan id 50  
    ip link add link eth0.50 eth0.50.20 mtu 8996 type vlan id 10
     
     
     
    David Herselman
    Guest
    #12
    0
    09.08.2019 19:25:00
    Навряд ли без кастомизации GUI и скрипта, который вы уже редактировали. OvS поддерживает обработку двойной инъекции тегов на стороне хоста. Однако мы не делали патчи, так как рассматриваем OvS как обычный стандартный коммутатор. Мы транзитируем все или выбранные VLAN на несколько виртуальных маршрутизаторов и подключаем серверы, маршрутизаторы арендаторов и межсетевые экраны через режим dot1q-tunnel. Виртуальные устройства могут накладывать столько тегов, сколько нужно, используя максимальный размер MTU системы (обычно 64KiB), после чего пакет передается для аппаратного оффлоада, который либо передаст пакет как есть, либо добавит тег. То есть: виртуальные маршрутизаторы, межсетевые экраны и серверы могут использовать свои VLAN, а порт dot1q-tunnel выступит как инкапсулятор для всего. Виртуальная машина будет работать в VLAN 10, Proxmox добавит VLAN 50.
     
     
     
    pieteras.meyer
    Guest
    #13
    0
    12.08.2019 08:57:00
    Привет, Дэвид! Спасибо. Можешь привести пример команды ovs-vsctl для добавления двойной маркировки (double tag) в OVS, чтобы имитировать вот это в Linux?  
    ip link add link eth0 name eth0.50 mtu 9000 type vlan id 50  
    ip link add link eth0.50 eth0.50.20 mtu 8996 type vlan id 10
     
     
     
    David Herselman
    Guest
    #14
    0
    12.08.2019 14:12:00
    Привет! В посте Эрика Гарвера подробно описаны примеры настройки портов QinQ на стороне OvS, чтобы ВМ могла работать просто с нетегированными пакетами. Сейчас у нас такой задачи нет, и для этого требуется настроить две отдельные правила для входящего и исходящего трафика каждого интерфейса ВМ. Вот ссылка на пост: https://developers.redhat.com/blog/2017/06/06/open-vswitch-overview-of-802-1ad-qinq-support/

    Кратко по сути:  
    ovs-vsctl set Open_vSwitch . other_config:vlan-limit=2  
    ovs-appctl revalidator/purge  
    ovs-ofctl in_port=1 action=push_vlan:0x88a8,mod_vlan_vid=1000,output:2  
    ovs-ofctl in_port=2 action=pop_vlan,output:1  

    P.S. Первые две команды глобально настраивают OvS на обработку двух VLAN-тегов и, скорее всего, их стоит добавить в скрипт инициализации системы. Третю и четвёртую команды надо запускать из скрипта /usr/share/perl5/PVE/Network.pm, там, вероятно, понадобится дополнительная логика для определения номеров портов OvS для этих действий.

    Для сравнения: режим dot1q-tunnel во многом автоматизирует процесс, требуя всего одной команды. Вот так QinQ пакеты при этом принимаются с тегами VLAN 100 или 200:  
    ovs-vsctl set port ovs-p0 vlan_mode=dot1q-tunnel tag=1000 cvlans=100,200

    Как я пытался объяснить выше, у нас в основном работают виртуальные маршрутизаторы и файрволы с VLAN, а все пакеты, уходящие из ВМ, дополнительно оборачиваются в VLAN. В итоге пакет становится QinQ-тегированным, при этом ВМ обрабатывает внутренние теги, а OvS просто добавляет и снимает внешние.
     
     
     
    pieteras.meyer
    Guest
    #15
    0
    12.08.2019 14:27:00
    Спасибо, Дэвид. Ценю твою помощь.
     
     
     
    uberdome
    Guest
    #16
    0
    31.10.2019 17:40:00
    Это именно то поведение, которого я сейчас пытаюсь достичь. Я вношу предложенные изменения в нашу тестовую систему, но понимаю, что боюсь использовать эту конфигурацию до её нативной реализации, так как возврат назад может быть проблемой. Я не видел никаких обновлений по фактической нативной реализации этой функции. Есть ли какой-то прогресс по поводу OVS в PVE 6 с использованием dot1q-tunneling?
     
     
     
    David Herselman
    Guest
    #17
    0
    12.05.2020 13:56:00
    libpve-common-perl 6.1 получил новый формат, прилагаются соответствующие патчи для поддержки режима dot1q-tunnel на порту моста OvS, к которому подключается сетевая карта виртуальной машины:

    Код:
    --- /usr/share/perl5/PVE/Network.pm.orig        2020-05-08 16:54:14.734230861 +0200  
    +++ /usr/share/perl5/PVE/Network.pm     2020-05-08 16:55:14.739249932 +0200  
    @@ -249,8 +249,10 @@  
       # первая команда  
       push @$cmd, '--', 'add-port', $bridge, $iface;  
       push @$cmd, "tag=$tag" if $tag;  
    -   push @$cmd, "trunks=". join(',', $trunks) if $trunks;  
    -   push @$cmd, "vlan_mode=native-untagged" if $tag && $trunks;  
    +   push @$cmd, "vlan_mode=dot1q-tunnel" if $tag;  
    +   push @$cmd, "other-config:qinq-ethtype=802.1q" if $tag;  
    +   push @$cmd, "cvlans=". join(',', $trunks) if $trunks && $tag;  
    +   push @$cmd, "trunks=". join(',', $trunks) if $trunks && !$tag;  

       if ($internal) {  
          # вторая команда  

    Вам не нужно менять больше ничего, кроме того, чтобы уже использовать OvS. В Proxmox 6.0+ есть всё необходимое для поддержки этого. По сути, этот патч превращает порт в UNI QinQ порт, который оборачивает как нетегированные, так и тегированные пакеты, приходящие в другой VLAN, и снимает внешний VLAN при доставке. Это обеспечивает защиту от угроз, связанных с перемещением по native VLAN, и позволяет виртуальным машинам использовать VLAN для разделения трафика.

    Если вы не укажете VLAN ID на сетевом интерфейсе ВМ, то порт OvS будет работать как транковый порт с доступом ко всем VLAN, проходящим через OvS (это поведение не изменено патчем). Если вы укажете VLAN ID, OvS будет убирать тег при доставке и оборачивать весь входящий трафик тегом VLAN. Также опционально можно использовать параметр 'trunks', чтобы ограничить разрешённые VLAN.
     
     
     
    David Herselman
    Guest
    #18
    0
    13.05.2020 09:51:00
    Привет, Pieteras! Скорее всего, ты найдёшь нужные функции здесь: https://pve.proxmox.com/pve-docs/chapter-pvesdn.html
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры