ťařina
Obsah Soubory
markdown

DHCP-a-DNS.md

6.7 kB 149 řádků Změněno Zobrazit na GitHubu Stáhnout
markdown
# DHCP a DNS Dvě služby, které dělají úplně různé věci, ale spojuje je jedna vlastnost: fungují na pozadí, nikdo o nich nepřemýšlí, a když se rozbijí, vypadá to jako „nefunguje internet". # DHCP Když připojíš zařízení do sítě, nemá žádnou adresu. Nemůže tedy nic poslat, protože nemá zpáteční adresu, a nemůže se ani nikoho zeptat, protože neví, koho. DHCP tenhle problém řeší tím, že se nový klient zeptá úplně všech naráz. ## Čtyři kroky ```mermaidsequenceDiagram    participant K as Klient    participant S as DHCP server    K->>S: DISCOVER (broadcast, kdokoliv?)    S->>K: OFFER (nabízím 192.168.1.10)    K->>S: REQUEST (beru ji)    S->>K: ACK (je tvoje, na 24 hodin)``` Zkratkou DORA. Klient křičí do sítě, server nabídne adresu, klient ji potvrdí a server ji zapíše. Druhý a třetí krok existují proto, že v síti může být víc DHCP serverů. Klient si vybere jednu nabídku a tou žádostí ostatním serverům oznámí, že jejich nabídku nepotřebují. ## Co všechno DHCP předává Zdaleka nejen adresu. V odpovědi je typicky: - IP adresa a maska- výchozí brána- adresy DNS serverů- doména pro hledání- doba zápůjčky- volitelně NTP server, adresa TFTP pro bootování a desítky dalších voleb Právě proto se špatně nastavený DHCP projevuje tak různorodě. Když chybí brána, funguje jen místní síť. Když chybí DNS, funguje ping na IP, ale ne na jména. ## Zápůjčka Adresa se nepřiděluje natrvalo, ale na dobu určitou. V polovině té doby si klient řekne o prodloužení. Když se server neozve, zkouší to znovu, a když ani pak, adresu po vypršení pustí. Doma nastav něco mezi 12 a 24 hodinami. Kratší doba znamená víc provozu, delší znamená, že se dlouho drží adresy zařízení, která už dávno odešla. ## Rezervace Když chceš, aby zařízení mělo pořád stejnou adresu, máš dvě možnosti. **Rezervace na DHCP serveru** je ta rozumná. Řekneš routeru „tahle MAC adresa vždycky dostane tuhle IP". Zařízení o ničem neví, dostává adresu normálně přes DHCP, jen pořád stejnou. Všechna nastavení zůstávají na jednom místě. **Statická adresa přímo na zařízení** je ta, co tě jednou kousne. Zařízení pak nemá ponětí o zbytku sítě, a když změníš rozsah nebo bránu, přestane fungovat a ty budeš půl hodiny hledat proč. Použij ji jen tam, kde nemáš na výběr. Pokud rezervuješ, drž si rezervace mimo dynamický rozsah. Například dynamicky `192.168.1.100` až `.200`, rezervace v `.10` až `.50`. Vyhneš se konfliktům a v seznamu klientů poznáš na první pohled, co je co. ## Dva DHCP servery v jedné síti Klasika, když někdo přinese domů router a zapojí ho do sítě jako switch, ale zapomene mu vypnout DHCP. Zařízení pak dostávají adresy náhodně od obou serverů, půlka sítě nefunguje a příčina je neviditelná. Když stavíš síť a připojuješ do ní jakoukoliv krabici s nápisem „router", první věc je vypnout na ní DHCP a WiFi. --- # DNS DNS překládá jména na adresy. To je popis, který znáte všichni, a nic nevysvětluje. Zajímavější je, jak se k té odpovědi vlastně dojde. ## Rekurzivní dotaz Když se tvůj počítač zeptá na `www.seznam.cz`, nezeptá se přímo. Zeptá se svého resolveru — obvykle routeru nebo serveru poskytovatele — a ten to vyřeší za něj: ```mermaidsequenceDiagram    participant P as Tvůj počítač    participant R as Resolver    participant Root as Kořenový server    participant CZ as Server pro .cz    participant S as Server seznam.cz    P->>R: kde je www.seznam.cz?    R->>Root: kde je www.seznam.cz?    Root->>R: nevím, ale .cz řeší tenhle server    R->>CZ: kde je www.seznam.cz?    CZ->>R: nevím, ale seznam.cz řeší tenhle server    R->>S: kde je www.seznam.cz?    S->>R: 77.75.79.222    R->>P: 77.75.79.222``` Systém je hierarchický a čte se zprava. Nejdřív se zjistí, kdo spravuje `.cz`, pak kdo spravuje `seznam.cz`, a teprve ten zná odpověď. Vypadá to zdlouhavě a taky to zdlouhavé je — proto se všechno kešuje. Druhý dotaz na tutéž doménu dostane odpověď okamžitě z paměti resolveru. ## Typy záznamů | Typ | K čemu ||---|---|| `A` | jméno na IPv4 adresu || `AAAA` | jméno na IPv6 adresu || `CNAME` | jméno na jiné jméno || `MX` | kam doručovat poštu pro doménu || `TXT` | libovolný text, používá se pro ověřování a SPF || `PTR` | zpětný překlad z adresy na jméno || `NS` | který server doménu spravuje | Když zapínáš [IPv6](Jak-funguje-IPv6), potřebuješ `AAAA`. Nepřidá se sám od sebe a to je jeden z nejčastějších důvodů, proč „IPv6 mám, ale nikdo se na mě nedostane". ## TTL a proč změny nejsou vidět hned Každý záznam má nastavenou dobu, po kterou si ho smí kdokoliv pamatovat. Když změníš IP adresu své domény, svět se to dozví až po vypršení téhle doby, ne okamžitě. Když plánuješ stěhování, sniž TTL na pár minut den předem. Po přesunu ho vrať zpátky nahoru. ## Kde všude se kešuje Tohle je zdroj věčného zmatku, protože keší je v řadě za sebou několik: 1. prohlížeč2. operační systém3. router4. resolver poskytovatele Když ti změna „nefunguje", pravděpodobně koukáš na jednu z nich. Vyčištění: ```ipconfig /flushdns                          # Windowssudo dscacheutil -flushcache                # macOSsudo systemd-resolve --flush-caches         # Linux``` A v prohlížeči zkus anonymní okno, protože Chrome má vlastní keš nezávislou na systému. ## Vlastní DNS doma Stojí za zvážení. Když si pustíš vlastní resolver, dostaneš tři věci: lokální jména pro vlastní zařízení, blokování reklamy na úrovni sítě, a nezávislost na tom, co ti podstrkuje poskytovatel. Nejběžnější volby jsou Pi-hole nebo AdGuard Home. Obojí běží klidně na Raspberry Pi nebo v kontejneru na NASu. Když to uděláš, počítej se dvěma věcmi. Musíš mít záložní řešení, protože bez DNS ti v domácnosti přestane fungovat úplně všechno včetně televize. A moderní prohlížeče a operační systémy mají tendenci obcházet tvůj resolver přes DoH (DNS přes HTTPS), takže to je potřeba na klientech vypnout nebo to zablokovat na [firewallu](Firewall-a-zony). ## Diagnostika ```dig seznam.cz              # dotaz na výchozí resolverdig @8.8.8.8 seznam.cz     # dotaz konkrétně na Googledig seznam.cz AAAA         # jen IPv6 záznamdig +trace seznam.cz       # celá cesta hierarchií``` Když `dig @8.8.8.8` funguje a `dig` bez parametru ne, máš rozbitý vlastní resolver. To je nejrychlejší způsob, jak to rozlišit. Víc v [nástrojích](Nastroje).