13.4 Riešenie záložného pripojenia k internetu
Záložné pripojenie
Obyvatelia domácnosti majú obvykle len jediné internetové pripojenie a v prípade výpadku sú bez internetu, prípadne na obmedzenom mobilnom pripojení. Iná situácia je v rôznych podnikoch a organizáciách - tam je potrebné mať záložné pripojenie (Failover).
Na prvý pohľad sa môže zdať, že konfigurácia záložného pripojenia bude veľmi jednoduchá: budú dve brány do internetu so zapnutým overovaním, líšiace sa len uvedenou vzdialenosťou (pozri kapitolu 9.1 Smerovanie medzi sieťami).
Čo sa stane, pokiaľ máme dve brány s rovnakou definovanou vzdialenosťou?
V tomto prípade nepôjde o záložnú trasu, ale o rozloženie záťaže (Load Balancing). Niektoré pakety pôjdu cez jednu bránu a iné cez druhú bránu. Detailnejšie situáciu rozoberieme v ďalšej podkapitole nižšie.
Problém nastane v praxi - totiž nie vždy sa výpadok prejaví nedostupnosťou brány! Bránou môže byť smerovač alebo modem od ISP, ktorý sa nachádza v rovnakej budove a je fyzicky zapnutý, no chyba (napríklad prerušený kábel) môže byť niekde ďalej v sieti ISP. Náš smerovač vidí svoju bránu ako dostupnú, a preto na záložnú linku neprepne. Ani v prípade PPPoE pripojenia nemáme istotu, že náš ISP nemá problém niekde hlbšie vo svojej sieti. Ako to riešiť, sa dozvieme v podkapitole o rekurzívnych trasách.
Viaceré rovnocenné brány
Pokiaľ v MikroTik RouterOS zadefinujeme dve (alebo viac) brán pre rovnaký cieľ a obom priradíme rovnakú vzdialenosť, vytvorí sa takzvaná ECMP trasa (Equal-Cost Multi-Path). V smerovacej tabuľke sa pre každú bránu objaví samostatný záznam, no všetky budú označené špeciálnym príznakom + (ECMP).
Vynára sa zásadná otázka - ktorou bránou pôjdu pakety? Tu sa uplatňuje štandardné správanie Linux jadra (na ktorom je postavený aj MikroTik RouterOS):
- Pakety nesmeruje náhodne a ani striedavo (round-robin). Ak by smerovač polovicu paketov jedného spojenia posielal cez ISP1 a druhú polovicu cez ISP2, pakety by mohli do cieľa prichádzať v rôznom poradí (pravdepodobne bude mať každý ISP inú latenciu) a hlavne - ak používame NAT, cieľ by videl pakety z dvoch rôznych IPv4 adries, čo by chápal ako dve rôzne komunikácie.
- Využíva sa hašovanie L4 spojení (soketových párov). Linuxové jadro vezme z hlavičky paketu zdrojovú adresu, cieľovú adresu, L4 protokol, zdrojový port a cieľový port (pokiaľ sú v danom protokole dostupné). Z týchto údajov vypočíta haš a na jeho základe zvolí bránu. Jednoduchšie povedané: všetky pakety jedného spojenia pôjdu tou istou bránou. Ďalšie spojenie už môže ísť inou bránou.
Ak budem mať dvoch ISP a na smerovači nastavené dve rovnocenné ECMP trasy, pôjde mi internet rýchlosťou oboch ISP dokopy?
Áno a aj nie - situácia vyplýva z opisu hašovania spojení. Teda pokiaľ by sme robili jeden prenos (jedným spojením), použije sa len jeden z ISP. No pokiaľ budeme robiť viaceré prenosy súčasne, v súčte bude rýchlosť naozaj zodpovedať súčtu rýchlostí oboch ISP.
Môžem používať brány rôznych ISP, pokiaľ nepoužívam NAT?
Toto je situácia s globálnymi IPv6 adresami - bežne dostaneme od každého ISP iný sieťový prefix, a teda počítač by musel mať dve rôzne globálne IPv6 adresy. Pri každom vytváranom spojení by OS rozhodol, v menej ktorej adresy ho vytvorí (čo nemôžeme veľmi ovplyvniť) a našou starosťou by bolo zariadiť, aby spojenia z adries od konkrétneho ISP šli len cez jeho linku. V opačnom prípade by nesprávny paket ISP zahodil (ochrana proti podvrhnutiu adresy).
Hoci znie myšlienka ECMP veľmi lákavo, v praxi môže priniesť rôzne problémy práve kvôli NAT prekladu na dve rôzne verejné adresy. Citlivejšie systémy (ktoré viac dbajú na bezpečnosť) môžu opakovane vyžadovať autentifikáciu pri každom novom spojení, ak sa vytvorí z inej adresy. Preto sa tento spôsob neodporúča používať v kombinácii s NAT. Rovnaký problém nám hrozí aj pri dvoch rôznych globálnych IPv6 adresách. ECMP má však zmysel pri lokálnych sieťach.
Rekurzívne trasy
Overenie skutočnej dostupnosti internetu je možné s využitím rekurzívnych trás, ktoré vytvoríme v dvoch krokoch. Predpokladajme, že primárne pripojenie je cez ISP1 (PPPoE), sekundárne cez ISP2 (PPPoE) a ďalšie záložné cez miestneho ISP3 (dodaný smerovač):
- Zadefinujeme kontrolné body: Pre každého ISP je potrebné definovať iný kontrolný bod - ním môže byť ľubovoľná verejná IP adresa v internete, ktorá spoľahlivo odpovedá na ping (napríklad adresy 1.1.1.0 až 1.1.1.255, patriace CDN CloudFlare). Každej takejto individuálnej adrese nastavíme trasu s bránou daného ISP a nastavíme Scope na hodnotu 10 - nezapíname overovanie dostupnosti a ponecháme vzdialenosť 1:
- Dst. Address: 1.1.1.1/32, Gateway: pppoe-isp1, Scope: 10
- Dst. Address: 1.1.1.2/32, Gateway: pppoe-isp2, Scope: 10
- Dst. Address: 1.1.1.3/32, Gateway: 100.100.0.1, Scope: 10
- Nastavíme brány podľa priority: Teda zadefinujeme skutočné predvolené brány (uvedieme vytvorené kontrolné body), ktoré rozlíšime požadovanou vzdialenosťou. Nastaviť musíme Target Scope vyšší ako bol v predošlom bode (teda viac ako predvolených 10), zapneme tiež overovanie dostupnosti:
- Dst. Address: 0.0.0.0/0, Gateway: 1.1.1.1, Check Gateway: ping, Distance: 1, Target Scope: 11
- Dst. Address: 0.0.0.0/0, Gateway: 1.1.1.2, Check Gateway: ping, Distance: 2, Target Scope: 11
- Dst. Address: 0.0.0.0/0, Gateway: 1.1.1.3, Check Gateway: ping, Distance: 3, Target Scope: 11
Pokiaľ by sme nechceli byť odkázaní na jediný kontrolný bod pre každého ISP, bolo by treba vykonať ešte medzikrok s vytvorením „virtuálnych“ smerovačov (s ľubovoľnou lokálnou adresou, napr. 10.255.255.x) pre každého ISP, pričom každý takýto smerovač by mal uvedené ako bránu viaceré kontrolné body s rôznou vzdialenosťou a tieto virtuálne smerovače by boli použité ako predvolené brány.
Pozor si treba dať na situáciu, keď máme verejnú IP adresu u viacerých ISP a cez ňu prijímame spojenia. Za normálnych okolností trasa odchádzajúcich paketov nezohľadňuje, cez ktoré pripojenie bolo nadviazané spojenie. Je jasné, že pokiaľ prichádza spojenie cez ISP2 a my odpovieme cez predvoleného ISP1, spojenie sa nenadviaže. Pre riešenie tejto situácie je potrebné označovať prichádzajúce spojenia (Firewall Mangle: mark-connection) a potom na základe označeného spojenia meniť tabuľku smerovania (mark-routing). Toto je však nad rámec nášho kurzu.
