ЁЯФз рдзрдбрд╛ 12 тАФ network рдЪреЗ debugging: рддрдкрд╛рд╕рдгреАрдЪреА рд╢рд┐рдбреА
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 12 ┬╖ ЁЯОУ рд╢реЗрд╡рдЯрдЪрд╛
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ12 тАФ рд╕рдВрдкреВрд░реНрдг рдХреЛрд░реНрд╕. "рдмрдВрдж рдкрдбрд▓реЗ" рдЪреЗ рд░реВрдкрд╛рдВрддрд░ рдирд╛рд╡ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХрд╛рд░рдгрд╛рдд рдХрд░рдгрд╛рд░реА рд╢рд┐рдбреА, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд░реАрд╡рд░рдЪреА рд╕рд╛рдзрдирдкреЗрдЯреА.
- net/lab.sh тАФ рдПрдХрд╛рдЪ script рдордзрд▓реА рд╢рд┐рдбреА: dig тЖТ ping тЖТ traceroute тЖТ nc тЖТ openssl тЖТ curl тЖТ рдХреЛрдг рдРрдХрдд рдЖрд╣реЗ
- net/demo.py тАФ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЧ рдореНрд╣рдгрдЬреЗ Python рдордзрд▓реА рдПрдХ рдкрд╛рдпрд░реА
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдкрддреНрд░ рдкреЛрд╣реЛрдЪрдд рдирд╛рд╣реА рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдЗрдорд╛рд░рддреАрд╡рд░ рдУрд░рдбрдд рдирд╛рд╣реА. рддреБрдореНрд╣реА рдПрдХ рд╢рд┐рдбреА рдЪрдврддрд╛: рдирд╛рд╡ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЖрд╣реЗ рдХрд╛? рдорд▓рд╛ рдЗрдорд╛рд░рддреАрдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрддрд╛ рддрд░реА рдпреЗрддреЗ рдХрд╛? рдХреЛрдгрддрд╛ corridor рдЪреБрдХрддреЛ? рдЦреЛрд▓реА рдЙрдШрдбреА рдЖрд╣реЗ рдХрд╛? рд╕реАрд▓ рд╡реИрдз рдЖрд╣реЗ рдХрд╛? рдкрддреНрд░ рд╕реНрд╡рддрдГ рдиреАрдЯ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗ рдХрд╛? рддреНрдпрд╛рдирдВрддрд░рдЪ: рдХрд╛рд░рдХреБрдирд╛рдиреЗ log рдордзреНрдпреЗ рдХрд╛рдп рд▓рд┐рд╣рд┐рд▓реЗ? рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд░реАрд▓рд╛ рдПрдХ tool рдЕрд╕рддреЗ, рдЖрдгрд┐ рдЬреА рдкрд╣рд┐рд▓реА рдкрд╛рдпрд░реА fail рд╣реЛрддреЗ рддреАрдЪ рдХрд╛рд░рдг рд╕рд╛рдВрдЧрддреЗ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
A["1 DNS<br/>dig +short"] --> B["2 reach<br/>ping"] --> C["3 route<br/>traceroute"] --> D["4 port<br/>nc -zv"] --> E["5 TLS<br/>openssl s_client"] --> F["6 HTTP<br/>curl -v"] --> G["7 logs<br/>the app"]
тЭУ рдХрд╛рдп
| рдкрд╛рдпрд░реА | рдкреНрд░рд╢реНрди | Tool | рдХрд╛рд░рдг рд╕рд╛рдВрдЧрдгрд╛рд░реА error |
|---|---|---|---|
| 1 | DNS рдЖрд╣реЗ рдХрд╛? | dig +short, nslookup |
NXDOMAIN, рдЬреБрдирд╛ рдкрддреНрддрд╛ |
| 2 | рдорд▓рд╛ рдкреЛрд╣реЛрдЪрддрд╛ рдпреЗрддреЗ рдХрд╛? | ping, mtr |
100% loss (рдХрд┐рдВрд╡рд╛ ping рдЕрдбрд╡рд▓реЗрд▓рд╛ тАФ рддрд░реАрд╣реА рдкрд╛рдпрд░реА 4 рддрдкрд╛рд╕рд╛) |
| 3 | рдХреЛрдгрддрд╛ corridor? | traceroute, tracepath |
hops рдПрдХрд╛ router рд╡рд░ рдерд╛рдВрдмрддрд╛рдд |
| 4 | рдЦреЛрд▓реА рдЙрдШрдбреА рдЖрд╣реЗ рдХрд╛? | nc -zv, ss -ltnp |
refused (рд░рд┐рдХрд╛рдореА) рд╡рд┐рд░реБрджреНрдз timed out (рдлрд╛рдЯрдХ) |
| 5 | рд╕реАрд▓ рд╡реИрдз рдЖрд╣реЗ рдХрд╛? | openssl s_client, curl -v |
expired, рдЪреБрдХреАрдЪреЗ рдирд╛рд╡, рдЕрдиреЛрд│рдЦреА CA |
| 6 | рдкрддреНрд░ рдмрд░реЛрдмрд░ рдЖрд╣реЗ рдХрд╛? | curl -v, tcpdump |
4xx рддреБрдордЪреА рдЪрд┐рдареНрдареА, 5xx рддреНрдпрд╛рдВрдЪреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп, рдЕрдбрдХрдгреЗ = length рдирд╛рд╣реА |
| 7 | рдЖрдд рдХрд╛рдп рдШрдбрд▓реЗ? | app рдЪреЗ logs, request id | рдмрд╛рдХреА рд╕рдЧрд│реЗ |
- Latency рд╡рд┐рд░реБрджреНрдз bandwidth:
pinglatency рдореЛрдЬрддреЛ (ms, рдЕрдВрддрд░, hops); download bandwidth рдореЛрдЬрддреЛ (Mbit/s). рджреВрд░рдЪреА рд╣рд│реВ site рдореНрд╣рдгрдЬреЗ latency; рд╣рд│реВ рдореЛрдареА file рдореНрд╣рдгрдЬреЗ bandwidth. - tcpdump / Wireshark: рджреБрд╕рд░реЗ рдХрд╛рд╣реАрдЪ рд╕реНрдкрд╖реНрдЯ рдХрд░рдд рдирд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рд▓рдЦреЛрдЯреЗ рд╕реНрд╡рддрдГрдЪ рд╡рд╛рдЪрд╛.
ЁЯдФ рдХрд╛
рдХреНрд░рдо рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдЖрд╣реЗ: DNS рдЪреА рдЪреВрдХ рдкреБрдврдЪреА рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд░реА fail рдХрд░реЗрд▓ рдЖрдгрд┐ TLS debugging рдордзреНрдпреЗ рддрд╛рд╕рднрд░ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡реЗрд▓. рд▓рдХреНрд╖рдгрд╛рдкрд╛рд╕реВрди рдХрд╛рд░рдгрд╛рдкрд░реНрдпрдВрддрдЪрд╛ рд╕рд░реНрд╡рд╛рдд рдЬрд▓рдж рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рд╣реА рд╢рд┐рдбреА, рдЖрдгрд┐ рддреА laptop, VM рдЖрдгрд┐ pod рд╡рд░ рд╕рд╛рд░рдЦреАрдЪ рдЖрд╣реЗ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
net/lab.sh HOST standard tools рдиреЗ рдкрд╛рдпрд▒реНрдпрд╛ 1тАУ6 рдЪрд╛рд▓рд╡рддреЛ рдЖрдгрд┐ рд╢реЗрд╡рдЯреА triage рдЪрд╛ рдХреНрд░рдо
рдЫрд╛рдкрддреЛ; рдПрдЦрд╛рджреЗ tool рдирд╕реЗрд▓ рддрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд░реА рдкрд░реНрдпрд╛рдпреА рдорд╛рд░реНрдЧ рд╡рд╛рдкрд░рддреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
bash net/lab.sh example.com
bash net/lab.sh nonexistent.example # rung 1 fails: NXDOMAIN тАФ stop there
bash net/lab.sh 203.0.113.1 # a documentation address: rung 2 fails тАФ unreachable
bash net/lab.sh expired.badssl.com # rungs 1тАУ4 pass, rung 5 fails тАФ the seal
sudo tcpdump -ni any 'port 53' -c 4 & dig +short example.com # optional: the directory question on the wire
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
example.com рд╡рд┐рд░реБрджреНрдз рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд░реА pass рд╣реЛрддреЗ рдЖрдгрд┐ curl HTTP/2 200 рдЫрд╛рдкрддреЛ.
рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдШрдбрд▓реЗрд▓реНрдпрд╛ host рд╡рд┐рд░реБрджреНрдз рдиреЗрдордХреА рдПрдХрдЪ рдкрд╛рдпрд░реА рдЖрдзреА fail рд╣реЛрддреЗ, рдЖрдгрд┐ рддрд┐рдЪрд╛ рд╕рдВрджреЗрд╢
рдХрд╛рд░рдг рд╕рд╛рдВрдЧрддреЛ: NXDOMAIN, unreachable, certificate expired.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рдХреЛрдгрддреЗрд╣реА "рдмрдВрдж рдкрдбрд▓реЗ" рдШреЗрдКрди, рджреЛрди рдорд┐рдирд┐рдЯрд╛рдВрдЪреНрдпрд╛ рдЖрдд, рд╕рд╛рдд рдкреИрдХреА рдХреЛрдгрддреА рдЧреЛрд╖реНрдЯ рдЪреБрдХрд▓реА рдЖрд╣реЗ рддреЗ рддреБрдореНрд╣реА рд╕рд╛рдВрдЧреВ рд╢рдХрддрд╛ тАФ рддреЗ рд╕рд┐рджреНрдз рдХрд░рдгрд╛рд▒реНрдпрд╛ command рд╕рд╣.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рдкрд╛рдпрд░реА 6 (
curl -v) рдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░рдгреЗ рдЖрдгрд┐ TLS error рд▓рд╛ app рдЪрд╛ bug рд╕рдордЬрдгреЗ. - рдЕрдбрд╡рд▓реЗрд▓реНрдпрд╛
pingрд▓рд╛ "unreachable" рд╕рдордЬрдгреЗ; рдЕрдиреЗрдХ hosts ICMP рдЯрд╛рдХреВрди рджреЗрддрд╛рдд тАФ рдкрд╛рдпрд░реА 4 рд╡рд░ рдЬрд╛. - рд╢рд┐рдбреА рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЖрдзреАрдЪ рдЧреЛрд╖реНрдЯреА restart рдХрд░рдгреЗ. рддреБрдореНрд╣реА рдкреБрд░рд╛рд╡рд╛ рдЧрдорд╛рд╡рддрд╛.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рд╣реАрдЪ рд╢рд┐рдбреА рдореНрд╣рдгрдЬреЗ runbook. рддреБрдордЪреА hostnames рднрд░реВрди рддреА on-call doc рдордзреНрдпреЗ рдареЗрд╡рд╛; рдкрд╣рд┐рд▓реНрдпрд╛ responder рд▓рд╛ рдкрд╣рд╛рдЯреЗ 3 рд╡рд╛рдЬрддрд╛ рддреА рдЖрдард╡рд╛рд╡реА рд▓рд╛рдЧреВ рдирдпреЗ.
ЁЯПЖ Capstone
рддреБрдореНрд╣реА рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдПрдХрд╛ service рд╕рд╛рдареА рдПрдХрд╛ рдкрд╛рдирд╛рдЪрд╛ runbook рд▓рд┐рд╣рд╛: рддрд┐рдЪреЗ рдирд╛рд╡, рдкрддреНрддрд╛,
port, certificate expiry, рд╕рдореЛрд░рдЪрд╛ load balancer, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдиреЗрдордХреНрдпрд╛ command
рд╕рд╣ рд╕рд╛рдд рдкрд╛рдпрд▒реНрдпрд╛. рдордЧ рдореБрджреНрджрд╛рдо рдПрдХ рдкрд╛рдпрд░реА рдореЛрдбрд╛ (рдЪреБрдХреАрдЪреА /etc/hosts рдиреЛрдВрдж, рдмрдВрдж port)
рдЖрдгрд┐ runbook рддреА рд╢реЛрдзрддреЛ рд╣реЗ рд╕рд┐рджреНрдз рдХрд░рд╛.
ЁЯОУ рдХреЛрд░реНрд╕ рдкреВрд░реНрдг рдЭрд╛рд▓рд╛
рдЕрднреНрдпрд╛рд╕ рдпреЛрдЬрдирд╛ рдмрд╛рд░рд╛ рдзрдбреНрдпрд╛рдВрд╡рд░ рдЦреВрдг рдХрд░рддреЗ; quiz рддреЗ рддрдкрд╛рд╕рддреЗ; AWS рд╢рд╛рд│рд╛ рд╣реА рдЗрдорд╛рд░рдд рддрд╛рд╕рд╛рдЪреНрдпрд╛ рднрд╛рдбреНрдпрд╛рдиреЗ рджреЗрддреЗ, рдЖрдгрд┐ School portal рдордзреНрдпреЗ certificate рдЖрд╣реЗ.