# Jak hledat problém

Většina lidí při problému se sítí restartuje router. Občas to pomůže, což je nejhorší možný výsledek — naučí tě to, že restartování je řešení, a příště strávíš hodinu restartováním něčeho, co se restartem spravit nedá.

Tahle stránka je o systematickém postupu. Trvá o dvě minuty déle a řekne ti, co je skutečně špatně.

## Princip: odspodu nahoru

[Vrstvy](Vrstvy-a-zapouzdreni) fungují na sobě. Když nefunguje spodní, nemá smysl řešit horní. Postupuj tedy odspodu a na první vrstvě, která selže, se zastav — tam je problém.

```mermaid
flowchart TD
    A[Svítí link na portu?] -->|ne| A1[Kabel, port, napájení]
    A -->|ano| B[Mám IP adresu?]
    B -->|ne| B1[DHCP, VLANa, ARP]
    B -->|ano| C[Pingnu bránu?]
    C -->|ne| C1[Špatná maska, VLANa, izolace klientů]
    C -->|ano| D[Pingnu 8.8.8.8?]
    D -->|ne| D1[Směrování, NAT, poskytovatel]
    D -->|ano| E[Přeloží se jméno?]
    E -->|ne| E1[DNS]
    E -->|ano| F[Otevře se web?]
    F -->|ne| F1[Firewall, MTU, aplikace]
    F -->|ano| G[Funguje, jen pomalu?]
    G --> G1[Měř propustnost a ztrátovost]
```

Každý krok v tom schématu má níž vlastní sekci.

## 1. Svítí link?

Nejzákladnější kontrola, kterou skoro nikdo neudělá. Dioda na portu switche a na síťovce.

Když nesvítí, je problém fyzický: kabel, konektor, port, napájení. Vyzkoušej jiný kabel a jiný port, ať víš, který z nich to je.

Když svítí, ale na špatné rychlosti (100 Mb místo gigabitu), je to skoro vždycky kabel — poškozený, nebo špatně zapíchnutý v keystonu. Zkontroluj:

```
ethtool eth0        # Linux, ukáže dojednanou rychlost
```

## 2. Mám adresu?

```
ip addr             # Linux
ipconfig /all       # Windows
ifconfig            # macOS
```

Co uvidíš a co to znamená:

| Adresa | Diagnóza |
|---|---|
| `192.168.x.x` nebo podobná | v pořádku, jdi dál |
| `169.254.x.x` | DHCP neodpovědělo, adresu si přidělil sám |
| žádná adresa | vrstva 2 — kabel, VLANa, nebo vypnuté rozhraní |

Adresa `169.254.x.x` je velmi konkrétní příznak. Znamená, že vrstva 2 funguje (jsi v síti), ale [DHCP server](DHCP-a-DNS) se neozval. Buď je vypnutý, nebo jsi ve špatné [VLANě](VLANy).

Zkontroluj taky masku a bránu. Špatná maska je záludná, protože část komunikace funguje a část ne.

## 3. Pingnu bránu?

```
ping 192.168.1.1
```

Když neodpovídá, ale máš adresu, podívej se na ARP tabulku:

```
ip neigh
```

Prázdný nebo `INCOMPLETE` záznam pro bránu znamená problém na vrstvě 2 — jsi v jiné VLANě, než si myslíš, nebo je zapnutá izolace klientů. Viz [MAC a ARP](MAC-ARP-a-prepinani).

Když je záznam kompletní a přesto neodpovídá, brána tě buď blokuje [firewallem](Firewall-a-zony), nebo má vypnuté odpovídání na ping.

## 4. Pingnu veřejnou adresu?

```
ping 8.8.8.8
ping -6 2001:4860:4860::8888
```

Když bránu pingneš a tohle ne, problém je ve [směrování](Smerovani) nebo u poskytovatele. Zkontroluj výchozí trasu:

```
ip route
```

a pak zjisti, kde se to láme:

```
mtr 8.8.8.8
```

Když poslední odpovídající uzel je tvůj router, problém je mezi tebou a poskytovatelem. Když je to někde dál, problém je u nich a ty s tím nic neuděláš — ale máš důkaz pro reklamaci.

## 5. Přeloží se jméno?

```
ping seznam.cz
dig seznam.cz
```

Klasický příznak: `ping 8.8.8.8` funguje, `ping seznam.cz` ne. To je DNS a nic jiného.

Rozliš, jestli je rozbitý tvůj resolver, nebo celý svět:

```
dig seznam.cz               # tvůj resolver
dig @8.8.8.8 seznam.cz      # cizí resolver
```

Když druhý funguje a první ne, je problém u tebe. Viz [DHCP a DNS](DHCP-a-DNS).

## 6. Otevře se web?

Když se všechno výše povedlo a přesto nejde konkrétní služba, zúžil jsi to na vrstvu 4 nebo 7.

```
nc -zv seznam.cz 443        # dá se navázat spojení?
curl -v https://seznam.cz   # co odpoví server?
```

Když `nc` neprojde, blokuje to [firewall](Firewall-a-zony) na některé straně. Když projde a `curl` selže, problém je v aplikaci nebo v certifikátech.

### Zvláštní případ: MTU

Příznak je typický a stojí za to ho znát. Malé věci fungují, velké se zaseknou v půlce. Web se načte, ale obrázky ne. SSH se připojí, ale `ls` velkého adresáře zamrzne.

Otestuj to pingem s postupně větší velikostí a zakázanou fragmentací:

```
ping -M do -s 1472 8.8.8.8      # Linux, 1472 + 28 = 1500
ping -f -l 1472 8.8.8.8         # Windows
```

Když projde 1472 a neprojde 1473, máš MTU 1500 a je to v pořádku. Když neprojde ani 1472, hledej nižší hranici — typicky 1492 u PPPoE nebo méně u [VPN](WireGuard).

## 7. Funguje, ale pomalu

Nejdřív změř, co vlastně máš. Ne přes speedtest v prohlížeči, ale mezi dvěma body ve své síti:

```
iperf3 -s                   # na jednom stroji
iperf3 -c 192.168.1.10      # na druhém
```

Tím oddělíš problém v domácí síti od problému s připojením ven.

Pak zjisti, jestli jde o propustnost, nebo o ztrátovost:

```
mtr -c 500 -r 8.8.8.8
```

Ztrátovost na posledním uzlu je skutečný problém. Ztrátovost na mezilehlém uzlu, která se dál neprojevuje, je normální — routery odsouvají odpovídání na ping jako nejnižší prioritu a nic to neznamená.

## Zlatá pravidla

**Měň jednu věc naráz.** Když změníš tři a začne to fungovat, nevíš nic.

**Piš si, co jsi zkusil.** Po třiceti minutách si nebudeš pamatovat, jestli jsi ten kabel už vyměnil.

**Ověřuj předpoklady.** „Ten port je určitě ve správné VLANě" je tvrzení, ne fakt. Podívej se.

**Zjisti, kdy to naposledy fungovalo, a co se mezi tím změnilo.** V devíti případech z deseti je odpověď v téhle otázce.

**Zúži problém na jedno zařízení nebo na všechna.** Když nefunguje jen jeden notebook, hledej na notebooku. Když nefunguje nic, hledej v infrastruktuře. Tohle rozlišení ušetří spoustu času a udělá se za deset vteřin.

Konkrétní nástroje a jak číst jejich výstup jsou v [nástrojích](Nastroje).
