Привет!


Если попробуете обратиться в поддержку с запросом «у меня не работает Wi-Fi», то после предложения перезагрузить все свои устройства, вас, скорее всего, попросят собрать диагностику. Обсудим, какая именно диагностика будет полезной, научимся её собирать, а потом всё автоматизируем.


image


Дисклеймер: в рамках данной статьи мы не будем пытаться «починить» Wi-Fi.
Наша задача — собрать диагностику. Что с ней делать дальше — тема для отдельной статьи.


Что собираем


Список требуемой диагностики заточен под решение проблем с корпоративным Wi-Fi и для домашней сети он может быть избыточным. Просто пропускайте нерелевантные пункты.


И ещё. Список получен на основе моего личного опыта работы с высоконагруженными корпоративными беспроводными сетями. Возможно, вы что-то делаете иначе. Делитесь идеями в комментариях, обещаю всё прилежно добавлять в статью.


Список диагностики

Сперва попробуем понять, как сам пользователь описывает проблему. Здесь важно задать правильные вопросы, но пусть они будут простые и понятные.


Ответы в свободной форме
  • Проблема наблюдается на других клиентских устройствах?
  • Проблема наблюдается на других точках/роутерах?
  • Проблема наблюдалась раньше?
  • Как часто повторяется проблема?
  • При каких обстоятельствах?

Дальше соберём «пассивную» диагностику: всё о железе и софте компьютера, а также информацию об эфире.


Общие сведения с компьютера
  • Имя устройства
  • Логин пользователя
  • Время и дата
  • Модель компьютера
  • Модель адаптера
  • Версия драйвера адаптера
  • Поддерживаемые стандарты Wi-Fi
  • Country Code
  • Поддерживаемые каналы
  • Список известных беспроводных сетей
  • MAC-адрес беспроводного адаптера компьютера
  • Список всех IPv4 и IPv6 адресов компьютера


Что в эфире?
  • Имя сети, к которой подключен компьютер (SSID)
  • MAC-адрес точки/роутера, к которому подключен компьютер (BSSID)
  • Канал, на котором работает точка
  • Ширина канала
  • Уровень сигнала от этой точки (dBm)
  • Список всех сетей (SSID+BSSID) с уровнями и каналами, которые слышит адаптер


Логи с компьютера
  • К каким точкам/роутерам компьютер цеплялся ранее и когда?
  • Все факты подключения/отключения/роуминга
  • Логи работы DHCP
  • Логи работы 802.1X
  • Логи ухода в сон
  • Все остальные события, связанные с работой Wi-Fi

Теперь проведём ряд активных тестов.


Проверить доступность
  • IPv4-gateway
  • IPv6-gateway
  • Внешний ip-адрес (8.8.8.8)
  • Внешнее доменное имя за пределами РФ (google.com)
  • Внешнее доменное имя внутри РФ (ya.ru)
  • Устройство внутри вашей локальной сети


Дополнительные проверки и измерения
  • traceroute
  • telnet
  • curl
  • Поиск маршрута в таблице маршрутизации
  • Измерить скорость при помощи условного speedtest
  • Измерить скорость до сервера внутри локальной сети (iperf)
  • Записать дамп трафика с интерфейса адаптера
  • Записать дамп беспроводного трафика «в воздухе» (адаптер должен поддерживать monitor-mode)

Разумеется, собирать диагностику полезнее всего в момент неисправности.
Поэтому процесс должен быть максимально автоматизирован и удобен для пользователя.


Как собираем


Под спойлерами информация о том, как получить требуемую диагностику с трёх самых популярных операционных систем.
Важный нюанс — всё команды, по возможности, должны работать «из коробки».
Чтобы не заставлять страдающего пользователя дополнительно что-то устанавливать для сбора диагностики.


Если заметите, что где-то чего-то не хватает — сообщайте в комментариях, добавлю в статью.


macOS

macOS


Чтобы получить базовые сведения о беспроводном соединении на macOS необязательно открывать терминал: зажмите option и кликните по значку Wi-Fi.
Будет отображена информация о текущем соединении: уровень сигнала, канал, шум, сетевые настройки и многое другое. Там же есть возможность запустить встроенную утилиту диагностики (Open Wireless Diagnostics), сформировать автоматический отчёт (Create Diagnostics Report) и даже собрать сырой дамп беспроводного 802.11-трафика.


Подробнее о встроенных инструментах диагностики

Кликаем по значку Wi-Fi с зажатым option:
image
Открываем встроенную утилиту диагностики, выбрав пункт Open Wireless Diagnostics.
Самое интересное, спрятано во вкладке Window:
image


Я не буду описывать как работает каждый из представленных инструментов, там всё интуитивно.
Но обязательно обратите внимание на Sniffer — он позволяет нативно снимать сырой дамп беспроводного 802.11-трафика. Обычно для этого требуются специальные адаптеры, поддерживающие monitor-mode и некоторое количество ужимок и прыжков, а макбуки поддерживают такой режим из коробки.


Create Diagnostics Report сохранит в /var/tmp автоматический отчёт, содержащий диагностику и тесты, которые, по мнению Apple, помогут разобраться в причинах плохой работы Wi-Fi.


Оба эти инструмента, несомненно, полезны, однако, имеют свои ограничения. Главное из них для меня — невозможность самому выбрать что включать в отчёт и какие тесты проводить.
Также, придётся поделиться своими персональными данными с Apple, но они обещают, что всё будет хорошо:


This diagnostic tool generates files that allow Apple to investigate issues with your computer and help Apple to improve its products. The generated files may contain some of your personal information, which may include, but not be limited to, the serial number or similar unique number for your device, your user name, or your computer name. The information is used by Apple in accordance with its privacy policy (www.apple.com/privacy) and is not shared with any third party.

Используйте встроенные инструменты, если они решают ваши задачи.
Если хотите большей самостоятельности — открывайте терминал.

Базовая информация о сетевых интерфейсах
ifconfig


Сводная информация о компьютере, Wi-Fi адаптере, драйверах, поддерживаемых каналах и многом другом
system_profiler SPAirPortDataType SPHardwareDataType SPSoftwareDataType


Результаты сканирования сетей и информация о текущем соединении (для отображения BSSID нужен sudo)
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -Is


Альтернативный способ получить сводную информацию о беспроводных соединениях (не работает без sudo)
sudo wdutil info


Логи, из которых можно вытащить BSSID без sudo
system_profiler SPLogsDataType


Список известных сетей в порядке приоритетности подключения
networksetup -listpreferredwirelessnetworks en0


Таблицы маршрутизации
netstat -rn


IPv4-шлюз
route get default


IPv6-шлюз
route -n get -inet6 default


Запустить сбор дампа трафика с интерфейса en0
tcpdump -i en0 -w my_filename.pcap


Логи за последние 10 минут
log show --info --debug --last 10m


Встроенный аналог Speedtest (работает начиная с macOS Monterey)
networkQuality


Linux

Linux


Дистрибутив дистрибутиву рознь, поэтому привожу наиболее универсальные команды. На Ubuntu работают «из коробки», но это не точно. Добавляйте варианты в комментариях.
Для наглядности, считаем, что имя беспроводного интерфейса: wlp1s0.


Собрать сырой дамп беспроводного трафика можно, если адаптер поддерживает monitor-mode. Также потребуется установка дополнительного софта.
Это достойно отдельной статьи, поэтому просто предложу гуглить airodump-ng.


Базовая информация о сетевых интерфейсах
ip addr show


Информация о текущем соединении (уровень сигнала, канал, BSSID и т.д.)
iwconfig wlp1s0


Результаты сканирования сетей (SSID, BSSID, каналы, уровни)
nmcli device wifi list


Информация об адаптере и драйвере
nmcli -f GENERAL dev show wlp1s0


Информация о поддерживаемых каналах
iwlist wlp1s0 channel


Список известных сетей в порядке приоритетности подключения
nmcli -f NAME,UUID,AUTOCONNECT,AUTOCONNECT-PRIORITY connection


Таблицы маршрутизации
ip route show table all


IPv4-шлюз:
ip -4 route list type unicast dev wlp1s0


IPv6-шлюз:
ip -6 route list type unicast dev wlp1s0


Запустить сбор дампа трафика с интерфейса wlp1s0
tcpdump -i wlp1s0 -w my_filename.pcap


Логи за последние 10 минут
journalctl -S -10m


Windows

Windows


Часть команд запускается только через PowerShell, другая часть нормально работает и в стандартной командной строке.
Есть возможность сформировать автоматический отчёт, но он не очень информативен.


Собрать сырой дамп беспроводного трафика можно, но даже если найдёте подходящий адаптер, придётся постараться. Здесь описан один из способов.


Базовая информация о сетевых интерфейсах
ipconfig


Информация о текущем соединении (уровень сигнала, канал, BSSID и т.д.)
netsh wlan show interfaces


Список слышимых сетей
netsh wlan show networks


Подробные результаты сканирования сетей (SSID, BSSID, каналы, уровни)
netsh wlan show network mode=bssid


Информация о драйвере
netsh wlan show drivers


Информация о возможностях беспроводного адаптера
netsh wlan show wirelesscapabilities


Список известных сетей в порядке приоритетности подключения:
netsh wlan show profiles


Таблицы маршрутизации
route print


IPv4-шлюз
Get-NetRoute -DestinationPrefix "0.0.0.0/0" | Select-Object -ExpandProperty "NextHop"


IPv6-шлюз
Get-NetRoute -DestinationPrefix "::/0" | Select-Object -ExpandProperty "NextHop"


Сгенерировать автоматический отчёт (требуются права администратора)
netsh wlan show wlanreport


Автоматизируем это


Выполнять команды вручную неудобно, поэтому я написал скрипт на питоне, который автоматически собирает всю необходимую диагностику с macOS и Linux. Windows в планах.


Кроме этого проверяется доступность выбранных пользователем ресурсов (шлюз, 8.8.8.8, facebook.com и т.д.), а на диске сохраняется удобный отчёт в нескольких форматах (markdown, json, plaintext).


https://github.com/skhomm/yfitool

Все исходники открыты, MIT-лицензия — пользуйтесь на здоровье, а ещё лучше приходите контрибьютить.


Что делать дальше с собранной диагностикой

Как я писал, вопрос тянет на отдельную статью. Или цикл статей.
Для затравки оставлю каноническую диаграмму из гайда по траблушингу от WirelessLANProfessionals.
image


Следующий шаг — посмотреть целиком выступление Keith Parsons на эту тему


Ещё нескромно порекомендую собственную подборку полезных ссылок по беспроводной тематике на GitHub


Спасибо всем, кто помогал!

Комментарии (13)


  1. 0HenrY0
    06.11.2022 21:54

    Хорошо, когда большую часть нужной информации можно взять с контроллера, что сильно ускоряет диагностику.


    1. boolochka
      07.11.2022 11:20
      +1

      Это половина нужной диагностики, потому что контроллер (и сама вайфай-сеть) видит клиента, так скажем, с другой стороны.

      Хорошо, когда есть сенсоры вайфая, активный мониторинг — вот тут можно будет сравнить клиентскую статистику с эталонной клиентской статистикой.


  1. mc2
    07.11.2022 01:58
    +1

    Linux с приоритетом:

    nmcli -f NAME,UUID,AUTOCONNECT,AUTOCONNECT-PRIORITY


    1. skhomm Автор
      07.11.2022 23:26

      Только в конце нужно добавить connection, а иначе не сработает:

      nmcli -f NAME,UUID,AUTOCONNECT,AUTOCONNECT-PRIORITY connection
      

      (вместо connection можно использовать просто c)

      Спасибо, теперь в статье.


      1. mc2
        08.11.2022 01:34

        Извините, почему то в буфер не попало при копи-пасте из терминала:(


  1. Akina
    07.11.2022 08:12
    +1

    Проверить доступность

    ...

    - Внешний ip-адрес (8.8.8.8)

    Неразумно. Такой пинг при неудаче не скажет почти ни о чём. Пинговать надо адрес самой точки доступа, причём как LAN, так и WAN адреса, и адрес дефолтного шлюза точки. Можно ещё заранее оттрассировать 2-3 ближайших узла (можно больше, вплоть до выхода от провайдера на магистраль) и пинговать также их.

    А на 8.8.8.8 лучше натравливать tracert.


    1. boolochka
      07.11.2022 11:21
      +1

      У точки может и не быть адреса, который будет виден пользователю и который можно попинговать "из воздуха". Даже так — по-хорошему, у точки такого адреса быть и не должно.


    1. skhomm Автор
      07.11.2022 23:40

      Такой пинг при неудаче не скажет почти ни о чём.

      Согласен с тем, что сам по себе пинг восьмёрок не показателен. Но, например, если google.com не пингуется, а 8.8.8.8 пингуется - это нам о чём-то уже говорит.

      Идея в том, чтобы собрать сразу всю диагностику из списка, а потом её комплексно изучать.
      tracert (traceroute) там, кстати, тоже есть.


      1. Akina
        08.11.2022 08:04

        Но, например, если google.com не пингуется, а 8.8.8.8 пингуется - это нам о чём-то уже говорит.

        Само по себе нет. Это может быть проблема DNS (на что покажет DNS probe). Это может быть проблема маршрута, обычно магистрального (на что укажет tracert). Плюс экзотика. А потому нет никакого смысла получать эту информацию, которая (в случае "собрать сразу всю диагностику из списка, а потом её комплексно изучать") будет гарантированно перекрыта и дополнена другими тестами, всё равно при анализе она не добавит ни бита дополнительных данных.

        Вот сразу, до получения полной диагностики по всем тестам - да. Причём в случае проблемы на пинге важным будет то, какой тип отказа получен (no route to host, destination unreacheable или timeout expired и даже general failure - конкретный тип ошибки сразу отбрасывает часть возможных вариантов проблемы).


  1. Vigogne
    07.11.2022 11:18

    Забрал в закладки! С нетерпением жду статьи о разборе собранного материала.


  1. SaW_3D
    07.11.2022 19:27

    У меня Xiaomi роутер недавно вообще не хотел подключаться ни в какую, и до заводских сбрасывал нифига не помогло.


  1. andrey53
    07.11.2022 19:27
    -1

    Спасибо за статью. Очень жду следующую статью что делать и кто виноват.


  1. nuearth
    09.11.2022 15:21

    Будет здорово, если в статье будут разобраны реальные примеры как логи в жизни помогли проблему решить. Я обычно с другой стороны (сетевой) на проблему смотрю, и теми же средствами контроллера пользуюсь, хотя да, порой бывают странности, когда какое-то устройство просто не подключается, к примеру, когда на сети 11r "adaptive" включен и контроллер ничего не знает о таком клиенте (потому что он в биконе одно видит, нет 11r а в accoc response видит что есть 11r и входит в ступор), а человек жалуется что к Wi-Fi вообще не подключается корпоративному, только к гостевому. Но тут, возможно, даже логи не нужны, чтобы понять что таким устройствам, нужно выключать 11r.

    По-хорошему, наверно, в каждой компании где штат не маленький, должна быть своя вики, куда вносят все такие приключения с клиентскими устройствами. Админам бы было проще наверно в анализе тех же логов имея базу знаний.