🛠 Шпаргалка сетевых команд

Полный справочник команд, которые сетевой инженер использует каждый день. Каждая команда — отдельная карточка: что делает, когда применять, синтаксис и пример вывода. Можно открывать как чек-лист при работе или для подготовки к собеседованию.

Как пользоваться

Команды разбиты по 12 категориям. Если нужно «проверить, доходит ли пакет до сервера» — это раздел «Диагностика». Если «посмотреть таблицу маршрутизации» — раздел «Маршрутизация». Используй оглавление ниже для быстрой навигации.

📡Диагностика связности 🔌Интерфейсы и IP 🛣️Маршрутизация 🏷️ARP и соседи L2 🌐DNS 🔗Сокеты и порты 🧪Тесты подключения 🎯Захват пакетов Скорость / throughput 🛡️Файрвол (iptables / nftables) 🟦Cisco IOS show 🌍IPv6 — обязательный минимум 🏢VRF — изоляция таблиц 🛠Утилиты: backup, scan, OSINT 🔍Сценарии «не работает»

📡 1. Диагностика связности

Самое первое, что делает инженер при жалобе «не работает» — проверяет, что вообще доходит до удалённого хоста и за какое время.

ping <host> [-c N] [-i sec] [-s size] [-M do] L3 · ICMP
Что делает

Отправляет ICMP Echo Request на хост и ждёт Echo Reply. Показывает достижимость, RTT (время туда-обратно), долю потерь.

Когда применять
  • Первая проверка «жив ли удалённый хост». Базовый smoke test.
  • Измерение latency между точками (RTT в миллисекундах).
  • Поиск потерь пакетов: ping -c 100 host и смотришь % packet loss.
  • Проверка MTU пути: ping -M do -s 1472 host (DF=1, не разрешать фрагментацию).
  • Постоянный мониторинг во время работ: ping -i 0.2 host или ping без флагов в Linux.
Важно
  • ICMP часто блокируется файрволом → «не пингуется» ≠ «недоступен».
  • Высокий RTT при плотном трафике может означать bufferbloat, а не реальную медленную сеть.
  • Размер пакета по умолчанию ~64 байта (8 ICMP + 56 data). Может маскировать MTU-проблемы.
Пример
$ ping -c 4 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=14.2 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=14.0 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=14.1 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=117 time=14.3 ms --- 8.8.8.8 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 14.0/14.15/14.3/0.1 ms
traceroute <host> [-n] [-T] [-I] [-w sec] L3 · TTL
Что делает

Показывает путь пакета от тебя до удалённого хоста через все промежуточные маршрутизаторы (hops). Использует трюк с TTL: первый пакет с TTL=1, дальше +1.

Когда применять
  • «Высокий ping — где именно лагает» → видишь, какой хоп прибавляет задержку.
  • «Пакеты не доходят» → видишь, на каком хопе они теряются.
  • Проверка маршрутизации: «через какого провайдера трафик уходит наружу».
  • Подтверждение, что failover на резервный канал произошёл (другой первый хоп).
Флаги
  • -n — не резолвить имена (быстрее, ничего не зависает на DNS).
  • sudo traceroute -T — TCP-режим (если ICMP/UDP блокируется). Требует root: использует RAW-сокеты.
  • sudo traceroute -I — ICMP echo вместо UDP. Тоже RAW → sudo.
  • -p <port> — указать порт назначения (полезно с -T для специфичного порта).

⚠️ Дефолтный UDP-режим работает без root (использует unprivileged ports >33434). Но -T и -I требуют либо sudo, либо setcap cap_net_raw+ep $(which traceroute).

Пример
$ traceroute -n 1.1.1.1 1 192.168.1.1 1.2 ms 1.1 ms 1.0 ms 2 10.0.0.1 3.4 ms 3.2 ms 3.1 ms 3 * * * # этот хоп не отвечает (часто норма) 4 185.21.10.5 12.4 ms 12.1 ms 12.2 ms 5 1.1.1.1 13.8 ms 13.5 ms 13.6 ms
mtr <host> [-r] [-c N] [-n] L3 · комбо
Что делает

Гибрид ping + traceroute: непрерывно пингует каждый хоп на пути и показывает % потерь и RTT по каждому в реальном времени.

Когда применять
  • Незаменим для поиска интермиттентных проблем — обычный traceroute ловит «снимок», а mtr копит статистику.
  • «Где конкретно теряется 5% пакетов» — увидишь на каком хопе колонка Loss% резко растёт.
  • Снять отчёт для тикета: mtr -r -c 100 host → распечатать вывод за 100 циклов.
Важно

Потери на промежуточных хопах ≠ реальные потери. Маршрутизаторы могут rate-limit'ить ICMP TTL Exceeded для control plane. Реальный показатель — Loss% на последнем хопе.

Пример
$ mtr -r -c 50 -n 1.1.1.1 HOST: my-laptop Loss% Snt Last Avg Best Wrst StDev 1.|-- 192.168.1.1 0.0% 50 1.1 1.2 1.0 1.5 0.1 2.|-- 10.0.0.1 0.0% 50 3.2 3.3 3.0 3.8 0.2 3.|-- 185.21.10.5 12.0% 50 12.1 12.5 12.0 18.4 1.5 4.|-- 1.1.1.1 0.0% 50 13.5 13.7 13.4 14.2 0.2

↑ Хоп 3 теряет 12% — но последний 0%. Скорее всего, маршрутизатор хопа 3 rate-limit'ит ICMP. Реальной проблемы для трафика нет.

fping [-a] [-g RANGE] массовый ping
Что делает

Пингует много хостов параллельно. Сильно быстрее, чем ping в цикле.

Когда применять
  • Быстро узнать, какие IP в подсети живы: fping -a -g 192.168.1.0/24.
  • Инвентаризация: какие хосты в VLAN отвечают.
  • Регулярный health-check большого пула хостов в скрипте.
Пример
$ fping -a -g 192.168.1.0/24 2>/dev/null 192.168.1.1 192.168.1.10 192.168.1.42 192.168.1.100

🔌 2. Интерфейсы и IP

ip addr show [dev IF] linux
Что делает

Показывает все сетевые интерфейсы и их IP-адреса (IPv4 и IPv6). Современная замена ifconfig.

Когда применять
  • Узнать, какой у машины IP-адрес.
  • Проверить, что DHCP выдал адрес (или присвоен ли статический).
  • Увидеть VLAN-интерфейсы, bridge, bond, veth.
  • Показать состояние интерфейса: UP/DOWN.
Связанные команды
  • ip addr add 10.0.0.5/24 dev eth0 — добавить IP на интерфейс.
  • ip addr del 10.0.0.5/24 dev eth0 — удалить IP.
  • ip -4 addr / ip -6 addr — только IPv4/IPv6.
  • ip -br addr — компактный однострочный вывод.
Пример
$ ip -br addr lo UNKNOWN 127.0.0.1/8 ::1/128 eth0 UP 192.168.1.42/24 fe80::1234/64 wlan0 DOWN docker0 DOWN 172.17.0.1/16
ip link show / set dev IF up|down|mtu N L2
Что делает

Управление L2-параметрами интерфейса: состояние up/down, MTU, MAC-адрес, статистика.

Когда применять
  • «Поднять» / «опустить» интерфейс: ip link set eth0 up / down.
  • Изменить MTU: ip link set eth0 mtu 9000 (для jumbo frames).
  • Сменить MAC: ip link set eth0 address 02:01:02:03:04:05 (LAA).
  • Посмотреть счётчики RX/TX, errors, drops: ip -s link show eth0.
Пример
$ ip -s link show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 1245789012 856432 0 0 0 12 TX: bytes packets errors dropped carrier collsns 234567890 421789 0 0 0 0
ethtool [-i|-S|-m|-k] eth0 linux · NIC
Что делает

Глубокая инспекция сетевой карты: скорость, дуплекс, статус линка, фичи offloading'а, статистика NIC, информация о SFP-трансивере.

Когда применять
  • Узнать скорость и дуплекс линка: ethtool eth0.
  • Проверить, что link физически поднят: строка Link detected: yes.
  • Прочитать EEPROM трансивера (модель SFP, длина волны, температура): ethtool -m eth0.
  • Включить/выключить offloading: ethtool -K eth0 tso off gso off.
  • Драйвер и firmware NIC: ethtool -i eth0.
  • Расширенные счётчики ошибок (rx_crc_errors, rx_no_buffer): ethtool -S eth0.
Пример
$ ethtool eth0 Settings for eth0: Supported link modes: 100baseT/Full 1000baseT/Full Speed: 1000Mb/s Duplex: Full Auto-negotiation: on Link detected: yes

🛣️ 3. Маршрутизация

ip route show [table all] L3
Что делает

Показывает таблицу маршрутизации ядра. По ней ядро решает, куда отправить пакет.

Когда применять
  • «Куда уходит default gateway» — первая строка обычно default via X.X.X.X.
  • Понять, как пакет пойдёт до конкретной подсети (longest prefix match).
  • Дебажить multi-WAN: какие маршруты активны на каком интерфейсе.
  • Проверить policy-based routing: ip route show table all.
Связанные
  • ip route add 10.0.0.0/24 via 192.168.1.1 — добавить статический маршрут.
  • ip route del 10.0.0.0/24 — удалить маршрут.
  • ip route replace 10.0.0.0/24 via 192.168.1.254 — атомарно заменить (без drop пакетов).
  • ip route show table all — все таблицы маршрутизации, включая policy-based.

⚠️ ip route flush cache не работает для IPv4 с ядра 3.6+ (route cache был удалён). Для IPv6 в редких случаях ещё актуально.

Пример
$ ip route show default via 192.168.1.1 dev eth0 proto dhcp metric 100 10.10.0.0/24 via 192.168.1.254 dev eth0 172.17.0.0/16 dev docker0 scope link 192.168.1.0/24 dev eth0 scope link src 192.168.1.42
ip route get <destination-ip> L3 · lookup
Что делает

Показывает, как именно ядро отправит пакет на конкретный IP: через какой интерфейс, через какой шлюз, с каким source-адресом, по какой routing table.

Когда применять
  • «Multi-homed сервер, не понимаю, через какую сетевуху уйдёт трафик» → ip route get 8.8.8.8.
  • Дебаг policy-based routing — показывает, какая таблица сработала.
  • Узнать source IP для коннекта на конкретный destination.
Пример
$ ip route get 8.8.8.8 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.42 uid 1000

🏷️ 4. ARP и соседи L2

ip neigh show / flush all L2 · ARP/NDP
Что делает

Показывает ARP-таблицу (IPv4) и NDP-таблицу (IPv6). Соответствие IP↔MAC в локальной сети.

Когда применять
  • «Хост не пингуется в одной подсети» → проверь, есть ли запись в ARP, и нет ли там FAILED.
  • Сброс заглохшей записи: ip neigh flush all (после смены MAC у gateway).
  • Поиск дубликатов MAC — если один MAC на двух IP, это уже плохо.
Состояния
  • REACHABLE — недавно подтверждён трафиком.
  • STALE — давно не подтверждался, но запись валидна.
  • FAILED — попытка резолва не удалась (хост не отвечает).
  • INCOMPLETE — ARP-запрос в процессе.
Пример
$ ip neigh show 192.168.1.1 dev eth0 lladdr aa:bb:cc:11:22:33 REACHABLE 192.168.1.10 dev eth0 lladdr 00:11:22:33:44:55 STALE 192.168.1.99 dev eth0 FAILED
arping -I <iface> <target-ip> L2 проверка
Что делает

Отправляет ARP-запросы (не ICMP!) на target IP в локальной подсети. Работает на L2 — обходит файрволы, которые блокируют ICMP.

Когда применять
  • «Хост не пингуется, файрвол блокирует ICMP» — arping покажет, отвечает ли он на L2.
  • Проверка IP-конфликта (Duplicate Address Detection).
  • Узнать MAC соседа, не зная заранее.
  • Понять, реально ли хост находится в одной подсети с тобой.
Пример
$ arping -c 3 -I eth0 192.168.1.1 ARPING 192.168.1.1 from 192.168.1.42 eth0 Unicast reply from 192.168.1.1 [AA:BB:CC:11:22:33] 0.842ms Sent 3 probes (1 broadcast(s)) Received 3 response(s)

🌐 5. DNS — резолвинг имён

dig [@server] <name> [TYPE] [+short|+trace] L7 · DNS
Что делает

Главный инструмент сетевого инженера для работы с DNS. Гибкий, точный, показывает всё.

Когда применять
  • Узнать IP домена: dig example.com.
  • Проверить конкретный тип записи: dig example.com MX (или A, AAAA, CNAME, TXT, NS).
  • Спросить конкретный DNS-сервер: dig @8.8.8.8 example.com.
  • Только ответ без шума: dig +short example.com.
  • Полная цепочка от root: dig +trace example.com.
  • Проверить DNSSEC: dig +dnssec example.com.
Пример
$ dig @8.8.8.8 example.com A +noall +answer example.com. 86400 IN A 93.184.216.34 $ dig +short google.com MX 10 smtp.google.com.
host [-t TYPE] <name> [server] упрощённый dig
Что делает

Упрощённый аналог dig. Минимум синтаксиса, человекочитаемый вывод.

Когда применять
  • Быстро проверить резолвинг в скрипте.
  • Reverse DNS (IP → имя): host 1.1.1.1.
Пример
$ host example.com example.com has address 93.184.216.34 example.com has IPv6 address 2606:2800:220:1::248:1893 $ host 1.1.1.1 1.1.1.1.in-addr.arpa domain name pointer one.one.one.one.
resolvectl status / query / flush-caches systemd-resolved
Что делает

Управление и диагностика systemd-resolved — современным DNS-резолвером на большинстве дистрибутивов.

Когда применять
  • Посмотреть, какие DNS-серверы реально используются (включая per-link): resolvectl status.
  • Сбросить локальный DNS-кэш: resolvectl flush-caches.
  • Проверить, какой DNS использовался для конкретного запроса: resolvectl query example.com.
  • Дебаг split-DNS / VPN-resolver конфликтов.

🔗 6. Сокеты и порты — кто что слушает и куда коннектится

ss -tulnp | -tan state established L4 · TCP/UDP
Что делает

Показывает открытые сокеты: listening (слушающие) и established (активные соединения). Современная замена netstat, в разы быстрее.

Когда применять
  • «Какие порты сейчас слушаются на сервере»: ss -tulnp.
  • «Сколько активных TCP-соединений к порту 443»: ss -tan state established '( dport = :443 )' | wc -l.
  • «Кто открыл порт 8080»: ss -tlnp | grep 8080 — увидишь PID и имя процесса.
  • Дебаг TIME_WAIT-накопления: ss -tan state time-wait | wc -l.
  • Подробная статистика TCP (cwnd, ssthresh, RTT): ss -ti.
Флаги (запоминается как «туалет на ноге»)
  • -t — TCP.
  • -u — UDP.
  • -l — listening.
  • -n — numeric (не резолвить имена).
  • -p — показать процесс (нужны права root для чужих PID).
  • -a — все сокеты.
  • -s — суммарная статистика.
Пример
$ sudo ss -tulnp Netid State Local Address:Port Peer Address:Port Process tcp LISTEN 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234)) tcp LISTEN 127.0.0.1:5432 0.0.0.0:* users:(("postgres",pid=5678)) tcp LISTEN *:443 *:* users:(("nginx",pid=999)) udp UNCONN 0.0.0.0:53 0.0.0.0:* users:(("dnsmasq",pid=888))
lsof -i [:port] [-n] процессы · сокеты
Что делает

«List open files» — показывает всё, что процессы держат открытым, включая сетевые сокеты.

Когда применять
  • «Кто держит порт 80»: sudo lsof -i :80.
  • «Какие коннекты открыл этот процесс»: lsof -p <PID> -i.
  • Поиск утечки файловых дескрипторов.
Пример
$ sudo lsof -i :80 -n COMMAND PID USER FD TYPE NAME nginx 999 root 6u IPv4 TCP *:80 (LISTEN) nginx 999 root 7u IPv4 TCP 192.168.1.42:80->1.2.3.4:50432 (ESTABLISHED)

🧪 7. Тесты подключения к портам и сервисам

nc (netcat) -zv host port / -l -p port «швейцарский нож»
Что делает

Универсальный инструмент для работы с TCP/UDP: открыть соединение, послушать порт, передать файл, проверить файрвол. «Universal Swiss Army knife».

Когда применять
  • Быстрая проверка «открыт ли порт»: nc -zv 1.2.3.4 443. Самый частый use case.
  • Сканирование диапазона портов: nc -zv host 80-90.
  • Слушать порт (для теста файрвола): nc -lvnp 8080 на одной машине, nc target 8080 на другой.
  • Передача файлов: nc -l 1234 > out.bincat in.bin | nc host 1234.
  • Простой HTTP-запрос вручную: echo -e "GET / HTTP/1.1\r\nHost: x.com\r\n\r\n" | nc x.com 80.
Флаги
  • -z — zero data (только проверить, не передавать).
  • -v — verbose.
  • -u — UDP вместо TCP.
  • -l — listen mode.
  • -n — не резолвить.
  • -w sec — таймаут.
Пример
$ nc -zv -w 2 google.com 443 Connection to google.com (142.250.74.110) 443 port [tcp/https] succeeded! $ nc -zv -w 2 google.com 25 nc: connect to google.com port 25 (tcp) failed: Connection timed out
telnet host port legacy, но работает
Что делает

Открывает интерактивное TCP-соединение к произвольному порту. Можно вручную набирать запросы (HTTP, SMTP, SSH-banner).

Когда применять
  • Быстрая проверка порта, если nc не установлен.
  • Посмотреть banner SMTP/POP3/IMAP-сервера (для диагностики совместимости).
  • Послать HTTP-запрос вручную и увидеть raw-ответ.
Важно

Telnet как протокол — небезопасный, использовать только для отладки. SSH давно стандарт.

Пример
$ telnet smtp.google.com 25 Trying 142.250.74.110... Connected to smtp.google.com. 220 mx.google.com ESMTP - gsmtp QUIT
curl [-I|-v|--resolve|-x|-k] URL HTTP/HTTPS
Что делает

Гибкая утилита для HTTP/HTTPS/FTP/etc. Сетевой инженер использует её каждый день для диагностики веб-сервисов.

Когда применять
  • Только заголовки ответа: curl -I https://example.com.
  • Полный лог запроса/ответа: curl -v https://example.com.
  • Проверить конкретный backend по IP без DNS: curl --resolve example.com:443:1.2.3.4 https://example.com.
  • Игнорировать невалидный TLS: curl -k (для дебага self-signed).
  • Замер времени запроса: curl -w "%{time_namelookup} %{time_connect} %{time_starttransfer}\n" -o /dev/null -s URL.
  • POST с JSON: curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' URL.
Пример
$ curl -I https://google.com HTTP/2 301 location: https://www.google.com/ content-type: text/html; charset=UTF-8 server: gws
openssl s_client -connect host:443 -servername host TLS · debug
Что делает

Открывает TLS-соединение к серверу и показывает всё: версию TLS, выбранный cipher suite, цепочку сертификатов, ALPN-протокол.

Когда применять
  • Проверить, какой сертификат отдаёт сервер (особенно при SNI mismatch).
  • Узнать срок действия cert: openssl s_client -connect host:443 | openssl x509 -noout -dates.
  • Проверить, поддерживается ли TLS 1.3: openssl s_client -connect host:443 -tls1_3.
  • Дебаг handshake failure: видишь, на какой стадии падает.
Пример
$ echo | openssl s_client -connect google.com:443 -servername google.com 2>/dev/null | grep -E "subject|issuer|Verify" subject=/CN=*.google.com issuer=/C=US/O=Google Trust Services LLC/CN=GTS CA 1C3 Verify return code: 0 (ok)

🎯 8. Захват пакетов — tcpdump / tshark

tcpdump -i IF [-nn] [-e] [-w file.pcap] [filter] L1-L7 · BPF
Что делает

Захватывает пакеты на интерфейсе. Самый мощный инструмент диагностики: видишь точно, что реально идёт по проводу.

Когда применять
  • «Доходит ли пакет до сервера» — слушаешь на сервере и смотришь.
  • «Кто запрашивает / отвечает по протоколу X» — фильтруешь и видишь.
  • Дебаг TLS-handshake, ARP-резолвинга, BGP, OSPF, всего.
  • Запись pcap для последующего анализа в Wireshark.
Базовые флаги
  • -i IF — на каком интерфейсе слушать. -i any — на всех.
  • -nn — не резолвить ни имена, ни порты (быстрее).
  • -e — показать Ethernet-заголовок (MAC-адреса).
  • -c N — захватить N пакетов и выйти.
  • -w file.pcap — записать в файл для Wireshark.
  • -r file.pcap — прочитать из файла.
  • -v / -vv / -vvv — детальность.
  • -X — hex+ASCII payload.
Полезные BPF-фильтры
  • host 1.2.3.4 — трафик к/от хоста.
  • src 1.2.3.4 / dst 1.2.3.4 — только src/dst.
  • port 443 — конкретный порт.
  • tcp and port 443 — TCP на 443.
  • icmp — только ICMP.
  • arp — только ARP.
  • net 10.0.0.0/24 — трафик в подсеть.
  • not port 22 — всё, кроме SSH (полезно когда сам по SSH сидишь).
  • tcp[tcpflags] & (tcp-syn) != 0 — только пакеты с SYN.
Пример
$ sudo tcpdump -i eth0 -nn -c 5 'tcp port 443 and host 1.2.3.4' 14:23:01.123 IP 192.168.1.42.50432 > 1.2.3.4.443: Flags [S], seq 1234567890 14:23:01.135 IP 1.2.3.4.443 > 192.168.1.42.50432: Flags [S.], seq 987654321 14:23:01.135 IP 192.168.1.42.50432 > 1.2.3.4.443: Flags [.], ack 1 14:23:01.140 IP 192.168.1.42.50432 > 1.2.3.4.443: Flags [P.], length 517 (TLS ClientHello) 14:23:01.155 IP 1.2.3.4.443 > 192.168.1.42.50432: Flags [.], ack 518
tshark -i IF -Y "filter" -T fields -e field CLI Wireshark
Что делает

Wireshark в командной строке — тот же движок диссектора, что в GUI. Понимает протоколы прикладного уровня (HTTP, DNS, TLS, OSPF, BGP) — в отличие от tcpdump, который ограничен в L7-разборе.

Когда применять
  • Когда tcpdump уже не хватает, а GUI Wireshark на сервере не запустить.
  • Извлечь конкретные поля из pcap в CSV для скрипта.
  • Декодировать gRPC, HTTP/2, QUIC, MQTT.
Пример
$ tshark -i eth0 -Y "http.request" -T fields -e ip.src -e http.host -e http.request.uri 192.168.1.42 example.com /api/users 192.168.1.42 example.com /api/orders

⚡ 9. Замер скорости и throughput

iperf3 -s (server) / -c host [-t sec] [-u] [-P N] throughput
Что делает

Клиент-серверная утилита для замера реальной пропускной способности линка. На одной стороне запускаешь сервер (-s), на другой клиента (-c).

Когда применять
  • «Гигабитный линк — а скорость 200 Mbps. Где теряется» — iperf проверит чистую пропускную способность.
  • Сравнение разных путей (через VPN vs напрямую).
  • Тестирование TCP vs UDP throughput.
  • Стресс-тест нового оборудования при приёмке.
Флаги
  • -s — режим сервера.
  • -c host — режим клиента.
  • -t 60 — длительность теста (по умолчанию 10с).
  • -u — UDP вместо TCP.
  • -P 4 — параллельные потоки (полезно для high-BDP линков).
  • -R — реверс (сервер шлёт клиенту).
  • -b 100M — ограничить bandwidth (для UDP).
Пример
server$ iperf3 -s client$ iperf3 -c 10.0.0.1 -t 10 [ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 1.10 GBytes 944 Mbits/sec receiver
speedtest-cli [--server N] интернет-канал
Что делает

Замер скорости интернет-канала через speedtest.net (Ookla) из терминала. Не для внутренних замеров — только наружу.

Когда применять
  • «Провайдер обещает 100 Mbps — а реально сколько» с сервера или роутера.
  • Регулярный мониторинг канала в скрипте (по cron).

🛡️ 10. Файрвол — iptables / nftables

iptables -L -nv / -A CHAIN -p tcp --dport N -j ACTION legacy linux fw
Что делает

Управление netfilter — встроенным файрволом ядра Linux. На современных дистрибутивах постепенно заменяется nftables, но iptables ещё повсюду.

Когда применять
  • Посмотреть текущие правила: sudo iptables -L -nv.
  • Посмотреть NAT-таблицу (DNAT/SNAT, MASQUERADE): sudo iptables -t nat -L -nv.
  • Разрешить порт: sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT.
  • Заблокировать IP: sudo iptables -A INPUT -s 1.2.3.4 -j DROP.
  • Включить роутер-NAT: sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE.
  • Сохранить правила (зависит от дистрибутива):
  • Debian/Ubuntu (нужен пакет iptables-persistent): sudo iptables-save > /etc/iptables/rules.v4
  • RHEL/CentOS 7 (legacy): sudo service iptables save → пишет в /etc/sysconfig/iptables
  • Современные RHEL/Fedora: уже на nftables + firewalld — см. карточку nft ниже.
Цепочки и таблицы
  • Таблица filter (по умолчанию): INPUT (входящие на хост), OUTPUT (исходящие от хоста), FORWARD (транзитные).
  • Таблица nat: PREROUTING (DNAT), POSTROUTING (SNAT/MASQUERADE).
  • Таблица mangle: маркировка пакетов для PBR.
Пример
$ sudo iptables -L INPUT -nv --line-numbers num pkts bytes target prot opt in out source destination 1 145 9k ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 2 1234 100k ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 3 12 720 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 4 0 0 DROP all -- * * 1.2.3.4 0.0.0.0/0
nft list ruleset / add rule ip ... современный fw
Что делает

Современная замена iptables. Один синтаксис для IPv4+IPv6, лучшая производительность, атомарные обновления.

Когда применять
  • Новый проект — пиши сразу на nft. Не плоди legacy.
  • Посмотреть весь ruleset: sudo nft list ruleset.
  • Конфиг хранится в /etc/nftables.conf.

🟦 11. Cisco IOS — основные show-команды

show running-config [interface IF | section X] конфиг
Что делает

Показывает текущую активную конфигурацию устройства (в RAM). Команда №1 любого инженера.

Когда применять
  • «А что сейчас настроено на этой коробке» — всегда сначала это.
  • Целиком: show running-config.
  • По интерфейсу: show running-config interface Gi0/1.
  • По секции: show running-config | section bgp.
  • Фильтр: show run | include vlan.
Связанное
  • show startup-config — конфиг, который загрузится при reboot (в NVRAM).
  • copy running-config startup-config или write memory / wr — сохранить.
show interfaces [IF] [status | description | counters errors] L1-L2
Что делает

Подробная информация об интерфейсе: состояние, скорость, дуплекс, ошибки, счётчики, MTU.

Когда применять
  • «Линк поднят, всё нормально?» — целиком show interfaces Gi0/1.
  • Сводка по всем портам: show interfaces status.
  • Подписи к портам: show interfaces description.
  • Только ошибки: show interfaces counters errors.
  • Статистика SFP/трансивера: show interfaces Gi0/1 transceiver detail.
На что смотреть
  • line protocol is up — L2 живой.
  • input errors, CRC, runts, giants — проблемы L1.
  • output drops — переполнение очереди (нужен QoS).
show ip route [prefix | bgp | ospf | connected] L3 routing
Что делает

Показывает таблицу маршрутизации устройства. Главная команда после show running.

Когда применять
  • «Куда роутер шлёт пакеты на этот префикс»: show ip route 10.0.0.0/24.
  • Только BGP-маршруты: show ip route bgp.
  • Только OSPF: show ip route ospf.
  • Только подключённые: show ip route connected.
  • Default-маршрут: смотри строку Gateway of last resort is X.X.X.X to network 0.0.0.0 в шапке вывода show ip route. Это «куда уходит трафик, не подпадающий под более специфичные маршруты».

Запись S* 0.0.0.0/0 [1/0] via X.X.X.X со звёздочкой — это и есть candidate default route. * в выводе всегда означает «активный default».

Условные обозначения слева
  • C — connected (прямо подключённая сеть).
  • S — static (прописана вручную).
  • O — OSPF.
  • B — BGP.
  • D — EIGRP.
  • R — RIP.
  • * — candidate default route.
show vlan brief / id N L2 VLAN
Что делает

Показывает все VLAN на коммутаторе и какие порты к каким привязаны (access).

Когда применять
  • «В каком VLAN сейчас этот порт» — основа любого L2-troubleshooting.
  • Сводка: show vlan brief.
  • Один VLAN: show vlan id 10.
show mac address-table [interface IF | vlan N | dynamic] L2 CAM
Что делает

Показывает CAM-таблицу свитча: какие MAC видны на каких портах.

Когда применять
  • «На каком порту коробка с этим MAC» — show mac address-table | include aabb.ccdd.
  • «MAC flapping в логах» — увидишь, между какими портами скачет.
  • «Кто включён в порт Gi0/5» — show mac address-table interface Gi0/5.
show interfaces trunk L2 trunk
Что делает

Показывает все trunk-порты, их native VLAN и список разрешённых VLAN на trunk'е.

Когда применять
  • «VLAN 50 не проходит между свитчами» — проверь, разрешён ли он в allowed vlan.
  • Native VLAN mismatch warning — увидишь сразу.
show spanning-tree [vlan N | root | summary] STP
Что делает

Показывает топологию Spanning Tree: кто root bridge, какие порты forwarding/blocking, кто root для каждого VLAN.

Когда применять
  • «После подключения нового свитча всё легло» — проверь, не сменился ли root.
  • «Один из uplink'ов не работает» — может быть STP block.
  • Сводка: show spanning-tree summary.
  • Кто root: show spanning-tree root.
show cdp neighbors / show lldp neighbors [detail] L2 discovery
Что делает

Показывает соседей в L2-сегменте: имя устройства, модель, port ID, на каком твоём порту он висит. Базовый инструмент инвентаризации топологии.

CDP vs LLDP — в чём разница
  • CDP (Cisco Discovery Protocol) — проприетарный Cisco. Работает только между Cisco-устройствами (и теми, кто реализовал поддержку — некоторые VoIP-телефоны).
  • LLDP (Link Layer Discovery Protocol, IEEE 802.1AB) — открытый стандарт. Работает между любыми вендорами: Cisco, Juniper, MikroTik, HPE, Arista, Mellanox, Linux-серверами с lldpd.
  • В смешанной сети — всегда включай LLDP, иначе не увидишь не-cisco соседей.
Когда применять
  • «Куда воткнут этот свитч на самом деле»: show cdp neighbors detail покажет имя соседа, его IP, модель, версию IOS.
  • Multi-vendor среда: show lldp neighbors detail — единственный универсальный способ.
  • Документирование топологии без визита в стойку.
  • Поиск «лишних» подключений — кто-то подключил незарегистрированный свитч?
Включение LLDP на Cisco
switch(config)# lldp run # глобально включить switch(config)# interface Gi0/1 switch(config-if)# lldp transmit switch(config-if)# lldp receive
На Linux (узнать, что висит на порту)
$ sudo apt install lldpd $ sudo lldpcli show neighbors Interface: eth0, via: LLDP Chassis: ChassisID: mac aa:bb:cc:11:22:33 SysName: core-sw-01 SysDescr: Cisco IOS Software, C9300 Port: PortID: ifname GigabitEthernet1/0/24
show ip bgp / show ip ospf neighbor [summary | neighbors IP {routes|advertised-routes}] L3 protocols
Что делает

Состояние BGP/OSPF-соседей и обмена маршрутами. Для BGP должно быть Established, для OSPF — Full.

Базовое — состояние сессии
  • show ip bgp summary — все BGP-пиры в одной таблице, состояние, PfxRcd (сколько получено).
  • show ip ospf neighbor — все OSPF-соседи и их state.
  • show ip bgp neighbors 1.2.3.4 — полная статистика по конкретному соседу.
Углублённый BGP-troubleshooting (must know)

Главный вопрос при дебаге BGP — «что мы шлём соседу» vs «что он шлёт нам». Это две разные вещи и проверяются раздельно:

  • show ip bgp neighbors 1.2.3.4 advertised-routesчто мы анонсируем соседу. Если префикса нет — проверь route-map / prefix-list на исходе.
  • show ip bgp neighbors 1.2.3.4 routesчто мы приняли от соседа (после фильтров на входе).
  • show ip bgp neighbors 1.2.3.4 received-routes — что сосед нам прислал до фильтров (требует soft-reconfiguration inbound).
  • show ip bgp 10.0.0.0/24 — все известные пути к конкретному префиксу, помечен best path.
Типичные сценарии
  • «Сосед получает не тот префикс» → advertised-routes покажет, что мы шлём на самом деле.
  • «Префикс в BGP-таблице есть, но не в RIB» → проверь best-path selection и AD.
  • «BGP в Idle/Active не поднимается» → show ip bgp neighbors X, смотри Last reset и BGP state.
Пример
router# show ip bgp summary Neighbor V AS MsgRcvd MsgSent Up/Down State/PfxRcd 10.0.0.1 4 65001 12345 12340 2d05h Established 1421 10.0.0.2 4 65002 234 1230 00:15:32 Idle 0 router# show ip bgp neighbors 10.0.0.1 advertised-routes | include 10.10 *> 10.10.0.0/24 0.0.0.0 0 32768 i
show processes cpu / memory [sorted | history] железо
Что делает

Загрузка CPU и память устройства. На железных свитчах/роутерах высокий CPU == беда.

Когда применять
  • «Свитч тормозит» — show processes cpu sorted.
  • «Утечка памяти» — show processes memory sorted.
  • История за 60с/час: show processes cpu history.
show logging [| include keyword] debug
Что делает

Системный лог устройства. Сообщения уровня INFO, WARN, ERROR, CRITICAL.

Когда применять
  • «Интерфейс flapped в 14:32» — show logging | include eth0/1.
  • «Кто-то стал root в STP» — show logging | include STP.
  • OSPF/BGP события: show logging | include OSPF.

🌍 12. IPv6 — основные команды

IPv6 — уже не «когда-нибудь потом», а реальность mobile-операторов (T-Mobile, Verizon на IPv6-only), новых ДЦ и cloud-провайдеров. Базовый набор обязателен.

ping -6 / ping6 <ipv6> [-I IF] L3 · ICMPv6
Что делает

То же, что обычный ping, но через ICMPv6. На многих системах ping сам определяет версию по адресу, флаг -6 явно говорит «использовать IPv6».

Когда применять
  • Проверка IPv6-связности: ping -6 2606:4700:4700::1111 (Cloudflare DNS).
  • Проверка link-local адреса — обязательно с интерфейсом: ping -6 fe80::1%eth0 (синтаксис %интерфейс).
  • Дебаг dual-stack: «по IPv4 работает, по IPv6 — нет».
Пример
$ ping -6 -c 3 2001:4860:4860::8888 PING 2001:4860:4860::8888 56 data bytes 64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=117 time=14.1 ms
ip -6 route / ip -6 addr / ip -6 neigh show linux · IPv6
Что делает

То же, что для IPv4, но для IPv6. Просмотр маршрутов, адресов, таблицы NDP (заменяет ARP в IPv6).

Когда применять
  • ip -6 addr — какие IPv6-адреса у хоста (включая link-local fe80::/10, который всегда есть).
  • ip -6 route — маршруты IPv6, включая default ::/0.
  • ip -6 neigh — NDP-кэш (аналог ARP). Состояния: REACHABLE / STALE / FAILED.
  • «Получил ли я RA (Router Advertisement) от роутера» → ip -6 route | grep default покажет источник.
Пример
$ ip -6 route show 2001:db8:1::/64 dev eth0 proto kernel fe80::/64 dev eth0 proto kernel metric 256 default via fe80::1 dev eth0 proto ra metric 100 # default из RA $ ip -6 neigh fe80::1 dev eth0 lladdr aa:bb:cc:11:22:33 router REACHABLE 2001:db8:1::100 dev eth0 lladdr 02:11:22:33:44:55 STALE
show ipv6 route / show ipv6 neighbors Cisco · IPv6
Что делает

IPv6-аналоги show ip route и show ip arp. NDP-кэш Cisco называет «IPv6 neighbors».

Когда применять
  • show ipv6 route — таблица маршрутизации IPv6. Условные обозначения те же: C/S/O/B/D/L.
  • show ipv6 route summary — сколько маршрутов какого типа в таблице.
  • show ipv6 neighbors — кэш соседей (REACH / STALE / DELAY / PROBE).
  • show ipv6 interface brief — IPv6-адреса по интерфейсам.
  • show ipv6 ospf neighbor / show bgp ipv6 unicast summary — соседи OSPFv3 / BGP IPv6.
Включение IPv6 на интерфейсе Cisco
router(config)# ipv6 unicast-routing router(config)# interface Gi0/0 router(config-if)# ipv6 address 2001:db8:1::1/64 router(config-if)# ipv6 enable # link-local fe80::/64

🏢 13. VRF — изоляция маршрутизации (Enterprise / ISP)

VRF (Virtual Routing and Forwarding) — это несколько независимых таблиц маршрутизации на одном устройстве. На L3 это аналог VLAN на L2: разные клиенты (или сегменты) живут в разных VRF и не видят друг друга, даже если у них одинаковые IP. Основа MPLS L3VPN и multi-tenant провайдерских сетей.

show ip route vrf / ping vrf <vrf-name> [destination] Cisco · VRF
Что делает

Любые операции маршрутизации в Cisco — внутри конкретной VRF. Без указания vrf работаешь в глобальной таблице.

Когда применять
  • «В этой VRF есть нужный префикс»: show ip route vrf CUSTOMER-A 10.0.0.0/24.
  • Проверка связности изнутри VRF: ping vrf CUSTOMER-A 10.0.0.1.
  • Trace через конкретную VRF: traceroute vrf CUSTOMER-A 10.0.0.1.
  • Все интерфейсы в VRF: show ip interface brief | section CUSTOMER-A или show vrf detail.
  • BGP-таблица VPNv4: show ip bgp vpnv4 vrf CUSTOMER-A.
Базовая настройка VRF
router(config)# vrf definition CUSTOMER-A router(config-vrf)# rd 65001:100 # Route Distinguisher router(config-vrf)# address-family ipv4 router(config-vrf-af)# route-target export 65001:100 router(config-vrf-af)# route-target import 65001:100 router(config)# interface Gi0/1 router(config-if)# vrf forwarding CUSTOMER-A router(config-if)# ip address 10.0.0.1 255.255.255.0
Пример
router# show ip route vrf CUSTOMER-A Routing Table: CUSTOMER-A C 10.0.0.0/24 is directly connected, GigabitEthernet0/1 B 10.1.0.0/24 [200/0] via 10.255.255.5, 02:34:12 # via MPLS VPNv4
ip vrf exec <vrf-name> <команда> linux · VRF
Что делает

Запускает произвольную команду в контексте определённой Linux VRF. Без этого ping/traceroute/curl уходят через глобальную таблицу, минуя VRF.

Когда применять
  • «Пинг с роутера должен пойти через management VRF» → sudo ip vrf exec mgmt ping 8.8.8.8.
  • SSH из конкретной VRF: sudo ip vrf exec CUSTOMER-A ssh user@10.0.0.5.
  • curl через VRF: sudo ip vrf exec CUSTOMER-A curl https://internal.example.com.
  • Связанное: ip -d link show type vrf — список всех VRF на хосте.
  • ip route show vrf <name> — таблица маршрутизации конкретной VRF.
Пример
$ ip -d link show type vrf 5: mgmt: <NOARP,MASTER,UP> vrf table 10 6: customer-a: <NOARP,MASTER,UP> vrf table 20 $ sudo ip vrf exec mgmt ping -c 2 8.8.8.8 PING 8.8.8.8: 56 data bytes 64 bytes: time=12.4 ms

🛠 14. Утилиты сетевика — backup, сканирование, OSINT

copy running-config tftp: / scp: backup · Cisco
Что делает

Бэкап текущего конфига устройства на внешний сервер. Базовая гигиена: перед любым изменением — снимай бэкап.

Когда применять
  • Перед опасными изменениями (новые ACL, перестройка BGP, обновление IOS).
  • Регулярные ночные бэкапы по cron / automation (rancid, oxidized, NetBox).
  • «Что было до того, как кто-то накосячил» — diff текущего и вчерашнего бэкапа.
Варианты
  • copy running-config tftp: — на TFTP-сервер (legacy, без авторизации, без шифрования).
  • copy running-config scp: — по SSH/SCP (современный, шифрованный, с паролем/ключом).
  • copy running-config flash: — локальный snapshot во встроенную флешку.
  • copy startup-config running-config — откатить runtime к startup (опасно, без подтверждения rebooot).
Пример
router# copy running-config scp://admin@10.0.0.100/backup/router-01.cfg Address or name of remote host [10.0.0.100]? Destination filename [backup/router-01.cfg]? Password: **** !!!!!!!!!!!! 24582 bytes copied in 0.5 secs
Связанное
  • show archive — встроенный механизм версионирования Cisco.
  • archive config — снять snapshot во flash.
  • Junos: save config /tmp/file или save | display set | save для set-формата.
nmap [-sS|-sU] [-p PORTS] [-Pn] [-O] <target> scan · L4-L7
Что делает

Мощный сканер портов и сервисов. Когда одного nc -zv мало (например, нужно проверить целую подсеть или диапазон портов) — это nmap.

Когда применять
  • «Какие хосты живы в подсети + какие порты открыты»: nmap -sS 192.168.1.0/24.
  • Полное сканирование одного хоста: nmap -sS -p- -A 10.0.0.5 (все 65535 портов + детект ОС и сервисов).
  • Диагностика файрвола: nmap -sS -p 22,80,443,3306 host — открыт ли конкретный набор портов.
  • Когда хост не отвечает на ICMP: nmap -Pn host (не пытаться пинговать перед сканом).
  • UDP-сканирование (медленно, но иногда нужно): nmap -sU -p 53,123,161 host.
Важно
  • Большинство SYN-сканов (-sS) требуют root.
  • Скан чужих сетей без разрешения = нелегально во многих странах. Только своя инфра / тестовые лабы / с явного согласия.
Пример
$ sudo nmap -sS -p 22,80,443 192.168.1.0/24 Nmap scan report for 192.168.1.1 PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp closed https Nmap scan report for 192.168.1.42 PORT STATE SERVICE 22/tcp open ssh 80/tcp filtered http
curl ifconfig.me / curl ipinfo.io внешний IP · OSINT
Что делает

Узнать свой внешний (публичный) IP с хоста, который сидит за NAT. Просто, без чтения логов на роутере.

Когда применять
  • «Какой у меня снаружи IP» — особенно из туннеля/VPN.
  • «В какую страну меня видят» — curl ipinfo.io/json вернёт страну, ASN, провайдера.
  • Проверка работы NAT/Hairpin/VPN.
  • В скрипте: записать публичный IP в DNS для DDNS.
Альтернативы
  • curl ifconfig.me — простой IP, одна строка.
  • curl ifconfig.co — то же, IPv6-aware.
  • curl ipinfo.io — JSON с гео, ASN, hostname.
  • dig +short myip.opendns.com @resolver1.opendns.com — через DNS, без HTTP.
Пример
$ curl -s ifconfig.me 203.0.113.42 $ curl -s ipinfo.io { "ip": "203.0.113.42", "city": "Moscow", "region": "Moscow", "country": "RU", "org": "AS12345 Example ISP" }
whois <ip | domain | ASN> OSINT · регистратуры
Что делает

Информация из регистратур (ARIN / RIPE / APNIC / AFRINIC / LACNIC): кому принадлежит IP-блок, какой ASN, контакты, abuse-mail.

Когда применять
  • «С этого IP идут странные запросы — кому жаловаться» → whois 1.2.3.4 | grep -i abuse найдёт abuse-контакт провайдера.
  • Определить, какой провайдер: whois 8.8.8.8 → Google LLC.
  • Узнать ASN по IP: whois -h whois.cymru.com " -v 8.8.8.8" (Team Cymru lookup).
  • Информация по AS-номеру: whois AS15169.
  • Контакты владельца домена (часто скрыты privacy-протекцией): whois example.com.
Пример
$ whois 8.8.8.8 | grep -E "OrgName|NetRange|Country" NetRange: 8.8.8.0 - 8.8.8.255 OrgName: Google LLC Country: US $ whois -h whois.cymru.com " -v 1.2.3.4" AS | IP | BGP Prefix | CC | Registry | AS Name 13335 | 1.2.3.4 | 1.0.0.0/24 | US | ARIN | CLOUDFLARENET

🔍 15. Сценарии «не работает» — какие команды куда применять

Самое сложное в работе сетевика — не знать команды, а знать, какую команду применить первой. Вот частые сценарии и порядок действий.

«Не пингуется удалённый хост» базовый
  1. ping -c 4 8.8.8.8 — проверь, что хоть что-то наружу работает.
  2. ping -c 4 192.168.1.1 — проверь gateway.
  3. ip route — есть ли default route?
  4. ip neigh — резолвится ли ARP gateway?
  5. traceroute -n <цель> — на каком хопе теряется.
  6. На целевом хосте: sudo tcpdump -i any icmp — доходит ли запрос вообще?
  7. Если не доходит — проверь файрвол на пути: sudo iptables -L -nv.
«TCP-порт не отвечает (соединение виснет)» L4
  1. nc -zv -w 3 host port — открыт ли порт.
  2. Если refused — сервис не слушает или crashed.
  3. Если timed out — файрвол на пути или сервис висит.
  4. На сервере: ss -tlnp | grep :port — слушает ли вообще.
  5. На сервере: sudo tcpdump -i any port <port> — доходят ли SYN?
  6. Если SYN доходят, RST/ACK нет — проблема в приложении.
  7. Если SYN не доходят — что-то блокирует.
«DNS не резолвит имена» L7
  1. dig @8.8.8.8 example.com — резолвит ли публичный DNS?
  2. Если да, а локально нет — проблема в твоём resolver'е.
  3. cat /etc/resolv.conf или resolvectl status — какие DNS настроены.
  4. resolvectl flush-caches — сбросить кэш.
  5. nc -zv -w 3 <dns-server> 53 — доступен ли DNS-сервер вообще.
  6. Внутренние домены: проверь split-DNS, VPN-routing.
«TLS-handshake падает» L7
  1. nc -zv host 443 — TCP-коннект проходит?
  2. openssl s_client -connect host:443 -servername host — что говорит handshake.
  3. Если cert expired / hostname mismatch — увидишь в выводе.
  4. Если cipher suite mismatch — попробуй явно: openssl s_client -tls1_2 -cipher ECDHE-RSA-AES128-GCM-SHA256.
  5. Время на хосте: date — если часы убежали на год вперёд, cert будет невалиден.
«Скорость линка ниже, чем должна» L1-L4
  1. ethtool eth0 — Speed и Duplex что показывают? (полнодуплекс 1000 — норма).
  2. ethtool -S eth0 | grep -i error — растут ли ошибки?
  3. ip -s link show eth0 — RX/TX dropped, errors.
  4. iperf3 -c host -t 30 — чистая пропускная (TCP).
  5. Если throughput плохой, retransmit'ы много (ss -ti) → проблема пути.
  6. Если TX errors на NIC → плохой кабель / трансивер / порт.
«Хост в одной подсети не отвечает другому» L2
  1. Проверь, что маска у обеих сторон одинаковая (ip addr show).
  2. arping -I eth0 <ip> — есть ли L2-ответ?
  3. ip neigh — есть запись?
  4. На свитче: show mac address-table | include <mac> — на каком порту?
  5. show vlan brief — оба порта в одном VLAN?
  6. show interface trunk — если хосты на разных свитчах, VLAN в trunk allowed?
  7. На целевом хосте: iptables -L INPUT -nv — не блокирует ли файрвол?
Главные принципы troubleshooting