Некоторые маршруты 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"
Эти три вывода отделяют проблему соседства от проблемы обмена и от проблемы отсутствующего префикса. Если семейство вообще не показывает префиксов, проверьте состояние активации и политику экспорта соседа, прежде чем смотреть на отражение. Если префиксы появляются на одной границе, но не на другой, сравните список кластеров и originator на принимающей стороне, а затем пройдите граф из предыдущего раздела.
Держите доступность следующего перехода и состояние пересылки вне этой проверки. Отражённый маршрут с недоступным следующим переходом присутствует и непригоден, что выглядит как сбой отражения, пока вы не посмотрите на столбец следующего перехода. Разрешите следующий переход, подтвердите запись пересылки и только затем решите, нужен ли графу распределения ещё один отражатель.