Някои L2VPN маршрути изчезват, след като добавите рефлектори на маршрути
Сесиите остават активни, но няколко L2VPN маршрута така и не пристигат. Повторно използвани идентификатори на клъстери, клиентски отношения и графът на рефлексията обясняват тази селективна загуба.
Сесиите остават активни, IGP е стабилен и въпреки това шепа L2VPN маршрути така и не се появяват на два от четирите ръба на доставчика. Този модел принадлежи на проблем с рефлексията, а не с транспорта, защото счупената сесия се проваля изцяло, докато повторно използваната граница на рефлексия се проваля селективно. Физическият пръстен няма нищо общо; логическият граф на разпространение е мястото, където тези маршрути са спрели. Намирането на тази точка не изисква преизграждане на контролната равнина.
Загубата е селективна и това стеснява търсенето
Четири ръба на доставчика върху физически пръстен изискват шест логически сесии за пълна мрежа, тъй като всеки рутер се свързва с останалите три. Тези сесии минават през маршрутизирания транспорт, така че окабеляването не казва нищо за броя на съседствата или кое от тях рефлектира. Когато два ръба пропускат определен набор от префикси, докато всичко останало се сближава, кабелът не е заподозреният.
Селективната загуба сочи към предотвратяване на цикли, политика или посока на отношението, при което някои маршрути пресичат граница, а други се изхвърлят по пътя. Пълната загуба сочи към сесията или семейството адреси. Да решите кое от двете виждате е първата полезна стъпка и отнема една команда.
Какво всъщност променя рефлексията
Рефлексията на маршрути смекчава правилото, че iBGP говорител не може да препредава маршрут, научен от друг iBGP говорител. RFC 4456 изразява изключението чрез отношението между говорителя и източника на маршрута и посоката на това отношение е по-важна, отколкото повечето резюмета предполагат. Маршрут, научен от клиент, може да бъде рефлектиран към други клиенти и към не-клиенти, докато маршрут, научен от не-клиент, може да бъде рефлектиран само към клиенти. Прочетете асиметрията два пъти, защото тя обяснява как добавянето на клиентско отношение може да скрие проектна грешка: то отваря път, който топологията никога не е предвиждала.
Атрибутът CLUSTER_LIST записва историята на рефлексията и рефлектор, който намери собствения си идентификатор на клъстер в този списък, трябва да игнорира обявата. Това е предотвратяване на цикли и също механизмът, който изтрива маршрути, когато идентификаторите се използват повторно по погрешка. ORIGINATOR_ID играе сходна роля, като назовава рутера, който пръв е обявил маршрута.
Повторно използваните идентификатори на клъстери са начинът, по който маршрутите изчезват
Малката мрежа подканва към пряк път: дайте на всеки рутер идентификатор на клъстер, равен на неговия loopback, добавете по-късно още един рефлектор и използвайте повторно съществуващ loopback, защото е удобно под ръка. Ако този идентификатор сега се появи на два независими етапа на рефлексия, вторият етап вижда собствения си ID в CLUSTER_LIST и отхвърля маршрута. Нищо не записва грешка, защото отхвърлянето е правилният отговор на цикъл.
Резервните рефлектори, обслужващи един клъстер, са законното изключение: те споделят ID нарочно, за да може всеки от тях да обслужва същите клиенти. Идентификаторът трябва да съответства на проекта на рефлексията, а не да различава имена на шасита.
Начертайте предвидения граф, преди да докоснете каквато и да е конфигурация: кой създава префикса, кое клиентско отношение позволява първата рефлексия, кой рефлектор го носи към следващия етап и къде се намира последният клиент. Всеки хоп в този граф е място, където повторно използван идентификатор, липсващо клиентско отношение или филтър на политика може да спре маршрута. С начертан граф липсващият маршрут има място, а не мистерия.
Устоявайте да не правите всеки съсед клиент
Бързата поправка за липсващ маршрут е да направите всеки съсед клиент на всеки рефлектор. Разпространението се връща и проектът спира да ви казва каквото и да е: той умножава маршрутите, които всеки говорител носи, като същевременно скрива кое отношение е трябвало да свърши работата.
Малката мрежа обикновено се нуждае от една от две форми. Пълна iBGP мрежа е шест сесии за четири рутера без никаква рефлексия, а определена двойка рефлектори, обслужваща останалите ръбове, е другата. И двете са по-лесни за обмисляне от частична мрежа, в която всеки рутер рефлектира малко. Изберете формата по мащаб и поведение при отказ, а не по схемата на окабеляването.
Проверете семейството адреси, преди да обвинявате рефлексията
TCP сесия на порт 179 доказва, че двамата говорители могат да разговарят, и нищо за това дали семейството адреси на VPN е разменило дори един маршрут. Установете състоянието на сесията, после семейството, после отделния префикс.
vtysh -c "show bgp summary"
vtysh -c "show bgp l2vpn evpn summary"
vtysh -c "show bgp l2vpn evpn"
Тези три изхода разделят проблем със съседството от проблем с размяната и от проблем с липсващ префикс. Ако семейството не показва никакви префикси, проверете състоянието на активиране и експортната политика на съседа, преди да гледате рефлексията. Ако префиксите се появяват на един ръб, но не на друг, сравнете списъка с клъстери и източника от приемащата страна, след което преминете графа от предишния раздел.
Дръжте достижимостта на следващия хоп и състоянието на препращане извън тази проверка. Рефлектиран маршрут с недостижим следващ хоп е наличен и неизползваем, което изглежда като отказ на рефлексията, докато не погледнете колоната за следващия хоп. Разрешете следващия хоп, потвърдете записа за препращане и едва тогава решете дали графът на разпространение се нуждае от още един рефлектор.