Шлюз філії показує префікс хмари у своїй таблиці BGP, сесію з провайдером встановлено, і все ж запит користувача до цього префікса виходить через неправильний інтерфейс. Нічого не зламано так, як підказує моніторинг, адже «BGP його вивчив» — це твердження про площину керування. Між цією таблицею й пакетом є чотири окремі переходи, і потік зупиняється рівно на одному з них. Пройдіть шлюзи по черзі й зупиніться на першому, який не пройдено.

Перший шлюз: що сусід справді надіслав

Почніть із префікса таким, яким його отримано, а не в підсумку. Знайдіть точну мережу й маску в таблиці BGP і запишіть наступний хоп, шлях AS та будь-яку спільноту, з якою може збігтися політика імпорту. Підсумковий маршрут на панелі може приховати той факт, що конкретний префікс так і не було прийнято.

Політика імпорту — звичайне місце, де маршрут зникає без помилки. Список префіксів, фільтр спільнот або карта вхідних маршрутів можуть відкинути оновлення, поки сесія залишається піднятою й здоровою, і саме тому зелене світло сусіда доводить так мало. Відсутність рядка в журналі не означає відсутності рішення. Зазвичай це означає, що рішення ухвалено мовчки, точно як налаштовано.

show ip bgp 10.60.20.0/24
show ip bgp neighbors 203.0.113.5 advertised-routes
show ip route 10.60.20.0
show ip cef 10.60.20.0

Читайте вивід у цьому порядку. Перші дві команди кажуть, чи надійшла інформація і що партнер стверджує, ніби надіслав; останні дві — чи щось дійшло до таблиць маршрутизації та пересилання. Префікс, наявний у першій команді й відсутній у третій, — це проблема вибору або встановлення, а не зв'язності.

Другий шлюз: вибір, потім встановлення

BGP обирає найкращий шлях, і обраний шлях не встановлюється автоматично. Наступний хоп має розв'язатися, а інше джерело маршрутів може вже володіти цим префіксом із кращою адміністративною дистанцією. Статичний маршрут, що залишився від міграції, легко переможе чинний шлях BGP і надішле трафік в інше місце.

RFC 4271 тримає три ідеї окремо: що надіслав партнер, що цей спікер обрав найкращим і що він оголошуватиме далі. Це концептуальні ролі, а не три фізичні бази даних, які постачальник зобов'язаний показати, але саме цей поділ робить «це є в BGP» неповною відповіддю.

Перевірте також, який контекст маршрутизації ви читаєте. Маршрут, встановлений у VRF, до якої не належить інтерфейс користувача, невидимий для пакетів цього користувача, а таблиця весь час виглядає правильною.

Третій шлюз: пошук, застосовний до цього потоку

Тепер перестаньте питати про маршрут і почніть питати про пакет. Запишіть адресу джерела користувача, призначення, протокол, порт і вхідний інтерфейс, бо кожен із них може вибрати іншу політику. Потім подивіться на пошук, застосовний до цієї комбінації, а не на загальну таблицю маршрутизації.

ip route get 10.60.20.25 from 10.60.10.40
ip rule show
sudo tcpdump -ni tun0 'host 10.60.20.25'

Конкретніший префікс — найчастіша несподіванка тут, а політичний маршрут — друга. Обидва перекривають агрегат, на який ви дивилися, і жоден не видно в підсумку таблиці BGP.

Пінг із самого шлюзу не є доказом про сесію користувача. Інша адреса джерела, інший шлях політики й часто інший результат. Перевіряйте тим самим джерелом, яке використовує застосунок, або прийміть, що тест відповідає на інше питання.

Четвертий шлюз: дальня половина шляху

Якщо локальний пошук справді вибирає тунель, пакет усе одно має бути прийнятий політикою захисту, дозволений правилом пересилання й отримати відповідь від чогось на іншому боці. Крипто-ACL без пари адрес відкине трафік, поки тунель повідомляє про себе як піднятий, що дає тайм-аут, невідрізнюваний від збою маршрутизації.

Зворотний шлях важливий не менше за вихідний. Бік хмари має знати, як досягти джерела філії — через маршрут або через трансляцію, яку ви налаштували навмисно. Асиметричні зворотні шляхи часті в проєктах, перевірених лише в одному напрямку.

Зіставте свіже авторизоване з'єднання з трьома спостереженнями: локальна політика, що збіглася, лічильники тунелю, що зрушили, і приймання на дальньому боці там, де це видно. Якщо лічильники не рухаються, пакет узагалі не входив у тунель, хоч би що казала таблиця маршрутів. Якщо рухаються, а нічого не надходить, дальній бік відкидає або неправильно маршрутизує його. Ці два результати ведуть до цілком різних команд.

Назвіть перехід, який не спрацював

Запишіть результат як один із п'яти станів: не отримано, не прийнято політикою, не вибрано, не встановлено або не збіглося з цим потоком. Додайте шостий для випадку, коли локальний шлях правильний, а дальній кінець не може відповісти. Це речення і є результатом, і воно значно корисніше за знімок екрана встановленого сусіда.

Тримайте в плані приймання й негативний тест: призначення, яке не має проходити через тунель, перевірене після зміни. Контрольний список, що доводить лише вдалий шлях, не зловить широке правило політики, яке хтось додасть у наступному вікні обслуговування.

Схожі статті