Technologie | Internet | DNS

Překládáme doménu na IP adresu krok za krokem a už chápeme, jak by mohlo Rusko přijít o internet

  • Jedním z klíčových systémů na internetu je DNS
  • Stará se o překlad doménového jména na koncovou IP adresu
  • Dnes si ten překlad vyzkoušíme krok za krokem

V posledních několika málo týdnech se v souvislosti se situací na Ukrajině a v Rusku dostal do hledáčku masmédií opět internet. A tak čteme zkazky o tom, která země ho opustí, jestli se kvůli tomu nezačne celý fragmentovat v ostrovní systémy a jaké weby a jejich domény dostanou nadobro stopku.

Jenže, abychom tomu všemu dokázali skutečně porozumět, musíme nejprve alespoň rámcově tušit, co to ten internet opravdu je. Říká se o něm, že je to síť síti. To je sice pravda, ale taková odpověď je stejně prázdná jako zásobník našeho redakčního kávovaru. Je to prostě klišé.

To, co skutečně dělá internet internetem, je spíše ohromný zástup komunikačních protokolů, které běží vedle sebe i nad sebou a vytvářejí dokonalou abstrakci pro koncové aplikace. Ať už to jsou recepty na Mimibazaru, nebo třeba Reddit

Internet je internetem díky protokolům

Takže, ve své podstatě nejde vůbec o ten optický kabel, který vám vede do domu. Když to totiž posunu do krajnosti, internet (tedy internetové protokoly) bychom mohli implementovat i na vcelku netradiční informační spoje. Třeba na:

  • poštovní holuby,
  • kouřové signály,
  • poslíčky rozvážející pizzu,
  • a dokonce i na pohledy odeslané Českou poštou.

Rozdíl bude jen v latenci.

Díky tomu je nakonec internet dostupný i v telekomunikačních technologiích, které původně sloužily k něčemu úplně jinému. Třeba v sítích mobilních operátorů.

Dnes si vysvětlíme, jak přesně funguje jeden z těch nejdůležitějších protokolů současného internetu – DNS. Nevybral jsem jej náhodou, týká se totiž i současné debaty okolo blokace ruských webů v Evropě i případné izolace celého Ruska. Zde bych s dovolením odkázal na nedávný zápisek výkonného ředitele správce české domény CZ.NIC Ondřeje Filipa pod názvem Jak blízko jsme rozštěpení Internetu?

Systém doménových jmen

DNS, tedy plným názvem Domain Name System, je – jak praví česká Wikipedie –hierarchický, decentralizovaný systém doménových jmen, který je realizován servery DNS a protokolem stejného jména. Jeho hlavním úkolem a příčinou vzniku jsou vzájemné převody doménových jmen a IP adres uzlů sítě.

f2a1eeeb-9122-44ac-be60-5d60546dbc9e
Ulice a město si zapamatujeme spíše, než katastrální a parcelní čísla

Přeloženo do češtiny, stejně jako na pohledy od Jadranu nepíšeme identifikátory katastrálního území 582786, 610003 a parcelní číslo cílové nemovitosti 556, ale lidsky srozumitelnou a snadno zapamatovatelnou adresu Jakubská 5, 602 00 Brno, tak i do webového prohlížeče už dnes nenapíšeme 85.207.58.49, ale třeba doménové jméno www.zive.cz.

Řešitel, tedy resolver

O převod podobného jména na adresu cílového stroje se stará speciální DNS server, kterému říkáme resolver – řešitel. Ve výchozím stavu jej nabízí zpravidla poskytovatel internetového připojení, stejně tak ale můžete operačnímu systému přikázat, ať použije nějaký jiný. 

a87fa6b2-f3be-43f9-a354-56c71d3f057b
IP adresy dvojice DNS serverů, které jsem automaticky získal od podnikové sítě

Třeba populární veřejné resolvery Google Public DNS, Cloudflare 1.1.1.1 a na seznamu by neměl chybět ani český server od správce tuzemské domény CZ.NIC.

Překlad jména na IP adresu krok za krokem

U řešitele bychom mohli skončit a vnímat jej jako jakousi tajemnou černou skříňku, které předložíme doménové jméno, načež nám během několika milisekund odpoví IP adresou cílového stroje. Tady jsme ale na Živě.cz, a tak půjdeme hlouběji.

37ec0e2e-b80b-4186-9eb7-848bf0f7b4dd
Kloboukresolver a plně-autoritativní řešení www.zive.cz. Co se přesně děje na obrázku, si vysvětlíme krok za krokem níže v článku

Jak jinak pochopit, co vlastně resolver dělá, než si ho naprogramovat v Pythonu! Neprogramátoři, nebojte se, kóduchtíví čtenáři vše najdou na GitHubu, no a my ostatní náš program využijeme jen k tomu, abychom popsali každý jeho krok při cestě hierarchickým a decentralizovaným stromem systému DNS.

13 kořenových serverů vládne všem

Zůstaňme rovnou u nás na Živě.cz. Dejme tomu, že je textový řetězec www.zive.cz to jediné, co na začátku víme, a potřebujeme zjistit IP adresu HTTP serveru, na kterou ukazuje. Kde začít?

Naštěstí známe výchozí bod DNS – jeho root, tedy kořen. Ve skutečnosti není ani zdaleka jeden, ale je to 13 serverů rozlišených znaky A-M, které spravuje 12 různých organizací:

  1. 198.41.0.4, AVerisign, Inc.
  2. 199.9.14.201, BInformation Sciences Institute
  3. 192.33.4.12, CCogent Communications
  4. 199.7.91.13, DUniversity of Maryland
  5. 192.203.230.10, ENASA Ames Research Center
  6. 192.5.5.241, FInternet Systems Consortium, Inc.
  7. 192.112.36.4, GDefense Information Systems Agency
  8. 198.97.190.53, HU.S. Army Research Lab
  9. 192.36.148.17, INetnod
  10. 192.58.128.30, JVerisign, Inc.
  11. 193.0.14.129, KRIPE NCC
  12. 199.7.83.42, LICANN
  13. 202.12.27.33, MWIDE Project

Třináct serverů sice zajišťuje jakousi základní redundanci, pro obrovský internet s miliardami koncových zařízení to ale samozřejmě ani zdaleka nestačí, a tak se ve skutečnosti jedná o anycastové IP adresy a serverů je k tomuto dni rovných 1 525!

cb45e9a2-fbc2-4906-8089-40eca2ea009c
V Praze máme zrcadla hned několika kořenů systému DNS

Počkat, počkat, jak je to možné? Anycastová IP adresa může směrovat na vícero serverů, přičemž se vybere ten, který je k vám nejblíže. Takže když bych si jako začátek cesty systémem DNS zvolil třeba kořen K (193.0.14.129), zjistím, že ve skutečnosti existuje v 82 kopiích rozesetých po celém světě.

Při navazování spojení se pak jednoduše zvolí ten, který je ke mně topologicky nejblíže – podle toho, k jakým dalším sítím je připojený můj poskytovatel připojení.

Hierarchický strom

Fajn, máme tedy jakési kořeny, ale k čemu jsou vlastně dobré? Jak už jsme si řekli výše, systém DNS je hierarchický – podobně jako třeba adresářový systém na vašem disku – a vy tuto hierarchii používáte, kdykoliv vyťukáváte do adresního řádku nějakou webovou adresu. Jsou to ty tečky!

6ebd2ea6-1a16-4c14-8e5b-5b25419795c3
Výřez doménového stromu

Takže zatímco na Windows můžeme mít třeba adresářovou hierarchii:

 C:\Users\cizek\Documents

A všichni hned víme, že je tam jakýsi oddíl C, v něm adresář Users, v něm podadresář cizek a v něm podadresář Documents, tak v případě doménového stromu:

cz.zive.www

Tam máme analogicky jakousi nejvyšší doménu cz (proto ji říkáme TLD – Top Level Domain), pak poddoménu zive a ještě poddoménu www.

Každý spravuje kousek systému

Oproti mému počítači, kde je vše na jedné hromadě a dnem i nocí připraveno pro frontální ransomwarový útok, je ale strom DNS decentralizovaný. To znamená, že každé patro může spravovat nějaká další delegovaná autorita.

Je to skvělý nápad, zátěž celého systému je totiž o to více rozložená a stejně tak i správa celého systému. Stručně řečeno, o systému DNS a jeho budoucnosti nerozhoduje výhradně hypotetický inženýr Švestka, ale i ostatní představitelé delegovaných autorit. Jsou to právě oni, kteří řídí internet a musí se domluvit. Naštěstí jim to jde prozatím lépe než třeba OSN.

Jednou z těchto autorit je i tuzemský CZ.NIC, který má na starost českou TLD.  

Řešíme překlad krok za krokem

Tak, zpět k našemu resolveru. Oněch 13 (potažmo 1 500+) kořenových serverů nám autoritativně sdělí, kdo má na starost konkrétní domény nejvyššího řádu. Tuto informaci mají ve svém obřím souboru. Říkáme mu zónový soubor, protože každé patro je vlastně jakási logická zóna domény, která může žít vlastním životem.

163559c8-2e2d-43a1-9260-e5827a45f71a
Náš autoritativní překlad začneme u volby náhodného kořenového serveru

Ahoj, pane kořenový server, kdo má na seznamu domény *.CZ?

Náš resolver si proto vybere některý z kořenových jmenných serverů a položí mu dotaz cz. IN NS.

56bdb5ba-3a12-4c43-8a00-b7841950ee8f
Ptáme se kořenového serveru na jmenné servery, které spravují doménu CZ

CZ. Představuje naši národní doménu, IN je zkratka pro internet a písmenky NS (name server) dáváme druhé straně najevo, že nás zajímá seznam jmenných serverů další úrovně, na kterých jsou už domény *.CZ.

Odpověď by mohla vypadat třeba takto:

id 4317
opcode QUERY
rcode NOERROR
flags QR RD
;QUESTION
cz. IN NS
;ANSWER
;AUTHORITY
cz. 172800 IN NS a.ns.nic.cz.
cz. 172800 IN NS b.ns.nic.cz.
cz. 172800 IN NS c.ns.nic.cz.
cz. 172800 IN NS d.ns.nic.cz.
;ADDITIONAL
a.ns.nic.cz. 172800 IN A 194.0.12.1
b.ns.nic.cz. 172800 IN A 194.0.13.1
c.ns.nic.cz. 172800 IN A 194.0.14.1
d.ns.nic.cz. 172800 IN A 193.29.206.1

a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1

Obsahuje hromadu zajímavých detailů, na které nemáme čas, tento článek by byl totiž delší než Ottův slovník naučný, takže vás odkážu na dokumentaci protokolu DNS.

Pro nás je podstatná sekce AUTHORITY a ADDITIONAL. V té první jsou na jednotlivých řádcích DNS záznamy typu NS s doménami čtyř hlavních českých nameserverů. V sekci ADDITIONAL pak vidíme i jejich IPv4 a IPv6 adresy (odpovědi typu IN A, IN AAAA).

Jelikož se nacházíme v hierarchickém stromě, můžeme je použít úplně stejným způsobem jako ty hlavní kořenové pro další úroveň hledání.

Ahoj, pane server, kdo má na seznamu doménové jméno zive.cz?

Touto další úrovní je doménové jméno zive.cz, a tak třeba tomu prvnímu nameserveru v řadě (194.0.12.1) položíme podobný dotaz zive.cz. IN NS.

5a9e0a24-cc49-47a9-a7c5-0c54d1c54da4
Ptám se jmenného serveru CZ.NIC na jmenné servery, které spravují zive.cz

Přeloženo do češtiny: Ahoj 194.0.12.1, prosím tě, jaké jmenné servery mají na seznamu doménu zive.cz?

Odpověď bude vypadat třeba takto:

id 62323
opcode QUERY
rcode NOERROR
flags QR RD
;QUESTION
zive.cz. IN NS
;ANSWER
;AUTHORITY
zive.cz. 3600 IN NS ns1.ignum.com.
zive.cz. 3600 IN NS ns2.ignum.cz.
;ADDITIONAL
ns2.ignum.cz. 3600 IN A 217.31.48.201
ns2.ignum.cz. 3600 IN AAAA 2001:1ab0:7e1e:2::5

Hurá, z výsledku je jasné, že doménu zive.cz mají na seznamu jmenné servery ns1.ignum.com a ns2.ignum.com, přičemž pro ten český máme opět A i AAAA záznam s IPv4/IPv6 adresou!

Mimochodem, všimněte si, že jsme už opustili autoritu nic.cz a přecházíme do delegované zóny, kterou spravuje ignum.cz. Nemáme tu tedy žádného Velkého bratra, ale hromadu – obrovskou hromadu – dílčích hráčů.

Ahoj, pane server, jakou má IP adresu www.zive.cz

Stejný nameserver spravuje i poslední subdoménu www, takže se konečně můžeme stroje na adrese 217.31.48.201 optat, na jakou IP adresu ukazuje celé doménové jméno www.zive.cz. Provedeme dotaz www.zive.cz. IN A.

ab4299ac-41f8-40a4-8de8-857f53de96bd
Ptám se jmenného serveru ignum.cz, jakou IP adresu má www.zive.cz

Odpověď může vypadat třeba takto:

id 38943
opcode QUERY
rcode NOERROR
flags QR AA RD
;QUESTION
zive.cz. IN A
;ANSWER
zive.cz. 1924 IN A 85.207.58.49
;AUTHORITY
;ADDITIONAL

Už dobře víme, že spojení IN A je zkratka pro internet a IP adresu a náš řešitel se konečně dobral cíle. Doménovému jménu www.zive.cz odpovídá IP adresa 85.207.58.49.

V odpovědi jsem zároveň ztučnil znaky AA v řádku flags QR AA RD. Je to totiž zkratka pro Authoritative Answer – autoritativní odpověď, a my tak víme, že se ptáme serveru, který má toto doménové jméno opravdu na seznamu.

Internety by shořely

Počkat, počkat a jaký jiný server by nám měl také odpovědět? Jakýkoliv! Náš překlad byl od A do Z autoritativní – ptali jsme se správných autorit –, nicméně v praxi by to bylo pomalé.

Dotaz na našem pomalém redakčním internetu zabere i několik set milisekund, a kdybychom to dělali pokaždé – včetně mnoha miliard dalších živých i strojových účastníků webu –, internety by shořely.

eae157ed-b79e-4968-aa8d-29cbdc964d2a
Denní dotazy na kořen K, který spravuje evropská organizace RIPE NCC

Namísto toho se zpravidla ptáme neautoritativně a dostaneme odpověď z mezipaměti. Tu si může vést přímo koncový program v počítači, operační systém, resolver poskytovatele internetového připojení a i další dotazovací servery po cestě.

Všichni si drží informaci o doméně nějaký čas, než vyprší a obnoví se novým autoritativním dotazem. Právě proto vždycky chvíli trvá, než se nějaká změna v systému DNS projeví napříč internetem. Díky tomu ale může být řešení IP adresy mnohem rychlejší a není se třeba ptát všech autorit stromu.

8253c121-4229-48fb-84bf-6684f1a6103f
Hopsání skrze celý strom by bylo zdlouhavé, servery si proto cachují informace

Například bychom si mohli nějaký čas pamatovat přinejmenším IP adresy nameserverů, které spravují jména na doméně CZ a neptat se na to pokaždé těch nejvyšších, kořenových.

Neautoritativní odpověď sebou ale zase nese riziko podvrhu, musíme totiž důvěřovat tomu, kdo tuto cache spravuje a který ji zároveň mohl upravit a přesměrovat nás na nějaký záškodnický stroj. Aby se tak nedělo, systém na to pamatuje třeba bezpečnostními mechanizmy DNSSEC, které pravost údajů, na které se ptá resolver, ověřují pomocí elektronického podpisu.

Co kdybychom chtěli z DNS vyřadit Rusko?

Na závěr bychom do toho všeho měli nějak zakomponovat aktuální geopolitickou situaci. DNS je totiž jednou z cest, jak od internetu odpojit celou zónu. Dejme tomu, že by nejvyšší autority (kořenové jmenné servery) vyslyšely žádost Ukrajiny, ať odpojí celé Rusko.

V podstatě by stačilo z jejich zónových souborů smazat veškeré informace o jmenných serverech, které spravují doménu RU. Bylo by to technicky možné, kořenové servery totiž sice mají své kopie samozřejmě i v Moskvě, ale ani jeden z nich přímo nespravuje žádná ruská autorita (viz seznam v úvodu článku).

9b1e0dc0-3bdb-45dc-bd5c-4d256dabdbc0
Poněkud košatější pokus o autoritativní řešení domény pravda.ru

Dejme tomu, že by k tomu skutečně došlo a změna by se po vypršení všech dílčích mezipamětí projevila v celém systému DNS.

Když byste pak do webového prohlížeče vyťukali adresu www.pravda.ru, program by se zeptal vlastního, nebo systémového resolveru, jakou má IP adresu, ten by už ale tento dotaz nedokázal vyřešit, protože by ani jeden z kořenových serverů nevedl záznamy o jmenných serverech, které spravují doménu RU.

aa286774-e789-4954-9d20-4ac1c82d3d32
A takhle by překlad dopadl, kdybychom vyřadili RU z kořenů

Na fyzické úrovni by přitom byl internet stále stejný, nikdo by nemusel překopávat motyčkou optické páteřní linky vedoucí do ruské říše, ale stejně by to nefungovalo. Jak už jsme si totiž řekli na začátku, internet dělají tím, čím je, komunikační protokoly a nikoliv přímo fyzický nosič.

Ruský ostrovní systém

Moskva se nicméně na podobnou eventualitu připravuje už roky a součástí jejího runetu je právě i paralelní vlastní kořen, který musejí tamní internetoví operátoři brát v potaz. I kdyby tedy doména RU vypadla z globálních kořenových serverů, stále by běžela na tom ruském pod plnou kontrolou Moskvy.

A jelikož Rusko připravuje podobné stínové kroky i v oblasti systému IP adres a čísel ASN pro autonomní systémy – o těch zase někdy příště –, nejspíše by opravdu dokázalo fungovat ve svém vlastním ostrovním systému.  

Diskuze (24) Další článek: Lingea pomáhá. Zdarma zpřístupňuje jazykové nástroje pro ukrajinštinu

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,