ťařina
Obsah Soubory
markdown

Smerovani.md

4.6 kB 84 řádků Změněno Zobrazit na GitHubu Stáhnout
markdown
# 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            # Linuxnetstat -rn         # macOSroute print         # Windows``` Typický notebook má něco takového: ```default via 192.168.1.1 dev eth0192.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](WireGuard), 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](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](Firewall-a-zony), 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](Nastroje). ## 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](MAC-ARP-a-prepinani). **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](Diagnostika).