Зашто BGP преко VPN-а не контролише путању доњег слоја
BGP преко VPN-а размењује достижност и примењује политику рута, али доњи слој и даље бира спољашњу путању. Шта сесија заправо контролише.
Две локације повезују BGP преко IPsec тунела, уче префиксе једне друге и дијаграм се преименује у контролу путање. Управо та етикета је почетак забуне. Сесија заиста размењује достижност и заиста примењује политику, али нема шта да каже о томе који провајдер, кабл или рутер преноси шифроване пакете. Видео сам тим како поново гради тунел који ради, јер је очекивао да ће промена BGP руте преместити саобраћај на другу оптичку путању на коју сесија никада није могла да утиче.
Шта људи претпостављају да сесија купује
Већина очекивања долази из тога како промена руте изгледа у лабораторији. Објавите префикс преко тунела, удаљена страна га инсталира и саобраћај се помера. Исти редослед се дешава на рутеру који заиста има полуге за инжењеринг саобраћаја, па се то двоје меша. У лабораторији обе локације обично деле једну приступну линију, и управо зато се разлика тамо никада не покаже.
BGP је протокол достижности. Каже партнеру да можете да доставите пакете за префикс и дозвољава свакој страни да рангира понуде које прими. То је заиста корисно преко тунела: префикси се појављују и нестају док локације долазе и одлазе, и можете да одбијете опсег без писања статичке руте на сваком ивичном уређају. Оно што не ради је да стави рутере провајдера под вашу контролу.
Доњи слој носи спољашњи заглавље. Ваша крајња тачка тунела шаље шифроване пакете на адресу партнера, а мрежа између те две адресе их прослеђује рутама које су инсталирали њени оператери. Ништа у BGP сесији не мења ту одлуку, осим ако исти провајдер не нуди подржану услугу која то ради.
Шта сесија заправо носи
BGP говорник отвара TCP везу ка порту 179 свог партнера, користећи формате порука и атрибуте путање дефинисане у RFC 4271. Када адреса партнера лежи унутар тунела, тунел мора да буде подигнут и адреса достижна пре него што сесија уопште почне. Завршена IKE размена није BGP сусед. IPsec имплементације засноване на рутама пропуштају саобраћај само када постоји одговарајућа рута тунела, а она заснована на политици захтева адресу партнера унутар заштићеног селектора. Обртање овога ствара класично стање у ком је тунел зелен, а сесија стоји беспослено.
Када је сесија подигнута, политика одлучује шта је прелази. Листе префикса, AS-path филтери, горња граница максималног броја префикса и изричита одлука о подразумеваним рутама су минимум, и важе у оба смера. Партнер који прихвата све што добије може да вам да подразумевану руту која тихо замењује локални приступ интернету. Оба смера захтевају одвојене листе, јер су то што прихватате од партнера и то што му објављујете две различите одлуке.
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 на тунелу и потврдите да велика ажурирања заиста стижу.
- Наведите заједничке зависности доњег слоја, а не број тунела.
- Измерите стварно повлачење и забележите шта апликација ради.