Linux: сеть, интерфейсы, DNS и HTTP

Диагностика сети от интерфейсов до HTTP-запросов, DNS, портов и правил файрвола

Интерфейсы и адреса (ip)

КомандаВариантЧто делает
ip aip aВсе интерфейсы и адреса.
ip -br aip -br aКратко: одна строка на интерфейс.
ip a showip a show dev eth0Один интерфейс.
ip linkip link showСостояние интерфейсов, MAC и MTU.
ip link set up/downip link set eth0 downВыключить или включить интерфейс (до перезагрузки).
ip link set mtuip link set eth0 mtu 1400Изменить MTU (полезно за VPN или туннелем).
ip addr addip addr add 10.0.0.5/24 dev eth0Временно добавить адрес (до перезагрузки).
ip addr delip addr del 10.0.0.5/24 dev eth0Удалить адрес.
ip routeip route showТаблица маршрутов.
ip route getip route get 8.8.8.8Через какой интерфейс и шлюз уйдёт пакет.
ip route addip route add 10.20.0.0/16 via 10.0.0.1Добавить маршрут (временно).
ip route add defaultip route add default via 10.0.0.1 dev eth0Маршрут по умолчанию.
ip route delip route del 10.20.0.0/16Удалить маршрут.
ip neighip neigh showARP-таблица: соседи в локальной сети и их MAC.
ip -s linkip -s link show eth0Счётчики ошибок и пакетов на интерфейсе.
hostname -Ihostname -IВсе IP-адреса хоста.
hostnamehostnamectl set-hostname web01Сменить имя хоста постоянно.

Сокеты и порты (ss, lsof)

КомандаВариантЧто делает
ss -tulpnss -tulpnСлушающие TCP и UDP порты с процессами.
ss -tss -t state establishedУстановленные TCP-соединения.
ss -tnss -tn dst 10.0.0.9Соединения к конкретному адресу.
ss sportss -tn sport = :443Фильтр по порту источника.
ss dportss -tn dport = :5432Соединения к порту назначения.
ss -sss -sСводка по сокетам.
ss -oss -tno state establishedТаймеры соединения.
netstat -tulpnnetstat -tulpnТо же, что ss, из старого пакета net-tools.
lsof -ilsof -i :8080Кто держит порт.
lsof -i TCPlsof -iTCP -sTCP:LISTENВсе слушающие TCP-сокеты.
lsof -ulsof -u ivan -iСетевые соединения пользователя.

Проверка связи

КомандаВариантЧто делает
pingping -c 4 8.8.8.8Четыре пакета и выход.
ping -iping -i 0.2 -c 20 gwИнтервал 0.2 с (нужны права root для интервала меньше 0.2).
ping -sping -M do -s 1372 -c 3 hostПроверить MTU: не фрагментировать, размер полезной нагрузки.
ping -Wping -W 2 -c 1 hostТаймаут ожидания ответа 2 секунды.
traceroutetraceroute -n example.comМаршрут без DNS-имён (быстрее).
tracepathtracepath example.comМаршрут и определение MTU без root.
mtrmtr -rwbc 10 example.comНепрерывная трассировка с потерями и задержками (отчёт).
nc -zvnc -zv db.local 5432Проверить, открыт ли TCP-порт (без отправки данных).
nc -zvunc -zvu dns.local 53Проверка UDP (менее надёжна).
nc -lnc -l 9000Слушать порт 9000 (тест входящих соединений).
timeout + bashtimeout 3 bash -c '</dev/tcp/host/443' && echo openПроверка порта без nc, встроенными средствами bash.
tcpdumpsudo tcpdump -i any -nn port 80Перехват трафика по порту, без DNS (-nn).
tcpdump -wsudo tcpdump -i eth0 -w cap.pcap host 10.0.0.9Записать трафик в файл для Wireshark.
tcpdump -rtcpdump -nr cap.pcapПрочитать записанный файл.

DNS

КомандаВариантЧто делает
digdig example.com AЗапись A с подробностями.
dig +shortdig +short example.comТолько ответ.
dig MXdig +short MX example.comПочтовые серверы домена.
dig TXTdig +short TXT example.comTXT-записи (SPF, DKIM, верификации).
dig NSdig +short NS example.comСерверы имён домена.
dig @dig @8.8.8.8 example.comЗапрос к конкретному DNS-серверу.
dig -xdig -x 8.8.8.8 +shortОбратный запрос: PTR по IP.
dig +tracedig +trace example.comПуть от корневых серверов до ответа.
dig +noall +answerdig +noall +answer example.comВывод только секции ответа.
hosthost example.comПростой запрос имени.
nslookupnslookup example.com 8.8.8.8Запрос через указанный сервер (интерактивный режим тоже есть).
resolvectlresolvectl query example.comЧерез systemd-resolved, с учётом локальных настроек.
resolvectl flushresolvectl flush-cachesСбросить кеш DNS.
getent hostsgetent hosts example.comИмя так, как его видит система (учитывает /etc/hosts и NSS).

HTTP: curl и wget

КомандаВариантЧто делает
curlcurl https://example.comПолучить тело ответа.
curl -Icurl -I https://example.comТолько заголовки (HEAD).
curl -icurl -i https://example.comЗаголовки и тело вместе.
curl -s -o /dev/null -wcurl -s -o /dev/null -w "%{http_code} %{time_total}\n" URLТолько код ответа и время (для мониторинга).
curl -Lcurl -L http://example.comСледовать редиректам.
curl -vcurl -v https://example.comПодробный вывод, включая TLS-рукопожатие.
curl -ocurl -o page.html URLСохранить в файл с заданным именем.
curl -Ocurl -O URLСохранить с именем из URL.
curl -C -curl -C - -O URLПродолжить прерванную загрузку.
curl -X POSTcurl -X POST -H "Content-Type: application/json" -d '{"a":1}' URLОтправить JSON.
curl -Fcurl -F "file=@report.pdf" URLОтправить файл как multipart-форму.
curl -Hcurl -H "Authorization: Bearer $TOKEN" URLДобавить заголовок (токен, Accept и др.).
curl -ucurl -u ivan:pass URLБазовая аутентификация (пароль лучше из переменной или ~/.netrc).
curl --resolvecurl --resolve site.com:443:10.0.0.5 https://site.com/Подменить DNS для проверки конкретного сервера.
curl -xcurl -x http://proxy:3128 URLЧерез HTTP-прокси.
curl --max-timecurl --max-time 5 URLТаймаут всей операции.
curl -kcurl -k https://self-signed.localНе проверять сертификат. Только для тестов, не для продакшена.
wget -Owget -O file.tgz URLСохранить в файл.
wget -cwget -c URLПродолжить загрузку.
wget -qwget -qO- URLТихий режим и вывод в stdout.
wget -r -npwget -r -np -l 2 URLРекурсивно, не подниматься выше, глубина 2 (осторожно с нагрузкой).

Файрвол

КомандаВариантЧто делает
ufw statussudo ufw status verboseСостояние и правила (Ubuntu и Debian).
ufw allowsudo ufw allow 22/tcpРазрешить порт.
ufw allow fromsudo ufw allow from 10.0.0.0/24 to any port 5432Разрешить порт только из подсети.
ufw denysudo ufw deny 3306Запретить порт.
ufw deletesudo ufw delete allow 8080Удалить правило.
ufw enablesudo ufw enableВключить файрвол (сначала разрешите SSH, иначе отрежете себя).
firewall-cmdsudo firewall-cmd --list-allFirewalld в RHEL-семействе.
firewall-cmd --addsudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reloadОткрыть порт постоянно.
iptables -Lsudo iptables -L -n -v --line-numbersПравила iptables с номерами и счётчиками.
nft listsudo nft list rulesetВсе правила nftables.

Настройка сети: nmcli и resolv

КомандаВариантЧто делает
nmcli devnmcli dev statusИнтерфейсы и их состояние в NetworkManager.
nmcli con shownmcli con showСохранённые подключения.
nmcli con upnmcli con up "Wired connection 1"Поднять подключение.
nmcli con modnmcli con mod eth0 ipv4.addresses 10.0.0.5/24 ipv4.gateway 10.0.0.1 ipv4.method manualПостоянно задать статический адрес.
nmcli con mod dnsnmcli con mod eth0 ipv4.dns "1.1.1.1 8.8.8.8"Задать DNS-серверы.
nmcli con reloadnmcli con reload && nmcli con up eth0Применить изменения.
cat /etc/resolv.confcat /etc/resolv.confКакой DNS используется (на systemd-resolved это заглушка).

Копирование по сети

КомандаВариантЧто делает
scpscp file.txt user@host:/tmp/Копировать файл на удалённый сервер.
scp -rscp -r ./dir user@host:/srv/Рекурсивно.
scp -Pscp -P 2222 file user@host:/tmp/Нестандартный порт SSH (заглавная P).
scp -iscp -i ~/.ssh/deploy file user@host:/tmp/Указать ключ.
sftpsftp user@hostИнтерактивная передача: get, put, ls, cd.
rsync -avhrsync -avh --progress ./dir/ user@host:/backup/Синхронизация: только изменившиеся файлы, с правами и временем.
rsync --deletersync -avh --delete ./site/ /var/www/site/Удалять на приёмнике то, чего нет в источнике (осторожно).
rsync --dry-runrsync -avhn ./src/ dst/Только показать, что будет сделано (-n).
rsync --excludersync -av --exclude='*.log' --exclude=node_modules ./app/ host:/app/Исключить шаблоны.
rsync -e sshrsync -av -e "ssh -p 2222" ./dir/ user@host:/x/Свой SSH-порт или ключ.
rsync --bwlimitrsync -av --bwlimit=5000 ./big/ host:/big/Ограничить скорость (КБ/с).

Пример: диагностика «сайт не открывается»

ip -br a                      # есть ли адрес на интерфейсе
ip route get 8.8.8.8         # есть ли маршрут наружу
dig +short example.com       # резолвится ли имя
ping -c 3 8.8.8.8            # доступность по IP (без DNS)
curl -v -o /dev/null https://example.com   # где именно ломается запрос
ss -tulpn | grep :443        # слушает ли сервис порт
sudo ufw status              # не блокирует ли файрвол
Команда ufw enable или изменение правил iptables/nftables по SSH может отрезать вам доступ к серверу. Перед этим разрешите свой порт SSH и держите открытую вторую сессию. Флаг rsync --delete удаляет файлы на приёмнике: сначала проверьте с --dry-run.
Если в curl не хватает понимания, почему запрос не проходит, добавьте -v: видно разрешение имени, TCP, TLS-сертификат и заголовки. Это быстрее, чем гадать по коду ошибки.