6.12. Работа с ARP и кешем найденных соседей

[+]6.12.1. arp(8)
[+]6.12.2. ndp(8)

Описание.  Кандидат должен понимать основы работы протокола ARP: обнаружение соседей, изучение arp-кеша, использование в сетях IPv6. Кандидат должен уметь просмотреть, изменить и очистить этот кеш, а так же понять когда это надо сделать.

Практика. arp(8), ndp(8)

Комментарий

6.12.1. arp(8)

Назначение протокола ARP описано в Раздел B.1.3.1, «ARP». Коротко, оно заключается в связи между сетевым и канальным уровнем модели OSI, обеспечивая преобразование IP адресов в аппаратные (MAC) адреса.

Утилита arp(8) используется для того, чтобы управлять ARP кешем. Когда системе надо послать пакет на адрес IP, сперва необходимо узнать какому аппаратному адресу он соответствует, для того, чтобы сформировать Ethernet-кадр. Система посылает широковещательный ARP запрос «кто имеет данный IP?». Получив ответ, система помещает его в кеш и хранит его там около двух минут. При помощи команды arp(8) можно просмотреть содержимое этого кеша:

$ arp -an 1
? (81.xxx.xxx.145) at 00:04:27:fd:3c:d0 on fxp0 [ethernet]
? (81.xxx.xxx.146) at 00:0f:fe:17:b0:85 on fxp0 permanent [ethernet]
? (192.168.0.3) at 00:50:04:af:06:19 on rl0 [ethernet]
? (192.168.0.4) at 00:a0:c9:85:1c:d4 on rl0 [ethernet]
? (192.168.0.5) at 00:0e:a6:88:34:79 on rl0 [ethernet]
? (192.168.0.6) at 00:11:5b:a3:f9:09 on rl0 [ethernet]
? (192.168.0.9) at 00:30:05:64:9c:b7 on rl0 [ethernet]
? (192.168.0.10) at 00:05:5d:2e:40:99 on rl0 [ethernet]
? (192.168.0.11) at 00:a0:c9:a0:dd:a9 on rl0 [ethernet]
? (192.168.0.49) at 00:11:2f:06:b5:2e on rl0 [ethernet]
? (192.168.0.50) at 00:04:75:94:d0:ac on rl0 [ethernet]
? (192.168.0.60) at 00:30:65:df:bd:00 on rl0 [ethernet]
? (192.168.0.65) at 00:0a:95:ed:0c:ea on rl0 [ethernet]
? (192.168.0.70) at 00:30:65:4b:8b:4a on rl0 [ethernet]
? (192.168.0.93) at 00:02:b3:1f:ff:a7 on rl0 [ethernet]
? (192.168.0.125) at 00:03:93:d6:7f:64 on rl0 [ethernet]
? (192.168.0.147) at 00:0d:93:70:be:52 on rl0 [ethernet]
? (192.168.0.150) at 00:03:93:95:97:e6 on rl0 [ethernet]
? (192.168.0.220) at 00:0a:95:94:ff:d0 on rl0 [ethernet]
? (192.168.0.254) at (incomplete) on rl0 [ethernet] 2
? (192.168.0.255) at ff:ff:ff:ff:ff:ff on rl0 permanent [ethernet] 3
? (192.168.1.1) at 00:0d:88:43:77:33 on rl1 [ethernet]
? (192.168.1.2) at 00:0d:88:43:77:29 on rl1 [ethernet]
? (192.168.1.22) at 00:11:95:1d:22:bb on rl1 permanent [ethernet]
? (192.168.1.255) at ff:ff:ff:ff:ff:ff on rl1 permanent [ethernet]
        
1 Здесь применён аргумент -a, чтобы перечислить все записи кеша, и -n, чтобы не преобразовывать IP адреса в имена. Команда выполнена на роутере с тремя сетевыми интерфейсами.
2 Перед выполнением команды был пропингован не существующий адрес. ARP запрос не был удовлетворён, поэтому вместо MAC адреса сетевой карты программа arp(8) пишет в отчёте «incomplit».
3 Перед выполнением команды был пропингован широковещательный адрес, для того, чтобы получить информацию о всех машинах в сети.

Команда arp(8) позволяет так же управлять кешем ARP: удалять из него записи при помощи аргумента -d, или наоборот, при помощи аргумента -s заводить новые записи (временные или постоянные). При помощи аргумента -f можно импортитовать таблицу ARP из внешнего файла.

Таблица 6.2. Аргументы команды arp(8)

АргументОписание
-a Программа выводит (или удаляет) все записи из таблицы ARP.
-d Удаление записи из таблицы arp(8). Может быть объединён с флагом -a для удаления всех записей из кеша. совместно с ключевым словом pub удаляет только публичные записи, т.е. записи, на запросы о которых машина отвечает сама (как ARP сервер).
-i интерфейс Вывести записи касающиеся данного интерфейса
-n Не делать обратного преобразования имён, т.е. показывать адреса численно, а не по именам.
-s hostname ether [temp] [pub] Добавить запись в таблицу ARP. если задано ключевое слово temp, то это будет не статическая, временная запись, если задано слово pub, то это будет «публичная» запись. Т.е. наша машина будет отвечать на ARP запросы по этому IP как ARP сервер.
-S То же, что -s, но существующая запись предварительно удаляется.
-f file Взять данные для таблицы ARP из файла. В файле строки оформляются в том же стиле, что и в опции -s. Комментарий начинается с #.

6.12.2. ndp(8)

В протоколе IPv6 отменён протокол ARP. Вместо него используется своя процедура поиска соседей при помощи протокола NDP: Neighbor Discovery Protocol. Для управления им служит утилита ndp(8). Её синтаксис напоминает синтаксис команды arp(8).