Заметки с полей.
В данной заметке я не буду подробно описывать принципы работы ARP и протоколов этого семейства (RARP, InARP, UnARP и т.д.). На эту тему уже существует уйма статей в Интернете (например, здесь не плохо описаны разновидности ARP). Единственный теоретический момент, на котором я заострю чуть больше внимания, – механизм Gratuitous ARP (GARP).
Статья будет состоять из двух частей. В первой части будет немного теории и особенности работы ARP на маршрутизаторах Cisco, связанные с правилами NAT и с функцией Proxy ARP. Во второй части опишу отличия в работе ARP между маршрутизаторами Cisco и межсетевыми экранами Cisco ASA, а также поделюсь несколькими интересными случаями из практики, связанными с работой ARP.
Ниже представлен пример обмена ARP-запросом/ARP-ответом в программе-сниффере Wireshark:

ARP-запрос отправляется на широковещательный MAC-адрес ff:ff:ff:ff:ff:ff. В теле ARP-запроса поле с неизвестным значением Target MAC Address заполняется нулями.
ARP-ответ отправляется на MAC-адрес получателя, отправившего ARP-запрос. В поле Sender MAC Address указывается запрашиваемый MAC-адрес устройства.
Поле opcode в заголовке ARP может принимает значение 1 для ARP-запроса и значение 2 для ARP-ответа.
Чтобы два устройства могли начать передавать трафика между собой, в их ARP-таблицах должна существовать соответствующая запись о соседнем устройстве. Логично предположить, чтобы ARP-запись появилась в таблицах, для каждого устройства должна отработать процедура ARP-запрос/ARP-ответ. То есть перед передачей трафика в сети должны пройти по два ARP-запроса и два ARP-ответа (ARP-запрос/ARP-ответ для первого компьютера и ARP-запрос/ARP-ответ для второго компьютера). Однако, данное предположение верно не для всех случаев. Сетевое оборудование Cisco добавляет новую запись в ARP-таблицу сразу по приходу ARP-запроса от удалённого устройства.
Рассмотрим пример. В широковещательный домен добавляется новое устройство с адресом 198.18.0.200. Запустим пинг с нового устройства и посмотрим debug arp на маршрутизаторе Cisco:
Как видно, сразу по пришествии ARP-запроса от неизвестного IP-адреса (rcvd req src 198.18.0.200), маршрутизатор создаёт соответствующую запись в своей ARP-таблице (creating entry for IP address: 198.18.0.200, hw: 64e9.50c8.d6cd).
Для текущей статьи я не проводил подробного исследования по вопросу, какое именно сетевое оборудование добавляет ARP-запись по пришествии ARP-запроса. Однако, предполагаю, описанное поведение присуще не только сетевому оборудованию Cisco, но и сетевому оборудованию других производителей, так как данный механизм позволяет существенно сократить ARP-трафик в сети.
Механизм Gratuitous ARP используется для оповещения устройств в рамках широковещательного домена о появлении новой привязки IP-адреса и MAC-адреса. Когда сетевой интерфейс устройства получает настройки IP (вручную или по DHCP), устройство отправляет Gratuitous ARP сообщение, чтобы уведомить соседей о своём присутствии. Gratuitous ARP сообщение представляет собой особый вид ARP-ответа. Поле opcode принимает значение 2 (ARP-ответ). MAC-адрес получается как в заголовке Ethernet, так и в теле ARP-ответа является широковещательным (ff:ff:ff:ff:ff:ff). Поле Target IP Address в теле ARP-ответа совпадает с полем Sender IP Address.
Механизм Gratuitous ARP используется для многих целей. Например, с помощью Gratuitous ARP можно уведомить о смене MAC-адреса или обнаружить конфликты IP-адресов. Другой пример — использование протоколов резервирования первого перехода (First Hop Redundancy Protocols), например, HSRP у Cisco. Напомню, HSRP позволяет иметь виртуальный IP-адрес, разделённый между двумя или более сетевыми устройствами. В нормальном режиме работы обслуживание виртуального IP-адреса (ответы на ARP-запросы и т.д.) обеспечивает основное устройство. При отказе основного устройства обслуживание виртуального IP-адреса переходит ко второму устройству. Чтобы уведомить о смене MAC-адреса ответственного устройства, как раз отправляется Gratuitous ARP-сообщения.
В примере ниже представлено Gratuitous ARP сообщение при включении сетевого интерфейса маршрутизатора с настроенным IP-адресов 198.18.0.1.

Если на маршрутизаторе настроен secondary IP-адрес, при переходе интерфейса в состояние UP будут отправлены Gratuitous ARP уведомления для каждого IP-адреса интерфейса. В примере ниже представлены Gratuitous ARP сообщения, отправляемые при включении интерфейса маршрутизатора с основным IP-адресом 198.18.0.1 и secondary IP-адресом 198.18.2.1.

Безусловно, маршрутизатор будет отвечать на ARP-запросы как для основного, так и для secondary IP-адреса.
Логично предположить, что как только устройство получает Gratuitous ARP, сразу добавляется новая запись в ARP-таблицу. Однако это не так. Если в таблице устройства отсутствовала ARP-запись, связанная с IP-адресом из Gratuitous ARP сообщения, новая запись добавлена не будет. При необходимости отправить трафик будет сформирован ARP-запрос и получен ARP-ответ. Только после этой процедуры новая запись добавится в ARP-таблицу.
Пример на маршрутизаторе Cisco. Включим debug arp и подключим в широковещательный домен новое устройство с адресом 198.18.0.200. До подключения нового устройства ARP-таблица маршрутизатора выглядит следующим образом:
Включаем новое устройство с адресом 198.18.0.200. Получаем debug-сообщение о приходе Gratuitous ARP:
Новая запись не появилась. Делаем пинг до нового адреса:
Debug-сообщения показывают, что прошла процедура ARP-запрос/ARP-ответ. Проверяем ARP-таблицу:
Новая запись появилась.
ARP и NAT на маршрутизаторах Cisco
- Если внутренний глобальный адрес находится в той же IP-подсети, что и адрес интерфейса маршрутизатора, маршрутизатор будет отвечать на ARP-запросы к этому адресу. При этом в собственной arp-таблице маршрутизатора создаётся статическая запись для внутреннего глобального адреса.
- Если внутренний глобальный адрес находится в IP-подсети, отличной от адреса интерфейса маршрутизатора, маршрутизатор не будет отвечать на ARP-запросы к этому адресу. В собственной arp-таблице статическая запись не создаётся. Чтобы связь с таким IP-адресом заработала, требуется дополнительная настройка. Мы рассмотрим данный случай более подробно далее в статье.

Примечание: для тестов использовался маршрутизатор C4321 с программным обеспечением 15.4(3)S3 и межсетевой экран Cisco ASA5505 c программным обеспечением 9.1(6)6.
Компьютер Wireshark с адресов 198.18.0.250 в нашем случае будет обозначать подключение к внешней сети (например, к Интернет-провайдеру). С помощью сниффера Wireshark будем просматривать обмен сообщениями ARP между маршрутизатором и компьютером.
Настройки интерфейсов маршрутизатора:
Добавим правило динамического NAT, чтобы транслировать адрес компьютера из LAN (192.168.20.5) во внутренний глобальный адрес 198.18.0.5 при обращении к компьютеру во вне (Wireshark). Добавим правило статического PAT для публикации TCP порта 3389 (RDP) компьютера из LAN под глобальным адресом 198.18.0.2.

Посмотрим ARP-таблицу на маршрутизаторе:
Видим, что в ARP-таблице присутствуют статические записи как для внешнего интерфейса маршрутизатора (198.18.0.1), так и для внутренних глобальных адресов из правил динамического и статического NAT.
Сделаем clear arp-cache на маршрутизаторе и посмотрим в Wireshark, какие Gratuitous ARP уведомления будут отправлены с внешнего интерфейса:

Как видно, маршрутизатор уведомил о готовности обслуживать адрес интерфейса, адрес из правила динамического NAT и адрес из правила статического NAT.
А теперь представим ситуацию, когда провайдер расширяет пул публичных адресов, выданных клиенту, за счёт другой подсети. Предположим, дополнительно к IP-подсети 198.18.0.0/24 на внешнем интерфейсе маршрутизатора мы получаем от провайдера новый пул 198.18.99.0/24 и хотим публиковать наши внутренние сервисы под новыми IP-адресами. Для наглядности приведу схему с провайдером:

Добавим правило статического PAT для публикации TCP порта 3389 (RDP) компьютера из LAN под новым глобальным адресом 198.18.99.2:
Если снова посмотреть ARP-таблицу маршрутизатора командой show arp, увидим, что статическая запись для IP-адреса 198.18.99.2 не добавилась.
Чтобы иметь возможность отправлять ARP-запросы в новую сеть 198.18.99.0/24 с компьютера Wireshark, расширим маску его сетевых настроек до 255.255.0.0 (/16). Напомню, для нашего примера компьютер Wireshark выступает в роли маршрутизатора Интернет-провайдера.
После ввода clear arp-cache сниффер по-прежнему показывает Gratuitous ARP только для трёх IP-адресов: 198.18.0.1, 198.18.0.2, 198.18.0.5. Для нового адреса 198.18.99.2 Gratuitous ARP не срабатывает. Попробуем открыть tcp-порт 3389 адреса 198.18.99.2 и одновременно посмотреть сниффер:


Неуспех. Проверим ARP-таблицу:

- Попросить провайдера прописать статические ARP-записи для каждого IP-адреса из нового диапазона. Это не очень удобно, если выдаётся широкий диапазон как в нашем примере.
- Попросить провайдера прописать статический маршрут. Часто, чтобы выдать дополнительный диапазон белых IP-адресов, провайдер прописывает на интерфейсе своего оборудования secondary IP-адрес. Вместо этого мы можем попросить провайдера прописать статический маршрут к новой IP-подсети через IP-адрес внешнего интерфейса маршрутизатора. В этом случае оборудование провайдера будет знать, что новая подсеть доступна через IP-адрес интерфейса маршрутизатора, а маршрутизатор, в свою очередь, будет отвечать на ARP-запросы, отправленные к собственному интерфейсу.
- Прописать secondary IP-адрес из нового диапазона на внешнем интерфейсе маршрутизатора. В этом случае любой IP-адрес нового диапазона будет принадлежать той же подсети, что и IP-адрес (пусть и secondary) интерфейса маршрутизатора. Маршрутизатор автоматически добавит статические записи в свою ARP-таблицу, будет слать Gratuitous ARP и отвечать на ARP-запросы.
- Использовать механизм Proxy Arp на маршрутизаторе. На этом варианте остановимся чуть более подробно.
- Целевой IP-адрес ARP-запроса находится в IP-подсети, отличной от IP-подсети, в которой ARP-запрос получен;
- Маршрутизатор имеет один или несколько маршрутов к целевому IP-адресу ARP-запроса;
- Маршруты к целевому IP-адресу ARP-запроса указывают на исходящий интерфейс, отличный от интерфейса, на который ARP-запрос был получен.
Настройка Proxy ARP на интерфейсе маршрутизатора:
Отключить Proxy ARP на всех интерфейсах маршрутизатора можно глобально:
Данная настройка имеет приоритет над настройками Proxy ARP, применёнными на интерфейсах.
Помимо команды ip proxy arp в настройках интерфейса существует команда ip local-proxy-arp . Данная команда работает только когда ip proxy arp включён на интерфейсе и позволяет маршрутизатору отвечать на ARP-запросы, даже если целевой IP-адрес находится в той же IP-подсети, откуда ARP-запрос поступил. Пример настройки:
Данная настройка может пригодится, если мы хотим, чтобы трафик в рамках одного широковещательного домена шёл через интерфейс нашего маршрутизатора. Данную задачу можно реализовать с использованием Protected port (PVLAN edge) настроек на L2-коммутаторе ( switchport protected ).
Включение Proxy ARP на внешнем интерфейсе маршрутизаторе позволит решить проблему с новым пулом адресов, выданных провайдером. Попробуем открыть tcp-порт 3389 адреса 198.18.99.2 после включения Proxy ARP на интерфейсе маршрутизатора и одновременно посмотреть сниффер:

Успех. Маршрутизатор отвечает на ARP-запрос и порт открывается. Таким образом, функциональность Proxy ARP также можно использовать при необходимости трансляции адресов в новый пул.
Name already in use
Computer-networks-lessons-in-Russian / content / pr4-protokol-arp.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Практическая работа №4. Протокол ARP
Цель: понять принцип наполнения таблицы коммутации и работы протокола ARP.
ARP (Address Resolution Protocol) – протокол 3-го уровня, который обеспечивает связность между адресами 2-го и 3-го уровней в сети. Существует 4 типа ARP-сообщений:
- Традиционный ARP
- Proxy ARP
- Gratuitous ARP
- ARP probe и ARP Announcement
Данный протокол работает посредством сообщений Ethernet broadcast и Ethernet unicast, называемые ARP-request (-запрос) и ARP-reply (-ответ) соответственно, для выполнения 2 базовых функций:
Определение MAC адреса устройства посредством известного IPv4 адреса.
Наполнение ARP таблицы. По факту, в ARP таблице содержатся IP-адреса устройств и соответствующие им MAC-адреса.
Если на момент создания Ethernet-кадра ARP таблица «не знает» какой MAC-адрес нужно использовать при отправлении кадра на определенный IP-адрес, генерируется ARP запрос в виде широковещательного кадра. Тот узел, IP-адрес которого указан в запросе, генерирует ARP ответ типа unicast. После получения этого ответа, в таблице ARP формируется соответствующая запись, с помощью которой создаются Ethernet-кадры. Если в начале процесса передачи данных узел обнаруживает, что IP-адрес получателя находится в другой сети, то запрос генерируется на адрес шлюза по умолчанию, который отвечает своим MAC-адресом.
Proxy ARP
Данный вид встречается в настоящее время не так часто и по умолчанию отключен на устройствах. Данный тип ARP используется в случаях, когда одному хосту нужно ответить на ARP-запрос от имени другого. Детальнее об можно почитать по ссылке:
Существует также самообращенный ARP ответ, который не требует предварительного запроса и выполняется в том случае, когда хосту нужно сообщить об изменении своего MAC- или IP-адреса остальным хостам в сети. В таком запросе IP-адреса отправителя и получателя совпадают, в качестве MAC-адреса используется широковещательный. Самообращенный запрос позволяет решить задачу корректировки записи в АRP-таблицах других хостов в сети, которые содержали старую связку МАС-IP-адресов инициатора. Хост, получивший ARP-запрос c MAC-адресом, который содержится в ее таблице, должен обновить эту запись.
ARP probe и ARP Announcement
Этот тип ARP-сообщений используется для процесса обнаружения дубликатов адресов в сети (Duplicate Address Detection). Они часто называется самообращенными (gratuitous), т.к. процесс передачи этих сообщений не инициирован другими каким-либо запросом в сети, но все же являеются самостоятельным типом сообщений из-за наличия отличного значения в поле OpCode в теле ARP-пакета. Когда возникает необходимость в проверке занятости какого-либо адреса в сети (например, при работе DHCP), хост отправляет несколько (обычно 3) Probe-сообщений, где MAC-адрес получателя — 0000.0000.0000 , IP-адрес получателя — интересуемый адрес. «Нулевой» MAC использован для избежания неправильного маппинга в ARP-таблицах хостов, в случае наличия дубликата адреса в сети. Если ответ не пришел, он отправляет Announcement, объявляя адрес своим.
Наполнение таблицы коммутации
Для успешного процесса коммутации, коммутатору необходимо знать какие сетевые устройства доступны и через который порт. Подобные записи хранятся в так называемой таблице коммутации (MAC address table), где в качестве основных полей выступают MAC адреса устройств и порты, через которые они доступны. В процессе работы коммутатором из заголовка извлекается адрес получателя, проверяется таблица MAC-адресов на предмет совпадения и, как только оно найдено, кадр без изменений отправляется в указанный порт. Если же адрес отсутствует в таблице или кадр пришёл широковещательный, то он направляется на все порты, кроме того, откуда пришёл. Далее, при ответе адресата, его адрес коммутатор добавит в таблицу вместе с портом получения, если таковой записи не было ранее.
Для выполнения работы, соберите сеть как на рисунке ниже:


Для пошагового отслеживания сообщений в сети, в PacketTracer** нужно переключиться из режима RealTime в Simulation ** (в правом нижнем углу окна). В поле фильтров выбрать только ICMP и ARP пакеты. В реальной сети для подобного анализа используется ПО WireShark.
СТОиПИ, практические, лабараторные и итоговый проект / pz 5 / 5.2.1.7 Packet Tracer — Examine the ARP Table Instructions
© Корпорация Cisco и/или её дочерние компании, 2014. Все права защищены.
В данном документе содержится общедоступная информация корпорации Cisco.
Packet Tracer: анализ таблицы АRP
Часть 1. Анализ запроса ARP
Часть 2. Анализ таблицы MAC-адресов коммутатора Часть 3. Анализ процесса ARP в удалённых подключениях
Это задание оптимизировано для просмотра PDU. Устройства уже настроены. Вам необходимо будет в режиме моделирования собрать сведения о PDU, а также ответить на ряд вопросов о собираемых данных.
Часть 1: Анализ запроса ARP
Шаг 1: Создание запросов ARP путём отправки эхо-запросов на адрес 172.16.31.3
a. Щёлкните 172.16.31.2 и откройте окно Command Prompt (Командная строка).
b. Выполните команду arp -d , чтобы очистить таблицу ARP.
c. Перейдите в режим моделирования и выполните команду ping 172.16.31.3 . Будут созданы два пакета PDU. Команда ping не может отправить ICMP-пакет, не зная MAC-адрес назначения. Поэтому компьютер отправляет широковещательный кадр ARP, чтобы найти MAC-адрес назначения.
d. Нажмите кнопку Capture/Forward (Захватить/Переслать) один раз. ARP-пакет PDU перемещается
на коммутатор Switch1 , а ICMP-пакет PDU исчезает, ожидая ARP-ответ. Откройте PDU и запишите MAC-адрес назначения. Этот адрес есть в таблице выше? FFFF.FFFF.
FFFF. 4@5A0 =5B 2 B01;8F5.
e. Нажмите кнопку Capture/Forward (Захватить/Переслать), чтобы переместить PDU на следующее устройство. Сколько копий PDU создал коммутатор Switch1 ? 3
f. Какой IP-адрес имеет устройство, которое приняло PDU? 172.16.31.3
g. Откройте PDU и изучите 2-й уровень. Что произошло с MAC-адресами источника и назначения?
h. Нажимайте кнопку Capture/Forward до тех пор, пока PDU не вернётся на узел 172.16.31.2 . Сколько копий PDU создал коммутатор для ответа на ARP-запрос? 1
Шаг 2: Анализ таблицы ARP.
a. Обратите внимание, что пакет ICMP снова появился. Откройте PDU и взгляните на MAC-адрес. MAC-адреса источника и назначения соответствуют их IP-адресам? !>>B25BA2CNB
b. Вернитесь обратно в режим реального времени, и команда ping завершится.
c. Щёлкните 172.16.31.2 и выполните команду arp -a . Какому IP-адресу соответствует запись MAC-
d. В общем случае, когда оконечное устройство отправляет ARP-запрос?
>340 =5 7=05B <0@H@CB0
© Корпорация Cisco и/или её дочерние компании, 2014. Все права защищены.
В данном документе содержится общедоступная информация корпорации Cisco.
Packet Tracer: анализ таблицы АRP
Часть 2: Анализ таблицы MAC-адресов коммутатора
Шаг 1: Генерация дополнительного трафиком для заполнения таблицы MAC-адресов коммутатора.
a. На узле 172.16.31.2 выполните команду ping 172.16.31.4 .
b. Щёлкните 10.10.10.2 и откройте окно Command Prompt (Командная строка).
c. Введите команду ping 10.10.10.3 . Сколько ответов было отправлено и получено? 4 >B?@02;5=>. 4 ?>;CG5=>.
Шаг 2: Анализ таблицы MAC-адресов на коммутаторах.
a. Щёлкните Switch1 и откройте вкладку CLI . Выполните команду show mac-address-table . Совпадают ли записи с указанными в таблице выше? !>20?040NB
b. Щёлкните Switch0 и откройте вкладку CLI . Выполните команду show mac-address-table .
Совпадают ли записи с указанными в таблице выше? _______
c. Почему два MAC-адреса связаны с одним портом?
Часть 3: Анализ процесса ARP в удалённых подключениях
Шаг 1: Генерирование трафика ARP.
a. Щёлкните 172.16.31.2 и откройте окно Command Prompt (Командная строка).
b. Выполните команду ping 10.10.10.1 .
c. Введите arp –a . Какой IP-адрес имеет новая запись в таблице ARP? 172.16.31.1
d. Выполните команду arp -d , чтобы очистить таблицу ARP и перейти в режим моделирования .
e. Повторите команду ping для адреса 10.10.10.1. Сколько пакетов PDU появилось? 2
f. Нажмите кнопку Capture/Forward . Щёлкните PDU, которые теперь находится на коммутаторе Switch1 . Какой IP-адрес назначения ARP-запроса? 172.16.31.1
g. IP-адрес назначения не 10.10.10.1. Почему?
# Switch1 =5B 2 ARP=B0L;8F5 10.10.10.1
Шаг 2: Анализ таблицы ARP на маршрутизаторе Router1.
a. Переключитесь в режим реального времени . Щёлкните Router1 и откройте вкладку CLI .
b. Введите в привилегированный режим и выполните команду show mac-address-table . Сколько MAC-адресов в таблице? Почему?
8 >4=>3>. > Router1 =5 4>H;8 ?0:5BK, B. @568< Simulation 1K; ?@5@20=
© Корпорация Cisco и/или её дочерние компании, 2014. Все права защищены.
В данном документе содержится общедоступная информация корпорации Cisco.
Packet Tracer: анализ таблицы АRP
c. Выполните команду show arp . Есть ли запись для 172.16.31.2 ? ABL
d. Что происходит с первым успешным эхо-запросом, когда маршрутизатор отвечает на ARP-запрос?
Clearing a Dynamic ARP Entry from a Cisco ARP Table
The ARP table on a Cisco device is a list of learned IP address and what MAC addresses they resolve to, this is required as generally switches work at layer 2 with MAC addresses not IP Address’s.
If you are new to Cisco or just want to improve your skills I recommend this course from Udemy at the time of writing for just $20 for lifetime access! I’m also a really big fan of Pluralsight
Problem:
If you replace a device with another device that is still using the same IP address as the original device but has a different MAC address you find that you are unable to connect to it due to the ARP record on your Cisco device is still pointing to the original devices MAC address.
Example:
I have replaced a failed printer which has the IP 10.24.100.54 and the MAC address 00:80:77:b6:b:207 with a hot spare printer that has been setup to have the same IP 10.24.100.54 however its MAC address is 00:80:77:82:d9:12, the printer is all connected and configured fine however I am unable to ping or print.
Resolution:
1) Get yourself into the enable mode on the Cisco switch the device is connected to.
2) Enter the below command to see the entry in the ARP table for the IP 10.24.100.54.
sh ip arp | include 10.24.100.54
Internet 10.24.100.54 23 0080.77b6.b207 ARPA Vlan124
Notice that the MAC address stored is still the original device
Enter the below command to clear this single dynamic entry
clear ip arp 10.24.100.54
If you attempt to ping you device again you should find everything is fine and if you run the show command again you should see the entry in the ARP table now has the new MAC address
Internet 10.24.100.54 1 0080.7782.d912 ARPA Vlan124
If you are making a lot of changes you could also run the command clear arp-cache to clear the entire table.