Ek het 'n Proxmox-gasheer met kern 5.15.19-2-pve.

Dit het 'n bond0-koppelvlak gemaak van eth2 en eth3, wat vlan-gemerkte verkeer ontvang.

Ek het 'n vmbr666-brug geskep wat so lyk:

# /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 

Let op dit vlan_filteringis 1.

As ek tcpdump -enlvvvop bond0 is, sien ek verkeer vir VLAN42. As ek tcpdump op vmbr666of tap151034i1, sien ek nie verkeer vir VLAN42 nie ( nie eens uitsendings of multiuitsendings nie , al sien ek wel uitsaaiverkeer van sommige ander VLAN's). Vraag: hoekom nie?

Relevante uitset van bridge -c vlan show:

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

Soos ek gesê het, ek sien verkeer vir ander VLAN's op al hierdie koppelvlakke, insluitend etikette, bv

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

Kom ons voeg nou vlan 42 by die vmbr666koppelvlak om te sien of dit enige verskil maak:

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

In tcpdump -enlvvv -i vmbr666ek sien nog steeds niks wat verband hou met vlan42 nie, net ander VLAN's (bv. 49 en 50).

Kom ons skep 'n subkoppelvlak vir vlan42 tap151034i1soos volg:

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

Hardloop tcpdump -enlvvv -i testsien ek glad nie verkeer nie.

Daar is 'n vmbr42, wat kan inmeng (maar indien wel, hoekom meng dit in?):

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

In 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 

Let op dit vlan_filteringis 0.

tcpump -enlvvvAs u op vmbr42of hardloop tap102i0, wat een van sy lede is, wys VLAN42-verkeer, sonder etikette -- geen verrassings daar nie.

Daar is geen ebtablesof arptablesreëls nie.

Ek dink ek verstaan ​​nie die wisselwerking tussen VLAN-lidmaatskappe en brugkoppelvlakke in Linux nie.

Enkele teoretiese vrae:

  1. Wat is die effek daarvan om 'n VLAN by 'n brughoofkoppelvlak met die selfsleutelwoord in te voeg bridge vlan add?
  2. Wat is die effek van die skep van 'n VLAN-subkoppelvlak van 'n bruglid-koppelvlak?
  3. As 'n fisiese koppelvlak 'n VLAN-subkoppelvlak het, en dit word by 'n brug gevoeg, is enige rame vir daardie VLAN veronderstel om sigbaar te wees op ander brûe waarvan dieselfde fisiese koppelvlak 'n lid is? Indien nie, hoekom nie?
  4. Wat is die verskil, vanuit 'n teoretiese sowel as praktiese perspektief, tussen, aan die een kant, die skep van VLAN-subkoppelvlakke van fisiese koppelvlakke en die oorbrug daarvan, en aan die ander kant, om vlan_filteringop 'n brug te aktiveer en te gebruik bridge vlan pvid untaggedom sommige lid-koppelvlakke in plek te gee in spesifieke VLAN's?
  5. Kan jy hierdie twee benaderings meng?

EDIT: het goed verwyder wat in opmerkings as irrelevant getoon is, en teoretiese vrae bygevoeg om hopelik te help om die antwoord beter te struktureer.

answer

Koop hoekom moet dit op die brugkoppelvlak verskyn?

Dink Linux-brug as 'n "virtuele bestuurde L2-skakelaar", waar brugkoppelvlak 'n middel is vir die gasheer self om aan die skakelaar gekoppel te word. Brugkoppelvlak word dus beskou as 'n "skakelpoort" waar gasheerrekenaar "gekoppel" is.

Nou, laat ons die "virtuele" skakelaar vir 'n minuut na 'n ware verander. Sommige poorte kommunikeer met 'n ander poort. Die skakelaar aard is dat hierdie verkeer nie op ander poorte sigbaar moet wees nie: dit oorstroom net verkeer wanneer dit nie 'n benul het op watter poort die bestemmings-MAC-adres woon nie, of as die adres uitgesaai word.

Om terug te keer na ons "virtuele" instelling: virtuele masjien tikpoort praat met "fisiese" poort wat bond0 is, hoekom moet hierdie verkeer op die derde onverwante poort gesien word (wat "gasheer"-poort is, vernoem na die brug self) ? ARP-navrae is die enigste uitsaaipakkette wat op die netwerk verskyn, en dit word behoorlik uitgesaai, sodat jy dit sien; die res is nie.

STP BPDU's is verskillende diere. Die brug met geaktiveerde STP-verwerking genereer dit self en stuur dit na elke (STP-geaktiveerde) poort. As jy dit op die bediener sien, beteken dit waarskynlik dat jy iets verkeerd gekonfigureer het. Deaktiveer die STP op die brug beter en konfigureer ook die poort aan die ander kant (die gekoppelde koppelvlak, bv. die Port-Channel as dit Cisco is ensovoorts) om passief te wees vir STP (moenie enige BPDU's na die poort stuur nie, blok die poort as BPDU ontvang word).


UPD :

PVE aktiveer nie ewekansige vlans op die gasheerpoort nie. So bridve -c vlan showlyk my:

[email protected]:~# 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

(dit is 'n volledige een). Die opstelling van hierdie brug in /etc/network/interfacesis basies soos joune. Soos u kan sien, vmbr0(wat die enigste brug op hierdie gasheer is) het geen VLAN's behalwe 1 nie (wat eintlik ongemerk 108 in hierdie netwerk is). So selfs al skep ek vmbr0.111 (VLAN ID 111 subkoppelvlak van brug), sal dit geen verkeer sien nie, totdat ek daardie VLAN by die vmbr0-koppelvlak voeg , ten spyte van die feit dat VLAN 111 baie hard daar is.


Hoekom stry jy met my? Ek doen hierdie goed vir ten minste 14 jaar:

[email protected]:~# ip link add testbr type bridge vlan_filtering 1 vlan_protocol 802.1Q
[email protected]:~# ip tuntap add tap0 mode tap
[email protected]:~# ip link set tap0 master testbr
[email protected]:~# bridge -c vlan show dev testbr
port              vlan-id  
testbr            1 PVID Egress Untagged
[email protected]:~# bridge -c vlan show dev tap0
port              vlan-id  
tap0              1 PVID Egress Untagged
[email protected]:~# bridge vlan add vid 100 dev testbr self pvid untagged
[email protected]:~# bridge vlan add vid 100 dev tap0 pvid untagged
[email protected]:~# bridge vlan del vid 1 dev testbr self
[email protected]:~# bridge vlan del vid 1 dev tap0
[email protected]:~# bridge vlan add vid 200 dev testbr self
[email protected]:~# bridge -c vlan show dev testbr
port              vlan-id  
testbr            100 PVID Egress Untagged
                  200
[email protected]:~# bridge -c vlan show dev tap0
port              vlan-id  
tap0              100 PVID Egress Untagged
[email protected]:~# ip tuntap del tap0 mode tap
[email protected]:~# ip link del testbr