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

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

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

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

# /etc/network/interfaces:
auto vmbr666
iface vmbr666 inet manual
        bridge-ports bond0
        bridge-stp off
        bridge-fd 0
        bridge-vlan-aware yes
        bridge-vids 2-4094
        mtu 9220

# brctl show
vmbr666         8000.5a0a13a9dd29       no              bond0
                                                        tap151034i1
# ip -d link sh dev vmbr666
66: vmbr666: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9220 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 5a:0a:13:a9:dd:29 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 65535 
    bridge forward_delay 0 hello_time 200 max_age 2000 ageing_time 30000 stp_state 0 priority 32768 vlan_filtering 1 vlan_protocol 802.1Q bridge_id 8000.5a:a:13:a9:dd:29 designated_root 8000.5a:a:13:a9:dd:29 root_port 0 root_path_cost 0 topology_change 0 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 mcast_igmp_version 2 mcast_mld_version 1 nf_call_iptables 0 nf_call_ip6tables 0 nf_call_arptables 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 

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

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

Соответствующий вывод из bridge -c vlan show:

bond0             1 PVID Egress Untagged
                  2-99
tap151034i1       1 PVID Egress Untagged
                  2-99
vmbr666           1 PVID Egress Untagged

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

15:03:35.293420 00:50:56:b1:24:0c > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 64: vlan 49, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 10.76.155.200 tell 10.76.155.51, length 46

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

# bridge vlan add vid 42 dev vmbr666 self
# bridge -c vlan show dev vmbr666        
port              vlan-id  
vmbr666           1 PVID Egress Untagged
                  42

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

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

ip link add link tap151034i1 name test type vlan protocol 802.1q id 42 reorder_hdr on gvrp on mvrp on loose_binding off; ip link set up dev test

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

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

vmbr42          8000.9a0f54fe1040       no              bond0.42
                                                        fwpr103p0
                                                        fwpr104p0
                                                        fwpr105p0
                                                        fwpr151034p0
                                                        tap102i0

В ip -d link sh:

31: vmbr42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 9a:0f:54:fe:10:40 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 65535 
    bridge forward_delay 0 hello_time 200 max_age 2000 ageing_time 30000 stp_state 0 priority 32768 vlan_filtering 0 vlan_protocol 802.1Q bridge_id 8000.9a:f:54:fe:10:40 designated_root 8000.9a:f:54:fe:10:40 root_port 0 root_path_cost 0 topology_change 0 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 mcast_igmp_version 2 mcast_mld_version 1 nf_call_iptables 0 nf_call_ip6tables 0 nf_call_arptables 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 

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

Бег tcpump -enlvvv на vmbr42 или tap102i0который является одним из его членов, показывает трафик VLAN42 без тегов — никаких сюрпризов.

Нет ebtables или arptables правила.

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

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

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

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

vlan мост tcpdump pcap

Андраш Корн

1 ответ
1

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

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

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

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

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


УПД:

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

root@vh2:~# bridge -c vlan show
port              vlan-id  
enp5s0f0          1 PVID Egress Untagged
                  2-4094
vmbr0             1 PVID Egress Untagged
veth105i0         111 PVID Egress Untagged
veth110i0         1 PVID Egress Untagged
                  2-4094
veth107i0         1 PVID Egress Untagged
                  2-4094

(это полный). Конфиг этого моста в /etc/network/interfaces в принципе как у вас. Как вы видете, vmbr0 (который является единственным мостом на этом хосте) не имеет никаких 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 add tap0 mode tap
root@vh2:~# ip link set tap0 master testbr
root@vh2:~# bridge -c vlan show dev testbr
port              vlan-id  
testbr            1 PVID Egress Untagged
root@vh2:~# bridge -c vlan show dev tap0
port              vlan-id  
tap0              1 PVID Egress Untagged
root@vh2:~# bridge vlan add vid 100 dev testbr self pvid untagged
root@vh2:~# bridge vlan add vid 100 dev tap0 pvid untagged
root@vh2:~# bridge vlan del vid 1 dev testbr self
root@vh2:~# bridge vlan del vid 1 dev tap0
root@vh2:~# bridge vlan add vid 200 dev testbr self
root@vh2:~# bridge -c vlan show dev testbr
port              vlan-id  
testbr            100 PVID Egress Untagged
                  200
root@vh2:~# bridge -c vlan show dev tap0
port              vlan-id  
tap0              100 PVID Egress Untagged
root@vh2:~# ip tuntap del tap0 mode tap
root@vh2:~# ip link del testbr

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *