Битлента
Сетевые команды и утилиты5 мин чтения·

ip neigh show: как посмотреть ARP-таблицу и состояния соседей в Linux

Что показывает ip neigh show в Linux: соответствие IP и MAC, состояния REACHABLE, STALE и FAILED, очистка записей и отличие от старой команды arp.

Кратко

Команда ip neigh show выводит таблицу соседей: IP-адрес, интерфейс, MAC-адрес и состояние записи. Состояния REACHABLE и STALE нормальны, FAILED и INCOMPLETE говорят, что сосед не ответил на запрос.

Зачем смотреть таблицу соседей

Когда два устройства в одной сети не видят друг друга, а адреса и маски выглядят правильно, полезно заглянуть в таблицу соседей. Это список адресов, для которых система уже выяснила аппаратный адрес. Для IPv4 такую работу делает ARP, для IPv6 механизм обнаружения соседей, а результат в Linux хранится в одной таблице и выводится одной командой.

Команда ip neigh входит в пакет iproute2 и считается современной заменой arp из набора net-tools. Старая утилита в свежих дистрибутивах часто не установлена по умолчанию, зато ip есть почти везде. Если вам нужен общий рассказ о том, как адрес сопоставляется с MAC, он есть на странице про ARP, а здесь разбираем именно вывод и практику.

Таблица заполняется сама: запись появляется после первого обращения к адресу в локальной сети и исчезает по истечении времени, если с этим узлом давно не было связи. Поэтому пустая таблица на только что загруженной машине вполне нормальна. Чтобы увидеть записи, достаточно сначала отправить к нужному узлу пару пакетов, например командой ping.

Как читать вывод построчно

Базовая команда выглядит так: ip neigh show. Можно сокращать до ip n. Каждая строка устроена одинаково, пример (условный): 192.168.1.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff REACHABLE.

  • первое поле — IP-адрес соседа;
  • dev — интерфейс, через который он достижим;
  • lladdr — аппаратный адрес соседа (MAC);
  • последнее слово — состояние записи.

Для отдельных семейств адресов используйте ip -4 neigh или ip -6 neigh. Чтобы ограничить вывод одним интерфейсом, добавьте dev: ip neigh show dev wlan0. Название интерфейса узнайте командой ip link или ip addr, она разобрана на соседней странице.

Шлюз по умолчанию почти всегда присутствует в таблице, потому что через него идёт любой исходящий трафик. Если строки со шлюзом нет или рядом с ним стоит FAILED, проблема находится ещё до маршрутизации: на уровне кабеля, Wi-Fi или самого роутера.

Состояния записей и что они означают

Состояние показывает, насколько свежа информация о соседе. Не нужно запоминать всё: достаточно различать «хорошо», «ждём» и «плохо».

СостояниеСмыслНужно ли действовать
REACHABLEНедавно получено подтверждение, что сосед отвечаетНет
STALEЗапись есть, но давно не подтверждаласьОбычно нет, проверится при следующем обращении
DELAYСистема ждёт, придёт ли подтверждение от верхних уровнейНет, состояние временное
PROBEИдёт активная проверка узлаНет, если быстро сменяется
INCOMPLETEЗапрос отправлен, ответа ещё нетДа, если держится долго
FAILEDОтвета не полученоДа, проверьте связь с узлом
PERMANENTЗапись задана вручную и не устареваетТолько если вы её создавали
NOARPЗапись не требует разрешения адресаНет

Две строки с одним и тем же MAC для разных IP не обязательно ошибка: так выглядят, например, устройства за одним мостом или роутером, который отвечает за несколько адресов. А вот когда один IP внезапно получает другой MAC, чем раньше, стоит выяснить причину. Это может быть замена устройства, но иногда так проявляется конфликт адресов или подмена, о которой подробнее написано в материале про ARP spoofing.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Правка таблицы: добавить, удалить, очистить

Изменять таблицу нужно редко, но иногда это помогает проверить гипотезу. Все операции записи требуют прав администратора, поэтому перед командой ставят sudo.

  1. Очистить записи интерфейса: sudo ip neigh flush dev eth0. После этого система заново выяснит адреса при первом же обращении.
  2. Удалить одну запись: sudo ip neigh del 192.168.1.50 dev eth0.
  3. Добавить постоянную запись: sudo ip neigh add 192.168.1.50 lladdr aa:bb:cc:dd:ee:ff dev eth0 nud permanent.
  4. Заменить существующую: sudo ip neigh replace с теми же параметрами.

Постоянные записи используйте осторожно. Если устройство поменяло сетевую карту, а в таблице остался старый MAC, связь с ним пропадёт, и причина будет неочевидна, пока вы не вспомните о ручной записи. После перезагрузки такие записи исчезают, если вы не сохранили их в настройках сети.

Очистка полезна после замены роутера или смены адреса на соседнем устройстве: система не держит устаревшее соответствие и быстрее переходит к актуальному.

Порядок диагностики, когда сосед недоступен

Если ping до узла в локальной сети не проходит, пройдите по шагам и на каждом смотрите таблицу соседей.

  1. Убедитесь, что у интерфейса есть адрес и он в той же подсети, что и целевой узел.
  2. Отправьте ping по нужному адресу и сразу выполните ip neigh show. Появилась строка с MAC и состоянием REACHABLE или STALE — уровень связи в порядке, ищите причину выше, например в настройках файервола на самом узле.
  3. Если строка в состоянии INCOMPLETE или FAILED, ответа на запрос нет: проверьте кабель, порт коммутатора, Wi-Fi, включено ли устройство.
  4. Если связь есть, но MAC в строке не тот, что вы ожидаете, сверьте его с наклейкой на устройстве или с данными в роутере.

Когда нужен именно список всех устройств сети, а не только тех, с кем вы уже общались, таблица соседей не подойдёт: в ней лишь те, к кому были обращения. Для обнаружения устройств есть отдельные инструменты, например arp-scan. Применяйте их только в своей сети.

Типичные ошибки при чтении таблицы

Новички нередко делают три ошибки. Первая — искать в таблице все устройства сети. Она хранит только тех, с кем компьютер недавно общался, поэтому отсутствие записи не означает, что устройство выключено.

Вторая — считать STALE неисправностью. Это штатное состояние неактивного соседа, а тревогу стоит поднимать лишь при устойчивых FAILED и INCOMPLETE.

Третья — забывать про виртуальные интерфейсы. На машинах с контейнерами и виртуальными машинами в выводе много строк с мостами и виртуальными адаптерами, и они не имеют отношения к вашей физической сети. Фильтруйте вывод по нужному интерфейсу ключом dev, чтобы не тонуть в лишних строках.

Если вы анализируете вывод на удалённой машине по SSH, помните: таблица описывает окружение именно того компьютера, а не вашего. Сравнивайте результаты на обоих концах, когда ищете причину недоступности.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
ip neigharplinuxiproute2

Часто задаваемые вопросы

Читайте также