Чаму BGP праз VPN не кантралюе ваш шлях ніжняга пласта
BGP праз VPN абменьваецца дасяжнасцю і ўжывае палітыку маршрутаў, але ніжні пласт усё яшчэ выбірае знешні шлях. Што насамрэч кантралюе сесія.
Дзве пляцоўкі ўсталёўваюць BGP праз тунель IPsec, вывучаюць прэфіксы адна адной, і дыяграма пераймяноўваецца ў кіраванне шляхам. Менавіта гэтая этыкетка і пачынае блытаніну. Сесія сапраўды абменьваецца дасяжнасцю і ўжывае палітыку, але яна не мае права голасу ў тым, які правайдэр, кабель ці маршрутызатар нясе зашыфраваныя пакеты. Я бачыў, як каманда перабудоўвала працоўны тунель, бо чакала, што змена маршруту BGP перанясе трафік на іншы аптычны шлях, на які сесія ніколі не магла паўплываць.
Што людзі мяркуюць, што дае сесія
Большасць чаканняў паходзіць з таго, як змена маршруту выглядае ў лабараторыі. Вы абвяшчаеце прэфікс праз тунель, далёкі бок яго ўсталёўвае, і трафік рухаецца. Тая ж паслядоўнасць адбываецца на маршрутызатары, які сапраўды мае рычагі інжынерыі трафіку, таму гэтыя дзве рэчы блытаюць. У лабараторыі абедзве пляцоўкі звычайна дзеляць адзін канал доступу, і менавіта таму розніца там ніколі не выяўляецца.
BGP — гэта пратакол дасяжнасці. Ён кажа партнёру, што вы можаце даставіць пакеты для прэфікса, і дазваляе кожнаму боку ранжыраваць атрыманыя прапановы. Гэта сапраўды карысна праз тунель: прэфіксы з’яўляюцца і знікаюць, калі пляцоўкі прыходзяць і сыходзяць, і вы можаце адхіліць дыяпазон, не запісваючы статычны маршрут на кожнай крайняй прыладзе. Чаго ён не робіць — гэта не ставіць маршрутызатары правайдэра пад ваш кантроль.
Ніжні пласт нясе знешні загаловак. Ваш канец тунеля адпраўляе зашыфраваныя пакеты на адрас партнёра, і сетка паміж гэтымі двума адрасамі перасылае іх па тых маршрутах, якія ўсталявалі яе аператары. Нішто ў сесіі BGP не змяняе гэтага рашэння, калі толькі той жа правайдэр не прапануе падтрымоўваную паслугу, якая робіць гэта.
Што сесія насамрэч нясе
Спікер BGP адкрывае TCP-злучэнне да порта 179 на сваім партнёры, выкарыстоўваючы фарматы паведамленняў і атрыбуты шляху, вызначаныя ў RFC 4271. Калі адрас партнёра знаходзіцца ўнутры тунеля, тунель павінен быць падняты і гэты адрас павінен быць дасяжным, перш чым сесія зможа пачацца. Завершаны абмен IKE — гэта не сусед BGP. Рэалізацыі IPsec на аснове маршрутаў прапускаюць трафік толькі пасля з’яўлення адпаведнага маршруту тунеля, а рэалізацыя на аснове палітыкі патрабуе, каб адрас партнёра быў унутры абароненага селектара. Калі зрабіць гэта наадварот, атрымаецца класічны стан, калі тунель зялёны, а сесія стаіць без работы.
Як толькі сесія паднялася, палітыка вырашае, што яе перасякае. Спісы прэфіксаў, фільтры шляху AS, максімальная столя прэфіксаў і яўнае рашэнне адносна маршрутаў па змаўчанні — гэта мінімум, і яны дзейнічаюць у абодвух напрамках. Партнёр, які прымае ўсё атрыманае, можа даць вам маршрут па змаўчанні, які ціха замяняе лакальны доступ у інтэрнэт. Два напрамкі патрабуюць асобных спісаў, бо тое, што вы прымаеце ад партнёра, і тое, што вы яму абвяшчаеце, — гэта розныя рашэнні.
router bgp 65010
neighbor 10.255.0.2 remote-as 65020
address-family ipv4 unicast
neighbor 10.255.0.2 prefix-list SITE-B-IN in
neighbor 10.255.0.2 prefix-list SITE-B-OUT out
neighbor 10.255.0.2 maximum-prefix 50
Далей кусае MTU. Інкапсуляцыя памяншае карысную нагрузку, таму вялікае абнаўленне можа спыніць сесію, якая выглядае цалкам усталяванай: партнёр застаецца паднятым, прэфіксы не прыходзяць, і нічога відавочнага не трапляе ў журнал. Абмяжуйце TCP MSS на інтэрфейсе тунеля або задайце MTU тунеля з месцам для накладных выдаткаў, перш чым вінаваціць фільтры.
Куды ўсё яшчэ ідуць знешнія пакеты
Зашыфраваныя пакеты з адной пляцоўкі на другую выходзяць праз тое, што лакальны маршрутызатар выбірае для публічнага адраса партнёра. Калі абедзве пляцоўкі купляюць транзіт у аднаго правайдэра, праходзяць праз адзін гарадскі аб’ект або адзін бок знаходзіцца за NAT аператарскага класа, тунель перажывае збой правайдэра толькі выпадкова. Падлік значкоў тунеляў у інструменце маніторынгу нічога пра гэта не кажа.
Выбар маршруту і ўсталяванне перасылкі — таксама асобныя падзеі. Прэфікс можа стаяць у табліцы BGP як найлепшы і ўсё яшчэ адсутнічаць у табліцы перасылкі, бо наступны хоп не развязальны або перамагае больш канкрэтны маршрут. Калі хтосьці паведамляе, што BGP вывучыў прэфікс, але трафік не ідзе, карыснае пытанне — ці ўсталяваны ён і на які наступны хоп ён паказвае.
Сумленны адказ для агляду дызайну — гэта спіс агульных залежнасцяў: канал доступу, вышэйшы правайдэр, аб’ект і любая прылада з станам на зваротным шляху. Сесія праз тунель не можа выдаліць залежнасць, над якой яна не стаіць.
Тры рашэнні, якія варта раздзяляць
Калі дызайн змешвае гэта, кожная размова пра збой ідзе па крузе. Спачатку раздзяліце іх на паперы, потым прывяжыце кожнае да прылады, якая сапраўды яго выконвае.
| Decision | Who controls it | Typical failure |
|---|---|---|
| Which prefixes may cross the relationship? | Both sides, through prefix and AS-path policy you configure deliberately | A default route accepted by mistake, or a vague aggregate |
| Which overlay next hop wins? | Local BGP selection plus next-hop resolution on your own routers | Prefix learned, never installed in the forwarding table |
| Where do the encrypted packets travel? | The underlay operators, unless a supported service adds real control | Path diversity that was never there |
Кожны радок мае іншага ўладальніка. Першы — гэта перамовы, другі — канфігурацыя на вашых прыладах, трэці — пераважна чужой сеткі. Запыт на змену, які называе радок, якога ён датычыцца, значна лягчэй зацвердзіць, чым той, што кажа «праблема BGP».
Рэжымы збояў, якія варта планаваць
Прыняцце зводнага маршруту партнёра — самая распаўсюджаная самананесеная рана. Хтосьці абвяшчае кароткі агрэгат, каб спрасціць абмен, далёкі бок яго прымае, і трафік для дыяпазонаў, якія не за тунелем, ідзе ў тунель і гіне. Фільтруйце па дакладных чаканых прэфіксах або выкарыстоўвайце спіс прэфіксаў з правільнымі межамі, і ніколі не прымайце голы агрэгат, бо ён робіць сесію ахайнай.
Час адклікання — другі. Выяўленне залежыць ад таймераў утрымання, BFD, калі вы яго ўключылі, выяўлення мёртвага партнёра тунеля і таго, як хутка далёкі бок спыняе абвяшчэнне. Існуючыя сесіі — асобная праблема: новы маршрут можа аднавіць новыя злучэнні, пакуль усталяваныя сесіі TCP працягваюць выкарыстоўваць састарэлыя адрасы, а міжсеткавыя экраны з станам або NAT на шляху могуць утрымліваць запісы, якія ўжо не адпавядаюць. Запішыце аднаўленне праграмы ў крытэрыі прыёмкі замест таго, каб меркаваць, што змена маршруту ўладжвае ўсё.
Трэці — асыметрыя зваротнага шляху. Трафік можа прыходзіць праз тунель і вяртацца праз канал правайдэра, які ніколі не прызначаўся для яго, што выглядае як аднабаковы гук, няўдалыя рукапацісканні або міжсеткавы экран, які скідае адказы. Правярайце абодва напрамкі асобна.
Што запісаць у кантракт і як гэта праверыць
Папрасіце дазволеныя прэфіксы пісьмова: хто мае права ўзнікаць кожны дыяпазон, ці дазволены маршрут па змаўчанні і якія сямействы адрасоў падтрымлівае паслуга тунеля. RFC 8212 зрабіў яўную палітыку імпарту і экспарту чаканнем для eBGP у рэалізацыях, якія яго выконваюць, таму партнёр, які ўсё яшчэ спадзяецца на неявное паводзіны «прымаць усё», варты пытання.
Затым правярайце з прылады, а не з дыяграмы. Карысныя каманды на маршрутызатарах тыпу FRR:
show bgp summary
show bgp ipv4 unicast 10.10.0.0/16
show bgp ipv4 unicast neighbors 10.255.0.2 advertised-routes
show ip route 10.10.0.0/16
Дадайце два назіранні, якіх табліца маршрутызацыі вам не дасць. Захапіце на знешнім інтэрфейсе, каб пацвердзіць, на які адрас насамрэч нацэлены інкапсуляваныя пакеты, напрыклад tcpdump -ni eth0 udp port 51820 для тунеля WireGuard або фільтр ESP для IPsec. Затым прасачыце да публічнага адраса партнёра і параўнайце хопы з трасіроўкай унутры тунеля; калі абодва ідуць па адным ланцугу правайдэра, ваша рэзерваванне жыве ў палітыцы маршрутызацыі, а не ў сетцы.
Нарэшце, наўмысна праверце адкліканне. Апусціце тунель падчас акна абслугоўвання, запішыце, колькі прэфікс застаецца ўсталяваным, што адбываецца з існуючымі сесіямі і ці вяртаецца далёкі бок да маршруту, які вы сапраўды прынялі б. Гэта практыкаванне кажа пра дызайн больш, чым любая дыяграма.
Маршрут — гэта не дазвол. Прэфіксы, якія вы дамаўляецеся абменьваць, нічога не кажуць пра тое, якія карыстальнікі могуць дасягнуць якой паслугі за тунелем, таму трымайце аўтэнтыфікацыю, дазволеныя паслугі і міжсеткавыя экраны хоста менавіта там, дзе яны былі. Дасяжны партнёр — гэта таксама не дазвол на неабмежаваны транзіт або на ўзнікненне адвольных адрасоў, і такія паўнамоцтвы належаць кантракту як камерцыйнае пытанне, а не радку палітыкі BGP.
- Назвіце прэфіксы, якія кожны бок можа ўзнікаць, і тыя, якія ён ніколі не павінен прымаць.
- Абмяжуйце MSS на тунелі і пацвердзіце, што вялікія абнаўленні сапраўды прыходзяць.
- Пералічыце агульныя залежнасці ніжняга пласта, а не колькасць тунеляў.
- Змерце рэальнае адкліканне і адзначце, што робіць праграма.