Juniper BPDU filter PVST

И так , есть сеть , корневые коммутаторы используем Juniper ex  совместно с Cisco 35XX ,37XX  , при этом существует 2  кольца 10 Gbit (на Juniper) и 1 Gbit (на Cisco) . Используется Spanning Tree Protocol — MSTP протокол . Опишу несколько подводных камней с которыми мы столкнулись и методы решения этих проблем .

PVST не совместимо с MSTP и при одновременной работе устройств Cisco с этими протоколами вызывает проблемы в сети, в частности, отключение downlink’овского порта root’ового MSTP-устройства.


У нас в сети возникал следующий момент :

Если на порт коммутатора Juniper приходил BPDU пакет с PVST , Juniper его не блокировал при следующих настройках :

ethernet-switching-options 

bpdu-block {
    interface ge-0/0/3.0;
    interface ge-0/0/4.0;
    disable-timeout 600;
}



mstp {
    configuration-name mstp-network;
    revision-level 1;
    traceoptions {
        file stp.log;
    }
    interface ge-0/0/0.0 {
        disable;
    }
    interface ge-0/0/3.0 {
        disable;
    }
    interface ge-0/0/4.0 {
        disable;
    }
    interface ge-0/0/16.0 {
        disable;
    }
    bpdu-block-on-edge;

Juniper в свою очередь просто передавал BPDU пакет с PVST дальше в сеть , и если этот пакет встречал (а он его обязательно встретит) Cisco  начинала вести себя неадекватно и после чего в сети возникала петля и Cisco клала корневые порты .

Для блокировки PVST на большинстве сетевых устройств других производителей приходится создавать MAC фильтр, поскольку в их BPDU фильтрах пакеты PVST неизвестны и могут проходить через эти устройства даже при отключенных STP.

И так нам необходимо сделать MAC фильтр  который будет блокировать мультикаст PVST , MAC адреса мультикастов следующие :

01-00-0C-CC-CC-CD — это mac для транкового пакета .
01-80-C2-00-00-00

Вот собственно сам фильтр (так же добавленные счетчики для статистики) :

ge-0/0/4 {          
    ether-options {
        speed {
            100m;
        }
    }
    unit 0 {
        family ethernet-switching {
            port-mode access;
            vlan {
                members vlan-14;
            }
            filter {
                input BPDU_FILTER;
            }
        }
    }
}



family ethernet-switching {
    filter BPDU_FILTER {
        term discard-bpdu {
            from {
                destination-mac-address {
                    01:80:c2:00:00:00;
                    01:00:0c:cc:cc:cd;
                }
            }
            then {
                discard;
                count BPDU_FILTER;
            }
        }
        term allow-other {
            then accept;
        }
    }
}

 

После чего данная проблема исчезла , а в счетчики стали постоянно рости  (все кончилось как в доброй старой сказке ). К сожалению решение данного вопроса более культурным способом найти не удалось .