Směrování
Směrování
Směrování je jediné rozhodnutí, opakované pořád dokola: kam s tímhle paketem dál? Dělá ho každé zařízení pro každý paket, který odesílá, včetně tvého notebooku. Není to výhradní schopnost routerů.
Směrovací tabulka
Každý stroj má tabulku pravidel. Podívej se na svoji:
ip route # Linux
netstat -rn # macOS
route print # Windows
Typický notebook má něco takového:
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 scope link
Čte se to takhle. První řádek: pro cokoliv, co nesedí jinam, pošli to na 192.168.1.1. Druhý řádek: adresy 192.168.1.x jsou přímo na drátě, tam to pošli rovnou bez prostředníka.
Když přidáš VPN, přibude řádek. Když máš víc síťovek, přibudou další.
Nejdelší shoda vyhrává
Když se paket hodí do víc pravidel, vyhrává to nejkonkrétnější, tedy s nejdelším prefixem. Ne to první, ne to nejnovější.
Řekněme, že máš tuhle tabulku:
| Cíl | Přes |
|---|---|
0.0.0.0/0 |
192.168.1.1 |
10.0.0.0/8 |
192.168.1.5 |
10.20.30.0/24 |
192.168.1.9 |
Paket na 10.20.30.40 sedí do všech tří pravidel. Vyhraje /24, protože je nejkonkrétnější. Paket na 10.99.0.1 sedí do prvních dvou a vyhraje /8. Paket na 8.8.8.8 sedí jen do prvního.
Tomuhle se říká longest prefix match a je to jediné pravidlo, které při hádkách o směrování platí. Když ti něco jde „špatnou cestou", téměř vždy je to tím, že existuje konkrétnější pravidlo, o kterém nevíš.
Prefix 0.0.0.0/0 znamená doslova „úplně cokoliv", protože nula bitů musí souhlasit. Proto je to výchozí brána a proto je vždycky poslední v pořadí. Pokud ti to nedává smysl, projdi si prefixy a masky.
Výchozí brána
Doma máš v tabulce prakticky jen výchozí bránu a vlastní síť. Celá logika tvého notebooku se scvrkne na „je to soused, nebo to pošlu routeru".
Router má tabulku o něco větší, ale princip je stejný — má svoje připojené sítě a výchozí bránu směrem k poskytovateli.
Skutečné tabulky mají páteřní routery na internetu. Ty mají přes milion záznamů a žádnou výchozí bránu, protože už není kam se ptát dál.
Statické a dynamické směrování
Doma jsou všechna pravidla statická — buď je nastavil DHCP, nebo tys je zapsal ručně.
Ve větších sítích by to bylo neudržovatelné, takže si routery vyměňují informace o cestách samy pomocí protokolů jako OSPF (uvnitř organizace) nebo BGP (mezi poskytovateli). Doma to nepotřebuješ a nikdy potřebovat nebudeš, ale stojí za to vědět, že celý internet drží pohromadě právě BGP, a proto se občas stane, že něčí chyba v konfiguraci vypne půlku sítě na kontinentu.
Asymetrické směrování
Klasická past. Paket může tam jít jednou cestou a zpátky jinou. Na internetu je to běžné a nevadí to.
Doma to ale rozbije firewall, protože ten si pamatuje stav spojení a odpověď, která přijde odjinud, mu nesedí do tabulky, tak ji zahodí.
Nejčastěji na to narazíš, když máš dvě sítě propojené víc než jednou cestou, nebo když si nešikovně nastavíš VPN tak, že jen část provozu jde tunelem.
Když se to zacyklí
Kdyby si dva routery navzájem tvrdily, že cesta vede přes toho druhého, paket by se točil donekonečna. Proti tomu má IP hlavička pole TTL (v IPv6 se jmenuje hop limit).
Je to prosté počítadlo. Odesílatel ho nastaví, obvykle na 64. Každý router, který paket přepošle, ho sníží o jedna. Když dojde na nulu, paket se zahodí a routeru se pošle stížnost zpátky.
Na tomhle chování je postavený traceroute — pošle paket s TTL 1, dostane stížnost od prvního routeru a tím se dozví jeho adresu. Pak pošle TTL 2 a dozví se druhý. A tak dál, dokud se nedostane k cíli. Viz nástroje.
Praktické: co dělat, když to nejde
Zkontroluj bránu. ip route a koukni, jestli tam vůbec je výchozí trasa. Bez ní se nedostaneš nikam mimo vlastní síť.
Ping bránu. Když neodpovídá, je problém na vrstvě 2 nebo je špatně adresa. Viz MAC a ARP.
Ping veřejnou IP. ping 8.8.8.8. Když projde, směrování funguje a problém je jinde, nejspíš v DNS.
Pusť traceroute. Ukáže, kde se to láme. Když poslední odpovídající skok je tvůj router, problém je u poskytovatele. Když je někde na trase, problém je na internetu a ty s tím nic neuděláš.
Systematický postup je v diagnostice.