Puncte:0

Linux: bridge vs vlan vs tcpdump

drapel pk

Am o gazdă Proxmox cu kernel 5.15.19-2-pve.

Are o interfață bond0 făcută din eth2 și eth3, care primește trafic etichetat vlan.

Am creat un bridge vmbr666 care arată așa:

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

# brctl show
vmbr666 8000.5a0a13a9dd29 fara obligatie0
                                                        tap151034i1
# ip -d link sh dev vmbr666
66: vmbr666: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9220 qdisc noqueue state UP mode DEFAULT grup implicit qlen 1000
    link/ether 5a:0a:13:a9:dd:29 brd ff:ff:ff:ff:ff:ff promiscuitate 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:root:29:root:29:root:29:root:29:root:29:root:29:root:29:10:13 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 65 536 gso_max_segs 65535 

Rețineți că vlan_filtering este 1.

Dacă eu tcpdump -enlvvv pe bond0, văd trafic pentru VLAN42. Dacă am tcpdump pe vmbr666 sau tap151034i1, nu văd trafic pentru VLAN42 (nici măcar emisiuni sau multicast, chiar dacă văd traficul de difuzare a altor VLAN-uri). Întrebare: de ce nu?

Ieșire relevantă de la pod -c vlan show:

bond0 1 PVID Egress Neetichetat
                  2-99
tap151034i1 1 Ieșire PVID Neetichetat
                  2-99
vmbr666 1 Ieșire PVID Neetichetat

După cum am spus, văd trafic pentru alte VLAN-uri pe toate aceste interfețe, inclusiv etichete, de ex.

15:03:35.293420 00:50:56:b1:24:0c > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), lungime 64: vlan 49, p 0, ethertype ARP (0x0806) , Ethernet (len 6), IPv4 (len 4), Solicitare cine-are 10.76.155.200 spune 10.76.155.51, lungime 46

Acum să adăugăm vlan 42 la vmbr666 interfață pentru a vedea dacă face vreo diferență:

# bridge vlan add vid 42 dev vmbr666 self
# bridge -c vlan show dev vmbr666        
port vlan-id  
vmbr666 1 Ieșire PVID Neetichetat
                  42

În tcpdump -enlvvv -i vmbr666 Încă nu văd nimic legat de vlan42, doar alte VLAN-uri (de exemplu, 49 și 50).

Să creăm o subinterfață pentru vlan42 activat tap151034i1 ca aceasta:

link ip adăugați link tap151034i1 nume tip test vlan protocol 802.1q id 42 reorder_hdr on gvrp on mvrp on loose_binding off; testul de dezvoltare a setării linkului ip

Alergare tcpdump -enlvvv -i test Nu văd deloc trafic.

Este un vmbr42, care poate interfera (dar dacă da, de ce interferează?):

vmbr42 8000.9a0f54fe1040 fără obligație0,42
                                                        fwpr103p0
                                                        fwpr104p0
                                                        fwpr105p0
                                                        fwpr151034p0
                                                        tap102i0

În ip -d link sh:

31: vmbr42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT grup implicit qlen 1000
    link/ether 9a:0f:54:fe:10:40 brd ff:ff:ff:ff:ff:ff promiscuitate 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:10:40:root:40 root:0f0_root:40 root:0f0_root:40 root:0f0_root:40:0f0_cost:0: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 65 536 gso_max_segs 65535 

Rețineți că vlan_filtering este 0.

Alergare tcpump -enlvvv pe vmbr42 sau tap102i0, care este unul dintre membrii săi, arată traficul VLAN42, fără etichete -- fără surprize acolo.

Nu sunt ebtables sau arptables reguli.

Bănuiesc că nu înțeleg interacțiunea dintre apartenența la VLAN și interfețele bridge în Linux.

Cateva intrebari teoretice:

  1. Care este efectul adăugării unui VLAN la o interfață master bridge cu de sine cuvânt cheie în bridge vlan add?
  2. Care este efectul creării unei subinterfețe VLAN a unei interfețe membre de punte?
  3. Dacă o interfață fizică are o subinterfață VLAN și aceasta este adăugată la o punte, se presupune că vreun cadru pentru acel VLAN este vizibil pe alte poduri din care face parte aceeași interfață fizică? Dacă nu, de ce nu?
  4. Care este diferența, dintr-o perspectivă teoretică și practică, între, pe de o parte, crearea subinterfețelor VLAN ale interfețelor fizice și crearea de punți a acestora și, pe de altă parte, permiterea vlan_filtering pe un pod și folosind bridge vlan pvid neetichetat pentru a da loc unor interfețe membre în VLAN-uri specifice?
  5. Puteți combina aceste două abordări?

EDITARE: a eliminat lucrurile care au fost arătate în comentarii ca fiind irelevante și au adăugat întrebări teoretice pentru a ajuta, sperăm, să structurați mai bine răspunsul.

Nikita Kipriyanov avatar
drapel za
Folosiți poduri vlan-aware sau nu vlan-aware în Proxmox? Vă rog, arătați de ex. configurația sa din `/etc/network/interfaces`. De asemenea, vă rugăm să rețineți că pentru podurile vlan-aware `brctl` de la `bridge-utils` este un instrument *nepotrivit*; utilizați `ip` și `bridge` utilitare din pachetul `iproute2` (și, apropo, Debian modern le folosește pentru a configura poduri în zilele noastre). Pentru a lua în considerare setările VLAN, folosiți ceva de genul `bridge vlan show`, pentru a înrobiza interfața â `ip link ... set master ...` și așa mai departe. // Pentru a vedea etichetele VLAN în tcpdump, utilizați opțiunea `tcpdump -e`.
András Korn avatar
drapel pk
Punturile au fost create folosind GUI Proxmox și nu apar în `/etc/network/interfaces`. `brctl show` a fost singurul lucru pe care l-am folosit de la `bridge-utils` și funcționează bine indiferent dacă `vlan_filtering` este activat sau nu. `vmbr666` îl are activat (deci este „vlan aware”); ceilalti nu. Am verificat „bridge vlan show” -- poate nu ați ajuns atât de departe în întrebare?
András Korn avatar
drapel pk
Am actualizat întrebarea, astfel încât să includă valoarea `vlan_filtering` pentru ambele poduri pe care le-am examinat.
Nikita Kipriyanov avatar
drapel za
Rețeaua Proxmox este introdusă în `/etc/network/interfaces` sau, probabil, un fișier din directorul drop `/etc/network/interfaces.d/`. Fișierul are aceeași sintaxă.
András Korn avatar
drapel pk
Ah, ai dreptate, îl aruncă în `interfaces` în sine, nici măcar în `interfaces.d` (unde m-am uitat, așteptându-mă ca toate programele moderne să folosească mecanismul `.d`.
Nikita Kipriyanov avatar
drapel za
De asemenea, utilizați `bridge -c vlan show`. Acesta „comprimă” intervalele VLAN în câteva linii. De asemenea, nu văd o intrare „vmbr666” sau „vmbr42” în „bridge vlan show”. Ce vlan-uri sunt activate pe acel port? În mod implicit, Proxmox nu activează toate vlan-urile pe portul bridge „gazdă”.
Nikita Kipriyanov avatar
drapel za
Am dreptate, aveți bond0.42 ca subinterfață vlan 42 a bond0 și este un sclav al vmbr42 și, de asemenea, bond0 dvs. este, în același timp, un sclav al vmbr666? Această configurație este înșurubată. Ce cale ar trebui să ia pachetele etichetate cu 42, către un vmbr42 prin subinterfața bond0.42 sau către vmbr666 prin bond0? Pun pariu că este primul.
András Korn avatar
drapel pk
Da, corect din toate punctele de vedere. Vă spun că setarea nu funcționează așa cum era de așteptat, dar nu cred că este neapărat „înșurubat”. :) M-aș aștepta ca pachetele cu 42 de etichete să apară în ambele locuri -- pe bond0.42 fără etichetă, precum și pe vmbr666 cu etichetă. Dacă acesta ar fi un comutator fizic, cu siguranță aș putea avea în vlan42 câte interfețe vreau, atât cu etichetare, cât și fără etichetare, simultan. De asemenea, bănuiesc că vmbr42 „mâncă” cadrele pe care mă aștept să le văd pe vmbr666, dar nu am verificat încă acest lucru.
Nikita Kipriyanov avatar
drapel za
Înainte de introducerea podurilor conștiente de VLAN, Linux a direcționat totul către interfețele „principale” dacă se află în bridge (unde eth0.10 ar trebui să primească eticheta vlan 10 pe eth0, dar dacă puneți eth0 într-un bridge, eth0.10 nu va vedea niciuna). trafic â va fi în pod). După introducerea podurilor conștiente de VLAN, lucrurile s-au schimbat practic pentru a fi opus.
Puncte:0
drapel za

Cumpărați de ce ar trebui să apară pe interfața bridge-ului?

Gândiți-vă bridge-ul Linux ca un „comutator L2 gestionat virtual”, unde interfața bridge este un mijloc pentru ca gazda în sine să fie conectată la comutator.Deci, interfața bridge este considerată a fi un „port de comutare” unde computerul gazdă este „conectat”.

Acum, să schimbăm comutatorul „virtual” la unul real pentru un minut. Un port comunică cu un alt port. Natura comutatorului este că acest trafic nu ar trebui să fie vizibil pe alte porturi: inundă traficul doar atunci când nu are nicio idee pe care port se află adresa MAC de destinație sau dacă adresa este difuzată.

Revenind la setarea noastră „virtuală”: portul de atingere al mașinii virtuale vorbește cu portul „fizic”, care este bond0, de ce ar trebui să se vadă acest trafic pe al treilea port fără legătură (care este portul „gazdă”, numit după podul însuși) ? Interogările ARP sunt singurele pachete de difuzare care apar în rețea și acestea sunt difuzate corect, astfel încât să le vedeți; restul nu este.

STP BPDU-urile sunt animale diferite. Puntea cu procesare STP activată le generează în sine și le trimite către fiecare port (activat pentru STP). Dacă îl vedeți pe server, înseamnă că ați configurat greșit ceva. Mai bine dezactivați STP-ul de pe punte și, de asemenea, configurați portul de pe cealaltă parte (interfața legată, de exemplu Port-Channel dacă este Cisco și așa mai departe) să fie pasiv pentru STP (nu trimiteți niciun BPDU la port, blocați portul dacă se primește BPDU).


UPD:

PVE nu activează vlan-uri aleatorii pe portul gazdă. Acesta este modul meu bridve -c vlan show arata:

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

(asta este unul complet). Configurația acestui pod în /etc/network/interfaces practic este ca al tău. După cum puteți vedea, vmbr0 (care este singura punte pe această gazdă) nu are VLAN-uri în afară de 1 (care este de fapt neetichetat 108 în această rețea).Deci, chiar dacă creez vmbr0.111 (subinterfața VLAN ID 111 a podului), nu va vedea trafic, până când adaug acel VLAN la interfața vmbr0, în ciuda faptului că VLAN 111 este foarte tare acolo.


De ce te cert cu mine? Fac chestiile astea de cel puțin 14 ani:

root@vh2:~# link ip adăugați tip testbr punte vlan_filtering 1 vlan_protocol 802.1Q
root@vh2:~# ip tuntap adauga tap0 mod tap
root@vh2:~# ip link set tap0 master testbr
root@vh2:~# bridge -c vlan show dev testbr
port vlan-id  
testbr 1 Ieșire PVID Neetichetat
root@vh2:~# bridge -c vlan show dev tap0
port vlan-id  
tap0 1 Ieșire PVID Neetichetat
root@vh2:~# bridge vlan add vid 100 dev testbr self pvid neetichetat
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 Ieșire neetichetat
                  200
root@vh2:~# bridge -c vlan show dev tap0
port vlan-id  
tap0 100 PVID Ieșire Neetichetat
root@vh2:~# ip tuntap del tap0 mode tap
root@vh2:~# link ip del testbr
András Korn avatar
drapel pk
De asemenea, nu văd interogări ARP legate de VLAN42 pe `vmbr666`, iar când creez o interfață vlan42 explicită atașată la punte, tot nu primește trafic - nici măcar răspunsuri la interogările ARP pe care le trimite. (Încă trebuie să verific dacă interogările ARP părăsesc gazda.)
András Korn avatar
drapel pk
Apreciez că încerci să ajuți, dar configurația pe care ai lipit-o nu este analogă cu situația mea. În cazul meu, toate interfețele relevante au toate apartenența la VLAN. De asemenea, nu puteți „bridge vlan adăuga” un VLAN la o interfață bridge, cum ar fi `vmbr0`, cu excepția cazului în care acea interfață este ea însăși un membru bridge. Continuați și încercați (veți primi „Răspunsuri RTNETLINK: Operațiunea nu este acceptată”). De asemenea, nu am creat o interfață vmbr666.42, ci o interfață .42 a unui membru de punte (`tapXXXXX.42`).
Nikita Kipriyanov avatar
drapel za
Nu, te înșeli absolut. **Interfața bridge precum `vmbr0` este întotdeauna un membru bridge**, este un membru al bridge-ului care este el însuși și denotă portul care conectează gazda cu bridge-ul. Am făcut asta de multe ori, am făcut asta folosind fișierele de interfețe Debian (acesta este de fapt o parte a unui cluster). Am un sistem construit cu o configurație de rețea systemd în care mai multe robinete OpenVPN au PVID-uri diferite și interfața punte în sine are un alt PVID, iar NIC-ul fizic este trunchiul complet etichetat. Mesajul dvs. de eroare provine probabil din faptul că tocmai ați scris greșit comanda.
András Korn avatar
drapel pk
Mi-am actualizat întrebarea pentru a arăta că nu este cazul.
Nikita Kipriyanov avatar
drapel za
Esti extrem de incapatanat, dar in schimb este mai bine sa fii extrem de atent.Pentru configurarea vlan-urilor pe interfața master bridge adăugați cuvântul cheie "self" (este descris în `man bridge`). De asemenea, din nou, este greșit să faci ceva cu interfața care este slave bridge. Nu ar trebui să aibă subinterfețe vlan, configurații IP și așa mai departe.
András Korn avatar
drapel pk
Într-adevăr, am omis cuvântul cheie `self` din pagina de manual. Mulțumesc că ai subliniat-o. Cu `self` pot adăuga într-adevăr vlan42 la interfața master bridge vmbr666. Cu toate acestea, încă nu afișează trafic de difuzare în vlan42 când `tcpdump -enlvvv` pe el, difuzează doar trafic pentru alte VLAN-uri, așa că probabil că acesta a fost un hering roșu. Nu sunt sigur că înțeleg ce face de fapt adăugarea VLAN-ului la interfața bridge, deoarece am doar `1` și `42` pe el și încă vede traficul de difuzare pe, de ex. vlan49, dar nu 42.
András Korn avatar
drapel pk
Și ca să conștientizeze, nu „mă cert cu tine”; Încerc să înțeleg ce se întâmplă și să subliniez unde ceea ce văd contrazice ceea ce spui. Este cu totul posibil să ai dreptate; Sper că până la urmă putem ajunge la un răspuns pe care îl pot accepta.
Nikita Kipriyanov avatar
drapel za
Adăugarea VLAN la un port bridge face același lucru cu adăugarea VLAN la portul switch-ului dacă acesta a fost comutatorul fizic în locul bridge-ului. Până când adăugați VLAN la un port, acel port nu va participa la VLAN și nu ar trebui să vadă niciun trafic pentru acel VLAN, nici bridge-ul nu ar trebui să accepte trafic pentru acel VLAN care vine de la portul neparticipant. Din nou, acesta include portul bridge „față de gazdă”: dacă doriți să vedeți traficul pe port, adăugați acel VLAN la portul „master”.
András Korn avatar
drapel pk
Dar, din nou, asta contrazice ceea ce văd. Nu am adăugat niciun VLAN la `vmbr666` și totuși am putut vedea transmisii pentru vlan49 și 50 pe el (dar nu vlan42); utilizarea `bridge vlan add ... self` pentru a adăuga vlan42 nu a făcut nicio diferență observabilă.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.