Síť je to, co spojí tvůj počítač se zbytkem světa — s routerem doma, s webem, se serverem v cloudu. V Linuxu se skoro všechno kolem sítě dá zjistit a nastavit z terminálu pár příkazy: jakou máš IP adresu, kudy data odcházejí ven (brána/gateway), jak se jméno jako
github.commění na IP, a co na tvém stroji zrovna poslouchá na síti. Až pochopíš těch pár vrstev, přestane být „nefunguje mi internet" magie — a stane se z toho pár otázek, na které umíš odpovědět.
Pár pojmů na úvod
- IP adresa = číselná adresa počítače v síti, něco jako telefonní číslo. Verze IPv4 vypadá
jako
192.168.1.42, novější IPv6 jako2001:db8::1. Podle ní ostatní vědí, kam ti poslat data. - Síťové rozhraní (NIC / interface) = „zásuvka do sítě". Fyzická karta (
eth0,enp3s0), Wi-Fi (wlan0,wlp2s0) nebo virtuální (lo,docker0). Každé může mít vlastní IP. - Brána (gateway / default route) = router, kterému stroj předá data, když cíl není v místní síti. Bez ní se dostaneš tak akorát na souseda v LAN, ale ne na internet.
- DNS = telefonní seznam internetu. Překládá jména (
example.com) na IP adresy, protože lidé si pamatují jména a počítače potřebují čísla. - Port = číslo „dveří" na jedné IP adrese. Web běží typicky na portu
80/443, SSH na22. Jedna IP, hodně portů — každá služba má svoje. - Loopback (
127.0.0.1,localhost) = adresa „já sám". Data po ní nikdy neopustí počítač; slouží k tomu, aby spolu mluvily programy na jednom stroji.
IP adresa a rozhraní — kdo jsem v síti
Každý počítač v síti má aspoň jednu IP adresu a aspoň jedno rozhraní, přes které je připojený.
Rozhraní si představ jako konkrétní kabel nebo Wi-Fi anténu; IP adresa je číslo, které na tom rozhraní
„visí". Vypíšeš je příkazem ip addr (zkráceně ip a):
ip addr
# nebo krátce
ip a
Typický výstup (zkráceno):
1: lo: <LOOPBACK,UP,LOWER_UP> ...
inet 127.0.0.1/8 scope host lo
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
inet 192.168.1.42/24 scope global dynamic enp3s0
Co z toho čteš:
loje loopback — vždy tam je, vždy má127.0.0.1. K němu se dostaneme níž.enp3s0je fyzické rozhraní, které má IP192.168.1.42. To/24je maska sítě — říká, které adresy jsou „místní" (tady192.168.1.0–192.168.1.255).UPznamená, že rozhraní je aktivní. Když tamUPchybí, rozhraní je vypnuté a síť po něm nejede.
💡 Adresy
192.168.x.x,10.x.x.xa172.16–31.x.xjsou privátní — používají se v domácích a firemních sítích a na veřejném internetu je nikdo nevidí přímo. Ven jdeš přes router, který je „přeloží" na svou veřejnou IP (NAT).
Kudy data odcházejí ven — brána a routovací tabulka
IP adresa ti řekne, kdo jsi. Ale když chceš poslat data na github.com, počítač musí vědět kudy.
K tomu slouží routovací tabulka — seznam pravidel „pro tenhle rozsah adres jdi tudy". Vypíšeš ji:
ip route
# nebo krátce
ip r
default via 192.168.1.1 dev enp3s0 proto dhcp ...
192.168.1.0/24 dev enp3s0 proto kernel scope link src 192.168.1.42
Dva řádky, dvě pravidla:
192.168.1.0/24 dev enp3s0— „adresy v mojí místní síti pošli přímo přesenp3s0". Soused v LAN je na dosah bez routeru.default via 192.168.1.1— default route neboli brána. „Cokoli, co nesedí na žádné konkrétnější pravidlo (= zbytek světa), pošli routeru192.168.1.1." Ten to pošle dál.
Bez řádku default via ... se dostaneš jen do místní sítě a internet nejede — i když máš IP a
kabel v pořádku. To je jeden z nejčastějších tichých problémů (viz Failure modes).
DNS — jak se jméno mění na IP
Do prohlížeče píšeš github.com, ale síť pracuje s IP adresami. Překlad jména na IP obstarává DNS.
Když se zeptáš na github.com, počítač pošle dotaz na DNS server (typicky ten od providera nebo
router) a dostane zpátky IP, na kterou se pak teprve připojí.
Kde je nastavené, koho se ptát:
/etc/resolv.conf— klasický soubor se seznamem DNS serverů (nameserver 1.1.1.1). Historicky ho ladíš tady, ale na moderních systémech ho často spravuje automat a ručně editovat nemá smysl.systemd-resolved— na Fedoře, Ubuntu a spol. běžně vyřizuje DNS tahle služba./etc/resolv.confpak bývá jen symlink na ni (127.0.0.53). Stav zjistíš:resolvectl status/etc/hosts— malý ruční seznam „jméno → IP", který se prohlíží dřív než DNS. Zápis127.0.0.1 localhostje tam vždycky. Když sem přidáš řádek, přebije DNS pro to jméno:# /etc/hosts 192.168.1.50 muj-server.local
🚩
/etc/hostsje mocný, ale zákeřný: když sem někdy něco napíšeš a zapomeneš na to, jméno bude ukazovat „napořád" na tvou ručně zadanou IP a žádný DNS s tím nehne. První místo, kam kouknout, když se jméno chová divně.
Ověřit, jak se konkrétní jméno překládá:
dig github.com +short # jen výsledné IP
host github.com # čitelněji, i zpětně
getent hosts github.com # funguje vždy (dig/host bývají v balíku bind-utils/dnsutils, nemusí být)
Porty a co poslouchá
Na jedné IP adrese může běžet spousta služeb naráz — rozlišují se portem. Když chceš vědět, co
na tvém stroji naslouchá (čeká na příchozí spojení), použiješ ss:
ss -tulpn
Co znamenají ta písmenka:
t= TCP,u= UDP (dva hlavní typy spojení),l= jen naslouchající sokety (listening),p= ukaž proces (který program to je) — často chcesudo, jinak neuvidíš cizí,n= čísla místo jmen (nepřekládej porty na názvy, je to rychlejší a jasnější).
Ukázka výstupu:
Netid State Local Address:Port Process
tcp LISTEN 127.0.0.1:5432 postgres
tcp LISTEN 0.0.0.0:22 sshd
Klíčový detail je Local Address:
127.0.0.1:5432— služba poslouchá jen na loopbacku. Dostane se k ní pouze program na tomtéž počítači. Zvenčí je neviditelná. (Tak je správně schovaná databáze.)0.0.0.0:22— poslouchá na všech rozhraních, tedy i směrem do sítě. Kdokoli, kdo na stroj vidí (a projde firewallem), se může připojit.
Ten rozdíl 127.0.0.1 vs 0.0.0.0 je jeden z nejdůležitějších v celé kapitole — plete si ho spousta
lidí a vede to buď k „proč se nemůžu připojit", nebo naopak k nechtěně vystavené službě.
Diagnostika — když něco nejede
Pár nástrojů, kterými rozklíčuješ „nefunguje mi internet" na konkrétní příčinu:
ping 1.1.1.1 # jde vůbec konektivita? (odpovídá vzdálená IP?)
ping github.com # jde konektivita PŘES DNS? (funguje překlad jména?)
dig github.com # jak se jméno překládá na IP (a odkud)
host github.com # totéž, čitelněji
curl -I https://github.com # skutečně navážu HTTP spojení? (hlavičky odpovědi)
wget -qO- https://example.com # stáhni obsah (rychlá zkouška, že web odpovídá)
traceroute github.com # kudy data putují — kde se cesta zasekne
Logika je vždycky od nejnižší vrstvy nahoru:
ping 1.1.1.1— mluví stroj vůbec ven? Když ne, problém je nízko (rozhraní, brána, kabel).ping github.com— pokud IP pinguje, ale jméno ne, je rozbité DNS (viz Failure modes).curl/wget— spojení navázané, teď jde o konkrétní službu (odpovídá web? správný port?).traceroute— ukáže každý „skok" (router) po cestě; kde přestanou přibývat, tam je zádrhel.
💡
pingposílá tzv. ICMP pakety. Některé servery (a firewally)pingschválně ignorují — takže „neodpovídá na ping" ještě nutně neznamená „je mrtvý". Proto se hodí zkusit icurlna konkrétní port.
NetworkManager a nmcli (krátce)
Na desktopu i na spoustě serverů síť spravuje NetworkManager — služba, která se stará o připojení
(zapamatuje si Wi-Fi, přidělí IP přes DHCP, nastaví DNS). Ovládat ji z terminálu umí nmcli:
nmcli device status # přehled rozhraní a jejich stavu
nmcli connection show # uložená připojení (profily)
nmcli device wifi list # dostupné Wi-Fi sítě
nmcli device wifi connect "NazevSite" password "heslo"
💡 Příkazy
ipjen ukazují a mění stav teď hned (a po rebootu se to ztratí). NetworkManager naopak drží trvalou konfiguraci. Proto:ip aaip rna koukání a rychlou diagnostiku,nmcli(nebo GUI) na trvalé nastavení.
Loopback — 127.0.0.1 a localhost
Rozhraní lo a adresa 127.0.0.1 (jméno localhost) jsou zvláštní: data po nich nikdy neopustí
počítač. Slouží k tomu, aby spolu mohly mluvit programy na jednom stroji — třeba tvá aplikace se
připojí na databázi „na localhost:5432", i když je fyzicky na stejném počítači.
Proč je to užitečné:
- Bezpečnost — služba, která poslouchá jen na
127.0.0.1, je zvenčí nedosažitelná. Ideální pro věci, které nemají co dělat na internetu (databáze, interní admin). - Vývoj —
npm run devtypicky nastartuje web nahttp://localhost:3000; vidíš ho jen ty. - Vždy funguje — loopback jede, i když nemáš žádnou síť ani kabel.
ping 127.0.0.1je test, že vůbec funguje síťová vrstva jádra.
Failure modes — časté omyly začátečníků
- „Internet nejede" = vždycky DNS? Ne vždy, ale často. Rozliš to:
ping 1.1.1.1jde, aleping github.comne → konektivita je v pořádku, rozbité je DNS (překlad jména na IP). Když nejde aniping 1.1.1.1, je problém níž (rozhraní, brána). - Zapomenutá brána (default route). Máš IP, rozhraní je
UP, souseda v LAN pingneš — ale internet nikde. Podívej se doip route, jestli tam vůbec je řádekdefault via .... Bez něj data ven nemají kudy odejít. - Služba poslouchá jen na
127.0.0.1místo0.0.0.0. Aplikace „běží", ale z jiného počítače se na ni nepřipojíš — protože poslouchá jen na loopbacku. Zkontrolujss -tulpna Local Address. (Opačný průšvih: nechtěně nasloucháš na0.0.0.0a vystavíš do sítě něco, co nemáš.) /etc/hoststiše přepisuje DNS. Jméno ukazuje na „špatnou" IP adigpřitom vrací něco jiného? Podívej se do/etc/hosts— ruční záznam tam přebíjí DNS a snadno se na něj zapomene.- Změna přes
ippo rebootu zmizí.ip addr add ...nastaví adresu jen dočasně. Trvale to patří do NetworkManageru (nmcli) — jinak se po restartu diví, kam se nastavení podělo.
🛠️ Cvičení
- Kdo jsem a kudy jdu ven. Najdi svou IP adresu a rozhraní, na kterém visí, a pak zjisti adresu své brány (default route). Které dva příkazy k tomu potřebuješ a kde v jejich výstupu ty údaje jsou?
- Rozliš DNS od konektivity. Bez googlení popiš, čím ověříš, že problém je v DNS a ne v připojení. Které dva pingy a v jakém pořadí, a co který výsledek znamená?
- Co na mně poslouchá. Vypiš naslouchající služby na svém stroji a u každé rozhodni, jestli je dostupná jen lokálně, nebo i ze sítě. Podle čeho to poznáš?
- Přebij DNS přes
/etc/hosts. Vysvětli, jak bys donutil jménotest.localukazovat na127.0.0.1, aniž bys sahal na jakýkoli DNS server. Proč to zabere? - Přelož jméno na IP dvěma způsoby. Zjisti IP adresu
example.coma pak vysvětli, pročpingna to jméno může selhat, i když samotný překlad na IP funguje.
Náčrt řešení — rozbal, až si cvičení zkusíš sám
- IP + brána — IP a rozhraní vypíše
ip addr(ip a): hledáš řádekinet ...u svého rozhraní (např.enp3s0), ne ulo. Bránu vypíšeip route(ip r): řádekdefault via <IP> dev ...— ta IP zaviaje tvoje brána. Pozor: pokud řádekdefaultvip routechybí, ven se nedostaneš ani s platnou IP. - DNS vs konektivita — nejdřív
ping 1.1.1.1(ping na IP, DNS se neúčastní): když odpovídá, konektivita ven funguje. Pakping github.com(ping na jméno, nejdřív se musí přeložit přes DNS): když IP pinguje, ale jméno ne, je rozbité DNS. Když nejde aniping 1.1.1.1, problém je níž (rozhraní/brána). Pozor: některé servery ping ignorují — jako cíl ber spolehlivou IP. - Naslouchající služby —
ss -tulpn(klidně sesudo, ať vidíš i cizí procesy). Rozhoduje sloupec Local Address:127.0.0.1:PORT= dostupné jen lokálně,0.0.0.0:PORT(nebo*, resp.::u IPv6) = poslouchá i do sítě. Pozor:pvyžaduje práva, jinak u cizích služeb neuvidíš jméno procesu. /etc/hostspřebíjí DNS — do/etc/hostspřidáš řádek127.0.0.1 test.local(jako root). Zabere to, protože systém prohlíží/etc/hostsdřív než se ptá DNS serveru — najde-li jméno tam, dál se neptá. Pozor: snadno se na takový záznam zapomene a pak se divíš, proč jméno ukazuje „nesmysl", který žádný DNS nepotvrdí.- Překlad vs ping — IP zjistíš
dig example.com +shortnebohost example.com.pingna jméno může selhat i při funkčním překladu, protože ping (ICMP) může být na cílovém serveru nebo firewallu blokovaný — jméno se přeloží na IP správně, ale server na ping schválně neodpovídá. Pozor: „neodpovídá na ping" tedy neznamená automaticky „je nedostupný"; zkuscurl -I https://example.com.
🧠 Otázky & odpovědi
Jaký je rozdíl mezi IP adresou a portem?
IP adresa identifikuje počítač v síti (kam poslat data) — třeba 192.168.1.42. Port je
číslo „dveří" na té adrese, které rozliší jednotlivé služby na stejném stroji — web na 443,
SSH na 22, databáze na 5432. Přirovnání: IP je adresa domu, port je číslo bytu. Jedno spojení je
vždycky určené dvojicí IP + port, proto na jedné IP může běžet spousta služeb naráz, aniž by si
překážely.
Ping na IP funguje, ale na jméno ne — co se děje?
Konektivita je v pořádku, ale rozbité je DNS. Ping na IP (ping 1.1.1.1) žádný překlad nepotřebuje,
takže projde. Ping na jméno (ping github.com) musí jméno nejdřív přeložit na IP přes DNS — a když
DNS neodpovídá nebo je špatně nastavené, ping selže ještě před odesláním. Zkontroluj, koho se stroj ptá
(resolvectl status, /etc/resolv.conf) a jestli ti jméno přeloží dig github.com. Časté i to, že
překlad kazí zapomenutý záznam v /etc/hosts.
Co znamená, že služba poslouchá na 127.0.0.1 versus 0.0.0.0?
127.0.0.1 je loopback — služba je dostupná jen z toho samého počítače, zvenčí je neviditelná.
0.0.0.0 znamená všechna rozhraní — služba poslouchá i směrem do sítě, takže se k ní může připojit
kdokoli, kdo na stroj vidí (a projde firewallem). Pro interní věci (databáze, admin panel) chceš
127.0.0.1; pro službu, která má být dostupná zvenčí (třeba web server), potřebuješ 0.0.0.0. Který
je který, zjistíš ve sloupci Local Address v ss -tulpn.
K čemu je brána (default route) a jak poznám, že mi chybí?
Brána je router, kterému stroj předá data pokaždé, když cíl není v místní síti — tedy prakticky
pro celý internet. Bez ní se dostaneš jen na počítače ve stejné LAN, ale ven ne. Poznáš to tak, že máš
platnou IP a rozhraní je UP, souseda v síti pingneš, ale ping 1.1.1.1 selže. Ověříš příkazem
ip route: musí tam být řádek začínající default via <IP> .... Když chybí, data ven nemají kudy
odejít — a žádné DNS ani kabel s tím nepohnou.
Proč /etc/hosts přebíjí DNS a kdy se to hodí?
Protože systém při překladu jména prohlíží nejdřív /etc/hosts a teprve když jméno nenajde, ptá se
DNS serveru. Najde-li ho v souboru, dál se neptá — takže ruční záznam „vyhraje" nad čímkoli, co říká
DNS. Hodí se to na testování (nasměruješ si muj-web.local na 127.0.0.1 bez zásahu do DNS), na
lokální přezdívky serverů nebo na rychlé přesměrování. Nevýhoda: snadno se na záznam zapomene a pak se
jméno chová „nevysvětlitelně" — proto je /etc/hosts první místo, kam koukat, když se překlad jména
chová divně.
