Рейтинг:0

Linux: мост против vlan против tcpdump

флаг pk

У меня есть хост Proxmox с ядром 5.15.19-2-pve.

Он имеет интерфейс bond0, сделанный из eth2 и eth3, который получает тегированный трафик vlan.

Я создал мост vmbr666, который выглядит следующим образом:

# /etc/сеть/интерфейсы:
авто вмбр666
iface vmbr666 инет руководство
        мост-порты бонд0
        мост-стп выкл.
        мост-fd 0
        поддержка моста vlan да
        Мост-видео 2-4094
        мту 9220

# показать brctl
vmbr666 8000.5a0a13a9dd29 без связи0
                                                        кран151034i1
# ip -d ссылка sh dev vmbr666
66: vmbr666: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9220 qdisc noqueue state Режим UP DEFAULT group default qlen 1000
    ссылка/эфир 5a:0a:13:a9:dd:29 brd ff:ff:ff:ff:ff:ff неразборчивость 0 minmtu 68 maxmtu 65535 
    bridge forward_delay 0 hello_time 200 max_age 2000 ageing_time 30000 stp_state 0 приоритет 32768 vlan_filtering 1 vlan_protocol 802.1Q bridge_id 8000.5a:a:13:a9:dd:29 назначенный_root 8000.5a:a:13:a9:dd:29 root_port 0 root_path_cost 0 root_path_cost topology_change_detected 0 hello_timer    0.00 tcn_timer    0.00 topology_change_timer    0.00 gc_timer  251.81 vlan_default_pvid 1 vlan_stats_enabled 0 vlan_stats_per_port 0 group_fwd_mask 0 group_address 01:80:c2:00:00:00 mcast_snooping 1 mcast_router 1 mcast_query_use_ifaddr 0 mcast_querier 0 mcast_hash_elasticity 16 mcast_hash_max 4096 mcast_last_member_count 2 mcast_startup_query_count 2 mcast_last_member_interval 100 mcast_membership_interval 26000 mcast_querier_interval 25500 mcast_query_interval 12500 mcast_query_response_interval 1000 mcast_startup_query_interval 3124 mcast_stats_enabled 0 mast_igmp_version 2 mast_mld_version 1 nf_call_iptables 0 nf_call_pables 0cales_calse_calles_calles_calles_calles_calles_calles_callesshales_callesi_ 536 gso_max_segs 65535 

Обратите внимание, что vlan_filtering является 1.

Если я tcpdump-enlvvv на bond0 вижу трафик для VLAN42. Если я tcpdump на вмбр666 или же кран151034i1, не вижу трафика для VLAN42 (даже не широковещательные или многоадресные рассылки, хотя я вижу широковещательный трафик некоторых других VLAN). Вопрос: почему бы и нет?

Соответствующий вывод из бридж -c vlan показать:

bond0 1 Выход PVID без тегов
                  2-99
tap151034i1 1 Выход PVID без тегов
                  2-99
vmbr666 1 Выход PVID без тегов

Как я уже сказал, я вижу трафик для других VLAN на всех этих интерфейсах, включая теги, например.

15:03:35.293420 00:50:56:b1:24:0c > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), длина 64: vlan 49, p 0, ethertype ARP (0x0806) , Ethernet (длина 6), IPv4 (длина 4), Запрос у кого есть 10.76.155.200 подскажите 10.76.155.51, длина 46

Теперь добавим vlan 42 в вмбр666 интерфейс, чтобы увидеть, имеет ли это какое-либо значение:

# bridge vlan add vid 42 dev vmbr666 self
# bridge -c vlan show dev vmbr666        
порт vlan-id  
vmbr666 1 Выход PVID без тегов
                  42

В tcpdump -enlvvv -i vmbr666 Я по-прежнему не вижу ничего, связанного с vlan42, только другие VLAN (например, 49 и 50).

Создадим подынтерфейс для vlan42 на кран151034i1 как это:

ip ссылка добавить ссылку tap151034i1 имя тест тип vlan протокол 802.1q id 42 reorder_hdr вкл gvrp вкл mvrp вкл свободные_привязки выкл; ip link настроить dev test

Бег tcpdump -enlvvv -я тест Я вообще не вижу трафика.

Существует вмбр42, что может мешать (но если да, то почему мешает?):

vmbr42 8000.9a0f54fe1040 без связи0,42
                                                        fwpr103p0
                                                        fwpr104p0
                                                        fwpr105p0
                                                        fwpr151034p0
                                                        кран102i0

В ip -d ссылка ш:

31: vmbr42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state режим UP DEFAULT group default qlen 1000
    ссылка/эфир 9a:0f:54:fe:10:40 brd ff:ff:ff:ff:ff:ff неразборчивость 0 minmtu 68 maxmtu 65535 
    bridge forward_delay 0 hello_time 200 max_age 2000 ageing_time 30000 stp_state 0 приоритет 32768 vlan_filtering 0 vlan_protocol 802.1Q bridge_id 8000.9a:f:54:fe:10:40 назначенный_root 8000.9a:f:54:fe:10:40 root_port 0 root_path_cost 0 root_path_cost topology_change_detected 0 hello_timer    0.00 tcn_timer    0.00 topology_change_timer    0.00 gc_timer   53.08 vlan_default_pvid 1 vlan_stats_enabled 0 vlan_stats_per_port 0 group_fwd_mask 0 group_address 01:80:c2:00:00:00 mcast_snooping 1 mcast_router 1 mcast_query_use_ifaddr 0 mcast_querier 0 mcast_hash_elasticity 16 mcast_hash_max 4096 mcast_last_member_count 2 mcast_startup_query_count 2 mcast_last_member_interval 100 mcast_membership_interval 26000 mcast_querier_interval 25500 mcast_query_interval 12500 mcast_query_response_interval 1000 mcast_startup_query_interval 3124 mcast_stats_enabled 0 mast_igmp_version 2 mast_mld_version 1 nf_call_iptables 0 nf_call_pables 0cales_calse_calles_calles_calles_calles_calles_calles_callesshales_callesi_ 536 gso_max_segs 65535 

Обратите внимание, что vlan_filtering является 0.

Бег tcpump -enlvvv на вмбр42 или же кран102i0, который является одним из его членов, показывает трафик VLAN42 без тегов — ничего удивительного.

Нет блюда или же Арптабли правила.

Думаю, я не понимаю взаимодействие между членством в VLAN и мостовыми интерфейсами в Linux.

Некоторые теоретические вопросы:

  1. Каков эффект добавления VLAN к главному интерфейсу моста с себя ключевое слово в бридж влан добавить?
  2. Каков эффект от создания субинтерфейса VLAN интерфейса члена моста?
  3. Если физический интерфейс имеет подынтерфейс VLAN, и он добавлен к мосту, должны ли какие-либо кадры для этой VLAN быть видимыми на других мостах, членом которых является тот же физический интерфейс? Если нет, то почему?
  4. В чем разница, как с теоретической, так и с практической точки зрения, между, с одной стороны, созданием субинтерфейсов VLAN физических интерфейсов и их соединением, а с другой стороны, vlan_filtering на мосту и используя мост vlan pvid без тегов предоставить место некоторым интерфейсам-членам в конкретных VLAN?
  5. Можно ли смешивать эти два подхода?

РЕДАКТИРОВАТЬ: удалены материалы, которые были показаны в комментариях как неактуальные, и добавлены теоретические вопросы, которые, как мы надеемся, помогут лучше структурировать ответ.

Nikita Kipriyanov avatar
флаг za
Используете ли вы мосты с поддержкой vlan или нет в Proxmox? Пожалуйста, покажите, например. его конфигурация из `/etc/network/interfaces`. Также обратите внимание, что для мостов с поддержкой vlan `brctl` из `bridge-utils` является *неподходящим* инструментом; используйте утилиты `ip` и `bridge` из пакета `iproute2` (и, кстати, современный Debian использует их для установки мостов). Для просмотра настроек VLAN используйте что-то вроде `bridge vlan show`, для подчинения интерфейса — `ip link...set master...` и так далее. // Чтобы увидеть теги VLAN в tcpdump, используйте опцию `tcpdump -e`.
András Korn avatar
флаг pk
Мосты были созданы с использованием графического интерфейса Proxmox и не отображаются в `/etc/network/interfaces`. `brctl show` было единственной вещью, которую я использовал из `bridge-utils`, и она отлично работает независимо от того, включена `vlan_filtering` или нет. `vmbr666` включил его (так что он "осведомлен о vlan"); другие нет. Я проверил `bridge vlan show` - может быть, вы не так далеко зашли в вопросе?
András Korn avatar
флаг pk
Я обновил вопрос, чтобы он включал значение `vlan_filtering` для обоих исследованных мостов.
Nikita Kipriyanov avatar
флаг za
Сеть Proxmox помещается в `/etc/network/interfaces` или, возможно, в какой-то файл в каталоге `/etc/network/interfaces.d/`. Этот файл имеет тот же синтаксис.
András Korn avatar
флаг pk
Ах, вы правы, он сбрасывает его в сам `interfaces`, даже не в `interfaces.d` (куда я смотрел, ожидая, что все современное программное обеспечение будет использовать механизм `.d`).
Nikita Kipriyanov avatar
флаг za
Также используйте `bridge -c vlan show`. Он «сжимает» диапазоны VLAN в несколько строк. Также я не вижу записи `vmbr666` или `vmbr42` в вашем `bridge vlan show`. Какие вланы включены на этом порту? По умолчанию Proxmox не включает все вланы на мостовом порту «хоста».
Nikita Kipriyanov avatar
флаг za
Я прав, у вас bond0.42 в качестве подинтерфейса vlan 42 bond0, и он является слейвом vmbr42, а также ваш bond0 одновременно является слейвом vmbr666? Эта установка облажалась. По какому пути должны идти 42-тегированные пакеты: к vmbr42 через сабинтерфейс bond0.42 или к vmbr666 через bond0? Бьюсь об заклад, это первый.
András Korn avatar
флаг pk
Да, правильно по всем пунктам. Я допускаю, что установка работает не так, как ожидалось, но я не думаю, что она обязательно «облажалась». :) Я ожидаю, что пакеты с 42 тегами появятся в обоих местах -- на bond0.42 без тега, а также на vmbr666 с тегом. Если бы это был физический свитч, я бы определенно мог иметь столько интерфейсов в vlan42, сколько захочу, как с тегами, так и без, одновременно. Я также подозреваю, что vmbr42 «съедает» кадры, которые я ожидаю увидеть на vmbr666, но еще не проверял это.
Nikita Kipriyanov avatar
флаг za
До введения мостов с поддержкой VLAN Linux все направлял на «основные» интерфейсы, если он в бридже (где eth0.10 должен получать vlan tag 10 на eth0, но если вы поместите eth0 в какой-то бридж, eth0.10 не увидит никаких трафика — он будет на мосту). После введения мостов с поддержкой VLAN все в основном изменилось на противоположное.
Рейтинг:0
флаг za

Купить почему он должен появиться на интерфейсе бриджа?

Думайте о мосте Linux как о «виртуальном управляемом коммутаторе L2», где интерфейс моста — это средство для подключения самого хоста к коммутатору.Таким образом, интерфейс моста считается «портом коммутатора», к которому «подключен» хост-компьютер.

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

Возвращаясь к нашей «виртуальной» настройке: кран-порт виртуальной машины общается с «физическим» портом, которым является bond0, почему этот трафик должен быть виден на третьем несвязанном порту (который является «хостовым» портом, названным в честь самого моста) ? Запросы ARP — это единственные широковещательные пакеты, которые появляются в сети, и они правильно транслируются, поэтому вы их видите; остальное нет.

STP BPDU — это разные звери. Мост с включенной обработкой STP сам генерирует их и отправляет на каждый порт (с поддержкой STP). Если вы видите это на сервере, это, вероятно, означает, что вы что-то неправильно настроили. Лучше отключить STP на мосту, а также настроить порт на другой стороне (связанный интерфейс, например, Port-Channel, если это Cisco и т. д.), чтобы он был пассивным для STP (не посылайте никаких BPDU на порт, блокируйте порт, если получен BPDU).


УПД:

PVE не включает случайные вланы на хост-порте. Вот как мой bridve -c vlan показать выглядит:

root@vh2:~# bridge -c vlan показать
порт vlan-id  
enp5s0f0 1 Выход PVID без тегов
                  2-4094
vmbr0 1 Выход PVID без тегов
veth105i0 111 Выход PVID без тегов
veth110i0 1 Выход PVID без тегов
                  2-4094
veth107i0 1 Выход PVID без тегов
                  2-4094

(это полный). Конфиг этого моста в /etc/сеть/интерфейсы в принципе как у вас. Как вы видете, вмбр0 (который является единственным мостом на этом хосте) не имеет никаких VLAN, кроме 1 (который на самом деле является нетегированным 108 в этой сети).Поэтому, даже если я создам vmbr0.111 (подинтерфейс VLAN ID 111 моста), он не увидит никакого трафика, пока я не добавлю этот VLAN к интерфейсу vmbr0, несмотря на то, что VLAN 111 там очень громкий.


Почему ты споришь со мной? Я занимаюсь этим уже как минимум 14 лет:

root@vh2:~# ip link add testbr type bridge vlan_filtering 1 vlan_protocol 802.1Q
root@vh2:~# ip tuntap добавить режим tap0 tap
root@vh2:~# ip link set tap0 master testbr
root@vh2:~# bridge -c vlan show dev testbr
порт vlan-id  
testbr 1 Выход PVID без тегов
root@vh2:~# bridge -c vlan show dev tap0
порт vlan-id  
tap0 1 Выход PVID без тегов
root@vh2:~# bridge vlan add vid 100 dev testbr self pvid без тегов
root@vh2:~# bridge vlan add vid 100 dev tap0 pvid без тегов
root@vh2:~# bridge vlan del vid 1 dev testbr self
root@vh2:~# мост vlan del vid 1 dev tap0
root@vh2:~# bridge vlan add vid 200 dev testbr self
root@vh2:~# bridge -c vlan show dev testbr
порт vlan-id  
testbr 100 Выход PVID без тегов
                  200
root@vh2:~# bridge -c vlan show dev tap0
порт vlan-id  
tap0 100 Выход PVID без тегов
root@vh2:~# ip tuntap del tap0 mode tap
root@vh2:~# ip link del testbr
András Korn avatar
флаг pk
Я также не вижу запросов ARP, связанных с VLAN42 на `vmbr666`, и когда я создаю явный интерфейс vlan42, подключенный к мосту, он по-прежнему не получает никакого трафика — даже не отвечает на запросы ARP, которые он отправляет. (Мне все еще нужно проверить, покидают ли вообще хост запросы ARP.)
András Korn avatar
флаг pk
Я ценю, что вы пытаетесь помочь, но установка, которую вы вставили, не аналогична моей ситуации. В моем случае все соответствующие интерфейсы имеют членство во всех VLAN. Вы также не можете `bridge vlan добавить` VLAN к интерфейсу моста, такому как `vmbr0`, если только этот интерфейс сам не является членом моста. Продолжайте и попробуйте (вы получите «ответы RTNETLINK: операция не поддерживается»). Я также создал не интерфейс vmbr666.42, а интерфейс .42 члена моста (`tapXXXXX.42`).
Nikita Kipriyanov avatar
флаг za
Нет, вы абсолютно не правы. **Интерфейс моста, такой как `vmbr0`, всегда является членом моста**, он является членом моста, который является самим собой, и обозначает порт, который соединяет хост с мостом. Я делал это много раз, я делал это, используя файлы интерфейсов Debian (это на самом деле часть кластера). У меня есть система, построенная с сетевой конфигурацией systemd, в которой несколько ответвлений OpenVPN имели разные PVID, а сам интерфейс моста имеет другой PVID, а физический сетевой адаптер — это магистраль с тегами. Ваше сообщение об ошибке, вероятно, связано с тем, что вы только что неправильно написали команду.
András Korn avatar
флаг pk
Я обновил свой вопрос, чтобы показать, что это не так.
Nikita Kipriyanov avatar
флаг za
Вы чрезвычайно упрямы, но вместо этого лучше быть предельно внимательным.Для настройки vlans на интерфейсе master bridge вы добавляете ключевое слово «self» (оно описано в `man bridge`). Кроме того, опять же, неправильно делать что-либо с интерфейсом, который является подчиненным мостом. У него не должно быть подынтерфейсов vlan, конфигураций IP и так далее.
András Korn avatar
флаг pk
Я действительно пропустил ключевое слово `self` на странице руководства. Спасибо, что указали на это. С помощью `self` я действительно могу добавить vlan42 к интерфейсу главного моста vmbr666. Тем не менее, он по-прежнему не показывает никакого широковещательного трафика в vlan42, когда я использую `tcpdump -enlvvv`, только широковещательный трафик для других VLAN, так что это, вероятно, отвлекающий маневр. Я не уверен, что понимаю, что на самом деле делает добавление VLAN к интерфейсу моста, поскольку у меня есть только «1» и «42», и он все еще видит широковещательный трафик, например. vlan49, а не 42.
András Korn avatar
флаг pk
И для протокола: я не «спорю с вами»; Я пытаюсь понять, что происходит, и указываю, где то, что я вижу, противоречит тому, что вы говорите. Вполне возможно, что вы правы; Я надеюсь, что в конце концов мы сможем прийти к ответу, который я приму.
Nikita Kipriyanov avatar
флаг za
Добавление VLAN к порту моста аналогично добавлению VLAN к порту коммутатора, если это был физический коммутатор вместо моста. Пока вы не добавите VLAN к порту, этот порт не будет участвовать в VLAN и не должен видеть никакого трафика для этой VLAN, а мост не должен принимать какой-либо трафик для этой VLAN, исходящий от неучаствующего порта. Опять же, это включает порт моста, обращенный к хосту: если вы хотите видеть трафик на порту, добавьте эту VLAN к «главному» порту.
András Korn avatar
флаг pk
Но, опять же, это противоречит тому, что я вижу. Я не добавлял никаких VLAN к `vmbr666`, и все же я мог видеть трансляции для vlan49 и 50 на нем (но не для vlan42); использование `bridge vlan add ... self` для добавления vlan42 не дало заметной разницы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.