Диагностика сети на Mac

Рейтинг: 62.3% · 11 голосов
Подробный курс по macOS для разработчиков и админов: архитектура и Apple Silicon, терминал и zsh, Homebrew и пакеты, launchd и автоматизация, APFS и Time Machine, безопасность (SIP, Gatekeeper, TCC, FileVault), сеть, логи и диагностика, MDM и DDM, контейнеры и виртуализация, восстановление. По официальной документации Apple, актуально на 2026 (macOS 26 Tahoe).
Ответить
Аватара пользователя
Artem_MacAdmin
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Диагностика сети на Mac

Сообщение Artem_MacAdmin »

Оглавление курса (47)
  1. Что такое macOS: Unix под капотом и место в 2026
  2. Архитектура macOS: XNU, тома и Signed System Volume
  3. Apple Silicon: ARM, Rosetta 2 и отличия от Intel
  4. Установка, обновление и восстановление macOS
  5. Finder, рабочий стол и продуктивность
  6. Системные настройки и их управление из CLI (defaults)
  7. Пользователи и группы: учётные записи и управление
  8. Терминал и zsh: командная строка macOS
  9. CLI на macOS: BSD-команды и отличия от Linux
  10. Настройка zsh: .zshrc, prompt, плагины
  11. Файловая система и права: POSIX, ACL, атрибуты, флаги
  12. Homebrew: пакетный менеджер для macOS
  13. Homebrew глубже: tap, Brewfile, services, обслуживание
  14. Другие пакеты: MacPorts, mas, Nix и App Store
  15. Установка приложений: .app, .dmg, .pkg и Gatekeeper
  16. Управление приложениями и их данные
  17. launchd и launchctl: система запуска macOS
  18. Свои службы и периодические задачи на launchd
  19. Автоматизация: Shortcuts, AppleScript и osascript
  20. Конфигурация как код: defaults, plist и профили
  21. APFS: снапшоты, клоны, контейнеры и шифрование
  22. Управление дисками: diskutil, образы и форматирование
  23. Time Machine и резервное копирование
  24. Внешние диски, форматы и сетевые тома
  25. Модель безопасности macOS: SIP и целостность системы
  26. Gatekeeper, нотаризация и защита от вредоносов
  27. Приватность и TCC: разрешения на доступ
  28. FileVault: полнодисковое шифрование
  29. Связка ключей и управление секретами
  30. Сетевой экран и защита сети
  31. Сеть в macOS: настройка и инструменты
  32. Диагностика сети на Mac (вы здесь)
  33. Общий доступ: SSH, экран, файлы, удалённое управление
  34. Процессы и ресурсы: мониторинг производительности
  35. Логи macOS: unified logging и диагностика
  36. Производительность и энергия: powermetrics, диагностика
  37. Энергия, сон и обслуживание системы
  38. Профили конфигурации и основы MDM
  39. Управление парком Mac: MDM, DDM и zero-touch (2026)
  40. Среда разработчика на Mac: Xcode CLT, git, версии
  41. Контейнеры на Mac: Docker Desktop, OrbStack, Apple container
  42. Виртуализация: Virtualization.framework, UTM, Linux и Windows
  43. Режимы загрузки и восстановление (Apple Silicon)
  44. Сброс, NVRAM, Safe Mode и сброс настроек
  45. Траблшутинг macOS: дерево решений по симптомам
  46. Место на диске и обслуживание системы
  47. Сквозной проект: настройка Mac как у профи + куда расти
Сеть тупит. Страницы грузятся через раз, ssh отваливается, видеозвонок крошится в пиксели, а Wi-Fi показывает полную шкалу и нагло врёт. Самое бесполезное, что тут можно сделать - тыкать "Забыть сеть" и перезагружать роутер по кругу. Профессиональная диагностика сети на Mac - это не магия, а лестница: ты идёшь снизу вверх по сетевому стеку (линк -> IP -> маршрут -> DNS -> приложение) и на каждой ступени задаёшь один точный вопрос. Хорошая новость: 90 процентов инструментов уже стоят в системе из коробки, потому что macOS - это BSD, а не урезанный десктоп. ping, traceroute, dig, nc, tcpdump, lsof, scutil, wdutil - всё это есть прямо сейчас в /usr/bin и /usr/sbin. Homebrew нужен только для пары приятных надстроек (mtr, wireshark). В этом уроке разберём не "какие команды бывают", а как из их вывода вытащить диагноз.

Лестница стека: где именно сломалось

Прежде чем стрелять командами, договоримся о порядке. Сеть - это слои, и проблема всегда живёт на каком-то одном. Снизу вверх:
  • Линк - есть ли вообще соединение? Wi-Fi подключился, кабель воткнут, интерфейс поднят.
  • IP-адрес - выдал ли DHCP адрес, не словил ли ты self-assigned 169.254.x.x (верный признак, что DHCP не ответил).
  • Шлюз и маршрут - видишь ли ты роутер, уходит ли трафик наружу.
  • DNS - резолвятся ли имена в адреса. Это место, где "интернета нет", хотя по IP всё пингуется.
  • Приложение - порт, прокси, TLS, конкретный сервис.
Главное правило: не прыгай через ступени. Если ping по IP работает, а по имени нет - это DNS, и tcpdump тут ни при чём. Сэкономишь себе полчаса.

Быстрый снимок состояния даёт scutil - это интерфейс к динамическому store конфигурации macOS (тот самый configd, который рулит сетью). Он знает текущий первичный сервис, DNS и прокси без всякого копания в Системных настройках:

Код: Выделить всё

# какой интерфейс сейчас "главный" (через что идёт трафик в интернет)
scutil --nwi

# действующие DNS-резолверы - то, что система реально использует
scutil --dns

# настройки прокси (привет, корпоративный PAC-файл)
scutil --proxy
Кусок вывода scutil --dns стоит уметь читать:

Код: Выделить всё

DNS configuration

resolver #1
  search domain[0] : lan
  nameserver[0] : 192.168.1.1
  flags    : Request A records, Request AAAA records
  reach    : 0x00020002 (Reachable,Directly Reachable Address)
Здесь resolver #1 - это твой основной DNS (роутер 192.168.1.1). Если вместо ожидаемого 1.1.1.1 или корпоративного сервера тут торчит чужой адрес или резолвер вообще отсутствует - копай в DHCP или в перехват DNS. Поле reach показывает, что сервер вообще достижим. scutil --nwi (network information) одной строкой скажет, какой интерфейс первичный - en0 (Wi-Fi) или en6 (USB-Ethernet), и это снимает кучу вопросов "почему трафик идёт не туда".

Изображение

ping, traceroute и DNS-резолв руками

Базовая связность - это ping на Mac. Но пингуй с умом: сначала по IP, потом по имени. Разница в одну букву экономит диагноз.

Код: Выделить всё

# 1. жив ли вообще путь наружу - пингуем по IP, минуя DNS
ping -c 4 1.1.1.1

# 2. работает ли резолв имён - то же самое, но по домену
ping -c 4 cyberlake.ru
Флаг -c обязателен: BSD-шный ping в macOS, в отличие от привычки линуксоидов жать Ctrl+C, без -c долбит вечно. Разбор по результату: первый ping идёт, второй нет - на 100 процентов DNS. Оба не идут - проблема ниже, на линке или маршруте. Полезный вывод:

Код: Выделить всё

64 bytes from 1.1.1.1: icmp_seq=0 ttl=57 time=12.418 ms
...
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 12.418/14.002/16.310/1.503 ms
Смотри на packet loss и stddev (разброс). 0 процентов потерь и стабильные 12-16 мс - канал здоровый. А вот 0 процентов потерь, но avg 14 и max 380 мс - это bufferbloat или перегруженный Wi-Fi: пинг доходит, но плавает, отсюда лагающие звонки при "нормальной" скорости.

traceroute на Mac показывает маршрут по хопам - где именно трафик застревает:

Код: Выделить всё

traceroute -n cyberlake.ru

Код: Выделить всё

 1  192.168.1.1  1.204 ms  1.110 ms  1.087 ms
 2  10.0.0.1  8.901 ms  9.122 ms  8.880 ms
 3  * * *
 4  185.12.34.1  14.5 ms  14.1 ms  13.9 ms
Флаг -n отключает обратный DNS-резолв каждого хопа - трейс летит быстрее и не виснет, если DNS как раз и сломан. Строка из трёх звёздочек - это не всегда обрыв: многие роутеры тихо не отвечают на ICMP TTL-expired, но трафик через них идёт. Тревога - если звёздочки начинаются на первом-втором хопе (не видишь даже свой шлюз) или если до этого хопа задержки были 10 мс, а на нём скакнули до 300 и дальше всё умерло. Вот там и порвалось.

Для резолва имён прицельно есть dig (из пакета bind, идёт в системе) и nslookup. dig точнее и показывает всю кухню:

Код: Выделить всё

dig cyberlake.ru +short        # просто адрес, без шелухи
dig @1.1.1.1 cyberlake.ru      # спросить конкретный сервер в обход системного
dig cyberlake.ru MX            # почтовые записи
Трюк dig @1.1.1.1 бесценен: если системный DNS возвращает мусор, а 1.1.1.1 - правильный ответ, виноват не домен, а твой резолвер (роутер, провайдер, VPN-сплит). nslookup проще и привычнее для тех, кто пришёл с Windows, но для серьёзной диагностики бери dig.

mtr, проверка портов через nc и кто занял порт

traceroute - это снимок, а сеть дышит. mtr (My TraceRoute) совмещает ping и traceroute и крутит их в реальном времени, показывая потери по каждому хопу. В системе его нет, ставим через Homebrew (на Apple Silicon он ляжет в /opt/homebrew):

Код: Выделить всё

brew install mtr
sudo mtr -n cyberlake.ru     # нужен root для raw-сокетов
mtr - лучший инструмент поймать "плавающую" потерю: запусти на пару минут и смотри колонку Loss%. Если потери появляются на промежуточном хопе, но дальше до цели снова 0 - этот хоп просто рейт-лимитит ICMP, игнорируй. А вот если потери начинаются на хопе N и тянутся до самого конца - вот он, виновник.

Проверка портов - это nc (netcat), в системе из коробки. Классика "хост слушает порт или нет":

Код: Выделить всё

# -z только сканирует (zero-I/O), -v подробно, -G таймаут коннекта 5 сек
nc -zv -G 5 cyberlake.ru 443

Код: Выделить всё

Connection to cyberlake.ru port 443 [tcp/https] succeeded!
succeeded - порт открыт, путь до сервиса есть, дело не в сети. Если же ping до хоста идёт, а nc на 443 висит и отваливается по таймауту - значит, режет файрвол по пути или сервис лёг. Так за две команды отделяешь "сеть упала" от "сервис упал". Для UDP добавь -u (но помни: UDP без ответа не отличить от потери).

Теперь зеркальная задача - проверка занятых портов локально на самом Mac. Кто-то уже сидит на 8080, и твой dev-сервер не стартует. lsof -i (list open files, а сокеты в Unix - тоже файлы):

Код: Выделить всё

# кто слушает конкретный порт
sudo lsof -nP -i :8080

# все слушающие TCP-порты разом
sudo lsof -nP -iTCP -sTCP:LISTEN

Код: Выделить всё

COMMAND   PID  USER   FD   TYPE  DEVICE NODE NAME
node    47218  khovanskiy   23u  IPv4  ...  TCP *:8080 (LISTEN)
Флаги: -n не резолвит хосты в имена, -P не превращает номера портов в имена служб - оба ускоряют вывод и убирают двусмысленность. sudo нужен, чтобы видеть процессы чужих пользователей (включая системные). Получил PID - дальше kill 47218 или разбирайся, что это за процесс. Альтернатива - netstat -an | grep LISTEN, но lsof сразу даёт имя процесса и PID, поэтому в реальной работе он удобнее. Один нюанс: BSD-шный netstat в macOS не понимает привычного линуксоидам netstat -tulpn - флаги другие, не путай.

Wi-Fi не работает на Mac: wdutil и Wireless Diagnostics

Отдельный фронт - когда Wi-Fi не работает на Mac или работает отвратительно. Тут шкала сигнала врёт, и нужны цифры. Самый быстрый путь: зажми Option (Alt) и кликни по иконке Wi-Fi в меню-баре - откроется расширенная панель с реальными параметрами: RSSI, Noise, Tx Rate, канал и его ширину. Оттуда же запускается приложение Беспроводная диагностика (Wireless Diagnostics). А если зажать Option и удерживать при клике - в меню появится пункт "Открыть Беспроводную диагностику".

Но мы за CLI. Старый добрый airport устарел и выпилен, ему на замену пришёл wdutil. Команда wdutil info - это снимок всего радио-окружения, и info, в отличие от остальных подкоманд, работает даже без sudo (хотя под sudo вывод полнее и не маскирует MAC/SSID):

Код: Выделить всё

sudo wdutil info

Код: Выделить всё

NETWORK
    SSID : MyHomeWiFi
    BSSID : a1:b2:c3:d4:e5:f6
    Channel : 6g149/160
    RSSI : -52 dBm
    Noise : -92 dBm
    Tx Rate : 1200.0 Mbps
    PHY Mode : 11ax
    MCS Index : 11
Как это читать - вот где собака зарыта:
  • RSSI (уровень сигнала) в дБм: -52 отлично, -67 рабочий минимум, ниже -75 уже боль. Чем ближе к нулю - тем лучше.
  • Noise (шум): -92 нормально. Считай SNR = RSSI минус Noise. -52 минус (-92) = 40 дБ, отличный запас. Если SNR падает ниже 20 дБ - скорость рухнет, даже когда "палочек" полно.
  • Channel: 6g149 значит диапазон 6 ГГц (Wi-Fi 6E), канал 149. 2g - это 2.4 ГГц, забитый микроволновками и соседями. Если ты на 2g при наличии 5/6 ГГц - вот причина тормозов.
  • Tx Rate: фактическая канальная скорость. Резко просела при том же RSSI - помехи или переключение на узкий канал.
Реальный сценарий: жалоба "ноут тормозит в дальней комнате". Идёшь туда с MacBook, sudo wdutil info, видишь RSSI -78 и Tx Rate 72 Mbps вместо 1200. Диагноз - не "Wi-Fi сломан", а слабый сигнал, лечится повторителем или mesh, а не переустановкой драйверов. Для глубокого разбора (наложение каналов соседей, всплески помех) запускай графическую Беспроводную диагностику - она строит графики и пишет sysdiagnose в /var/tmp.

Перехват трафика и сброс DNS-кэша

Когда верхние ступени не дали ответа, спускаешься смотреть пакеты глазами. tcpdump на Mac есть из коробки и работает на raw-сокетах, поэтому нужен sudo. Базовый рецепт - слушать конкретный хост на конкретном интерфейсе:

Код: Выделить всё

# en0 - Wi-Fi; -n не резолвить; port 443 - только HTTPS-трафик
sudo tcpdump -ni en0 host cyberlake.ru and port 443

Код: Выделить всё

14:22:01.337 IP 192.168.1.50.51324 > 185.12.34.1.443: Flags [S], seq 91...
14:22:01.349 IP 185.12.34.1.443 > 192.168.1.50.51324: Flags [S.], seq 12...
14:22:01.349 IP 192.168.1.50.51324 > 185.12.34.1.443: Flags [.], ack 1
Это здоровый TCP-хендшейк: [S] (SYN) ушёл, [S.] (SYN-ACK) вернулся, [.] (ACK) - соединение установлено. А если ты видишь только повторяющиеся [S] без ответа - твой SYN уходит в пустоту, ответа нет: режет файрвол или хост мёртв. Видишь [R] (RST) сразу после SYN - порт закрыт, кто-то активно отбивает. Чтобы потом разобрать спокойно в GUI, пиши в файл: sudo tcpdump -ni en0 -w /tmp/dump.pcap, а открывай в Wireshark (ставится brew install --cask wireshark) - там фильтры, графики и расшифровка протоколов.

Отдельная частая болячка - DNS-кэш. Старый IP закэшировался, сайт переехал, а Mac упорно лезет на мёртвый адрес. Сброс DNS-кэша на актуальных macOS (Sonoma, Sequoia, Tahoe) - это две команды одной строкой:

Код: Выделить всё

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Почему именно так: dscacheutil -flushcache чистит кэш Directory Service, а killall -HUP mDNSResponder шлёт сигнал SIGHUP демону mDNSResponder - это и есть системный DNS-резолвер macOS, он перечитывает конфиг и сбрасывает свой внутренний кэш. Одной первой команды мало - реальный кэш живёт именно в mDNSResponder. Подтверждения в консоли не будет (это нормально), просто молча отработает.

mDNSResponder заодно отвечает за Bonjour и зону .local - это локальное обнаружение устройств (принтеры, AirPlay, ssh user@macbook.local). Если .local-имена резолвятся через раз, виноват обычно mDNSResponder или multicast, который режет точка доступа с включённой клиент-изоляцией. Тот же HUP его и лечит. Не дёргай эти команды профилактически "на всякий случай" - кэш существует не просто так, без него каждый резолв пойдёт заново и сёрфинг слегка замедлится.

Мини-лаба: пройди стек руками

Пятнадцать минут, повтори на своём Mac и закрепи лестницу диагностики:
  • Сними состояние: scutil --nwi, scutil --dns. Найди свой первичный интерфейс и основной DNS-сервер. Запиши их.
  • Проверь связность: ping -c 4 1.1.1.1, потом ping -c 4 ya.ru. Оба прошли? Глянь packet loss и разброс в round-trip.
  • Сравни резолверы: dig ya.ru +short и dig @1.1.1.1 ya.ru +short. Ответы совпали? Если нет - твой системный DNS чудит.
  • Прогони маршрут: traceroute -n ya.ru. Посчитай хопы до цели, найди, где скачок задержки.
  • Проверь сервис: nc -zv -G 5 ya.ru 443. Дождись succeeded.
  • Wi-Fi в цифрах: sudo wdutil info. Найди RSSI и Noise, посчитай SNR. Больше 25 дБ - канал здоровый.
  • Загляни в пакеты: sudo tcpdump -ni en0 -c 20 port 443 и параллельно открой пару сайтов. Увидь хендшейки.
  • Финал: sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - сбрось кэш и повтори dig.
Контрольные вопросы
  • ping по IP-адресу проходит, а ping по доменному имени - нет. На какой ступени стека проблема и какой одной командой ты это подтвердишь?
  • Чем scutil --dns принципиально полезнее, чем просто посмотреть DNS в Системных настройках? Что он показывает такого, чего нет в GUI?
  • Почему для полного сброса DNS-кэша недостаточно одной dscacheutil -flushcache и зачем нужен killall -HUP mDNSResponder?
  • В выводе wdutil info ты видишь RSSI -49 dBm и Noise -60 dBm. "Палочек" полно, но скорость низкая. Посчитай SNR и объясни, почему связь плохая.
Итог

Диагностика сети на Mac - это дисциплина, а не угадайка. Идёшь по лестнице снизу вверх: scutil дал снимок, ping отделил линк от DNS, traceroute и mtr показали, где рвётся путь, nc проверил порт удалённо, lsof - локально, wdutil дал честные цифры по Wi-Fi вместо вранья шкалы, а tcpdump показал пакеты глазами, когда выше ответа не нашлось. Почти всё это уже стоит в системе - BSD-наследие macOS работает на тебя. Запомни главное: каждый инструмент отвечает на один конкретный вопрос, и сила не в количестве команд, а в правильном порядке. Сначала пойми, на каком ты слое, потом стреляй.
👍3 ❤️4 🔥1 😄 🤔
Аватара пользователя
cpp12
Сообщения: 1
Зарегистрирован: 19 май 2026, 13:36

Re: Диагностика сети на Mac

Сообщение cpp12 »

Полгода тыкал Забыть сеть когда wifi тупил, а оказалось у меня RSSI -80 в дальней комнате. wdutil info все разложил по полкам, спасибо. Поставил mesh - проблема ушла.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
pandaslord
Сообщения: 1
Зарегистрирован: 05 июн 2026, 00:43

Re: Диагностика сети на Mac

Сообщение pandaslord »

Хороший трюк с dig @1.1.1.1 в обход системного резолвера. У меня как раз корпоративный VPN ломал резолв внутренних имен, через это сразу стало видно что виноват не домен а сплит-DNS на впне.
👍1 ❤️ 🔥1 😄 🤔1
Ответить
← Предыдущая глава
Сеть в macOS: настройка и инструменты
Следующая глава →
Общий доступ: SSH, экран, файлы, удалённое управление

Все главы курса «macOS для профи: администрирование, терминал и Homebrew»

Поделиться темой: ✈ Telegram VK
Похожие запросы: Логи и диагностика macOSНастройка сети на MacТраблшутинг и обслуживание Mac

Вернуться в «macOS для профи: администрирование, терминал и Homebrew»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость