У меня есть хост 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.
Некоторые теоретические вопросы:
- Каков эффект добавления VLAN к главному интерфейсу моста с
self
ключевое слово вbridge vlan add
? - Каков эффект от создания субинтерфейса VLAN интерфейса члена моста?
- Если физический интерфейс имеет подынтерфейс VLAN, и он добавлен к мосту, должны ли какие-либо кадры для этой VLAN быть видимыми на других мостах, членом которых является тот же физический интерфейс? Если нет, то почему?
- В чем разница, как с теоретической, так и с практической точки зрения, между, с одной стороны, созданием подынтерфейсов VLAN физических интерфейсов и их соединением, а с другой стороны,
vlan_filtering
на мосту и используяbridge vlan pvid untagged
предоставить место некоторым интерфейсам-членам в конкретных VLAN? - Можно ли смешивать эти два подхода?
РЕДАКТИРОВАТЬ: удален материал, который был показан в комментариях как неактуальный, и добавлены теоретические вопросы, которые, как мы надеемся, помогут лучше структурировать ответ.
vlan мост tcpdump pcap
Андраш Корн
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