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:
- Care este efectul adăugării unui VLAN la o interfață master bridge cu
de sine
cuvânt cheie în bridge vlan add
?
- Care este efectul creării unei subinterfețe VLAN a unei interfețe membre de punte?
- 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?
- 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?
- 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.