Здравствуйте.
На форуме неоднократно читал, что FBPDU определяет, будут ли передаваться
в порт BPDU-пакеты при выключенном STP на коммутаторе.
Пытался написать правила ACL чтобы фильтровать BPDU пакеты, приходящие с порта (надеялся опознавать их по DSAP 0x42 и ловить с помощью ACL на packet_content_mask, но пока что-то не выходит

) и обнаружил следующее поведение функции FPBDU.
Тестовый стенд:
линукс(eth2) --- (порт 3)DES-3526(порт 10) --- микротик
"Микротик" - эта такая железячка, которая умеет участвовать в работе stp. Её функция в данной схеме - просто генерить bpdu. Можно было бы вместо неё взять еще один dlink с включенный STP, но нету свободного коммутатора
На линуксе tcpdump'ом смотрю - выпускает ли коммутатор в порт линукса (порт №3) bpdu пакеты от микротика.
Или я неправильно провожу эксперимент, или функция FBPDU регулирует прохождение BPDU на порте в обе стороны, не только отдачу в порт:
Прошивка 6.00.B12
Код:
Boot PROM Version : Build 5.00.009
Firmware Version : Build 6.00.B12
Hardware Version : 3A1
STP выключен
Код:
DES-3526:admin#sh stp
Command: show stp
STP Bridge Global Settings
---------------------------
STP Status : Disabled
STP Version : RSTP
Max Age : 20
Hello Time : 2
Forward Delay : 15
Max Hops : 20
TX Hold Count : 6
Forwarding BPDU : Enabled
Настройки STP 3го порта (сюда подключен линукс)
Код:
DES-3526:admin#sh stp ports 3
Command: show stp ports 3
MSTP Port Information
----------------------
Port Index : 3 , Hello Time: 2 /2 , Port STP enabled
Restricted role : False , Restricted TCN : False
External PathCost : Auto /200000 , Edge Port : False/No , P2P : Auto /Yes
Port Forward BPDU : enabled
BPDU Type : RSTP
Msti Designated Bridge Internal PathCost Prio Status Role
----- ------------------ ----------------- ---- ----------- ----------
0 N/A 200000 128 - Disabled
Настройки STP 10го порта (сюда подключен микротик, он же stp root)
Код:
DES-3526:admin#sh stp port 10
Command: show stp ports 10
MSTP Port Information
----------------------
Port Index : 10 , Hello Time: 2 /2 , Port STP enabled
Restricted role : False , Restricted TCN : False
External PathCost : Auto /200000 , Edge Port : False/No , P2P : Auto /Yes
Port Forward BPDU : disabled
BPDU Type : RSTP
Msti Designated Bridge Internal PathCost Prio Status Role
----- ------------------ ----------------- ---- ----------- ----------
0 N/A 200000 128 - Disabled
Итого: FBPDU у порта, с которого приходят BPDU, выключен. FBPDU у порта с линуксом - включен.
Код:
[root@campus0 ~]# tcpdump -i eth2 -nnnvvve -c 200
tcpdump: listening on eth2, link-type EN10MB (Ethernet), capture size 96 bytes
14:39:53.949068 00:0c:42:36:4e:dc > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 108: (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto: UDP (17), length: 94) 192.168.249.207.5678 > 255.255.255.255.5678: UDP, length 66
14:39:55.758943 00:0c:42:36:4e:dc > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: arp who-has 192.168.249.160 tell 192.168.249.207
14:39:56.758979 00:0c:42:36:4e:dc > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: arp who-has 192.168.249.160 tell 192.168.249.207
14:39:57.759045 00:0c:42:36:4e:dc > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: arp who-has 192.168.249.160 tell 192.168.249.207
Видим следы жизнедеятельности микротика - он по арп ищет свой шлюз (192.168.249.160). BPDU не наблюдается. Т.е.
при выключенном FBPDU пакеты, приходящие в порт, не принимаются.Теперь для порта №10, куда подключен микротик, включаем FBPDU:
Код:
DES-3526:admin#conf stp ports 10 fbpdu ena
Command: config stp ports 10 fbpdu enable
Success.
DES-3526:admin#sh stp port 10
Command: show stp ports 10
MSTP Port Information
----------------------
Port Index : 10 , Hello Time: 2 /2 , Port STP enabled
Restricted role : False , Restricted TCN : False
External PathCost : Auto /200000 , Edge Port : False/No , P2P : Auto /Yes
Port Forward BPDU : enabled
BPDU Type : RSTP
Msti Designated Bridge Internal PathCost Prio Status Role
----- ------------------ ----------------- ---- ----------- ----------
0 N/A 200000 128 - Disabled
Смотрим tcpdump на линуксе:
Код:
[root@campus0 ~]# tcpdump -i eth2 -nnnvvve -c 200
tcpdump: listening on eth2, link-type EN10MB (Ethernet), capture size 96 bytes
14:45:00.870881 00:0c:42:36:4e:dc > 01:80:c2:00:00:00, 802.3, length 60: LLC, dsap STP (0x42), ssap STP (0x42), cmd 0x03: 802.1d unknown version
14:45:02.870956 00:0c:42:36:4e:dc > 01:80:c2:00:00:00, 802.3, length 60: LLC, dsap STP (0x42), ssap STP (0x42), cmd 0x03: 802.1d unknown version
14:45:04.871076 00:0c:42:36:4e:dc > 01:80:c2:00:00:00, 802.3, length 60: LLC, dsap STP (0x42), ssap STP (0x42), cmd 0x03: 802.1d unknown version
14:45:06.871184 00:0c:42:36:4e:dc > 01:80:c2:00:00:00, 802.3, length 60: LLC, dsap STP (0x42), ssap STP (0x42), cmd 0x03: 802.1d unknown version
BPDU коммутатором пропускаются (в 10й порт пришли, в 3й ушли).
Теперь у 3го порта (сюда подключен линуск) отключаю FBPDU:
Код:
DES-3526:admin#conf stp ports 3 fbpdu dis
Command: config stp ports 3 fbpdu disable
Success.
DES-3526:admin#sh stp port 3
Command: show stp ports 3
MSTP Port Information
----------------------
Port Index : 3 , Hello Time: 2 /2 , Port STP enabled
Restricted role : False , Restricted TCN : False
External PathCost : Auto /200000 , Edge Port : False/No , P2P : Auto /Yes
Port Forward BPDU : disabled
BPDU Type : RSTP
Msti Designated Bridge Internal PathCost Prio Status Role
----- ------------------ ----------------- ---- ----------- ----------
0 N/A 200000 128 - Disabled
BPDU до линукса более не доходят:
Код:
[root@campus0 ~]# tcpdump -i eth2 -nnnvvve -c 200
tcpdump: listening on eth2, link-type EN10MB (Ethernet), capture size 96 bytes
14:48:27.791691 00:0c:42:36:4e:dc > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: arp who-has 192.168.249.160 tell 192.168.249.207
14:48:28.791639 00:0c:42:36:4e:dc > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: arp who-has 192.168.249.160 tell 192.168.249.207
14:48:29.791715 00:0c:42:36:4e:dc > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: arp who-has 192.168.249.160 tell 192.168.249.207
14:48:53.983421 00:0c:42:36:4e:dc > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 108: (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto: UDP (17), length: 94) 192.168.249.207.5678 > 255.255.255.255.5678: UDP, length 66
14:48:53.983503 00:0c:42:36:4e:dc > 01:00:0c:cc:cc:cc, 802.3, length 83: LLC, dsap SNAP (0xaa), ssap SNAP (0xaa), cmd 0x03: oui Cisco (0x00000c), pid CDP (0x2000): CDPv1, ttl: 120s, checksum: 376 (unverified), length 61
Device-ID (0x01), length: 8 bytes: 'MikroTik'
Address (0x02), length: 13 bytes: IPv4 (1) 192.168.249.207
Capability (0x04), length: 4 bytes: (0x00000001): Router
Version String (0x05), length: 4 bytes:
3.10
Platform (0x06), length: 8 bytes: 'MikroTik'
Проверяю что не напутал с портами - что линукс действительно в 3м, а микротик - в 10м:
коммутатор:
Код:
DES-3526:admin#sh fdb port 3
Command: show fdb port 3
VID VLAN Name MAC Address Port Type
---- ---------------- ----------------- ------ ----------------
1 default 00-0A-E6-04-7E-34 3 Dynamic
Total Entries : 1
DES-3526:admin#sh fdb port 10
Command: show fdb port 10
VID VLAN Name MAC Address Port Type
---- ---------------- ----------------- ------ ----------------
1 default 00-0C-42-36-4E-DC 10 Dynamic
Total Entries : 1
линукс:
Код:
[root@campus0 ~]# ifconfig eth2 | grep HWaddr
eth2 Link encap:Ethernet HWaddr 00:0A:E6:04:7E:34
микротик:
Код:
[admin@MikroTik] > /interface ethernet print
Flags: X - disabled, R - running, S - slave
# NAME MTU MAC-ADDRESS ARP MASTER-PORT SWITCH
0 R ether1 1500 00:0C:42:36:4E:DC enabled
Результаты эксперимента подтверждаются многократными итерациями.
Честно скажу, что меня фильтрация в обе стороны вполне устраивает и для меня она более удобна, чем только фильтрация отдаваемых в порт BPDU пакетов. Собственно вопрос - является ли подобное поведение опции FBPDU багом или фичей? Не изменится ли оно в следующей версии прошивки?
Ну а если кто бы еще подсказал как можно зафильтровать STP пакеты с помощью ACL - было бы совсем хорошо

Это нужно для ситуации когда между двумя 3526 есть некоторое кол-во домов с небольшим числом абонентов и ставить на эти дома управляемые коммутаторы мне никто не даст по финансовым причинам, но хотелось бы с помощью ACL принимать с таких аплинков BPDU только от определенных MAC-адресов.
Заранее спасибо и респект тем, кто дочитал до этого места
