ARP Протокол Разрешения Адресов для чайников, как работает

Arp: нюансы работы оборудования cisco и интересные случаи. часть 2

ARP Протокол Разрешения Адресов для чайников, как работает

Привет, Habr! В предыдущей части статьи мы рассмотрели особенности работы ARP на маршрутизаторах Cisco. В данном посте я постараюсь разобраться в работе маршрутизаторов Cisco и межсетевых экранов ASA. В заключение статьи я хочу поделиться несколькими интересными случаями из практики ARP.

N AT и Proxy ARP отображаются на экранах мобильных устройств Cisco ASA.

В чем отличие межсетевого экрана Cisco ASA от маршрутизаторов Telnet? По умолчанию при настройке правил NAT, устройство будет отвечать только по внутренним глобальным адресам. При этом, данное поведение не зависит от внутреннего глобального адреса IP-подсети интерфейса ASA. Данное поведение позволяет настроить опцию sysopt noproxyarp »имя интерфейса“.

Рассмотрим следующие простые примеры, основанные на топологии:

ARP Протокол Разрешения Адресов для чайников, как работает

Настройки интерфейсов Cisco ASA:

interface Vlan1
 nameif inside
 security-level 100
 ip address 192.168.20.1 255.255.255.0
!
interface Vlan2
 nameif outside
 security-level 0
 ip address 198.18.0.1 255.255.255.0

Настройки правила NAT и списка доступа на интерфейсе outside:

object network TEST-PC-tcp3389
 host 192.168.20.5
 nat (inside,outside) static 198.18.99.2 service tcp 3389 3389
access-list acl-outside-in extended permit tcp any object TEST-PC-tcp3389 eq 3389
access-group acl-outside-in in interface outside

Настраиваем порт tcp 3389 (RDP) под адресом 198.18.199.2, который не принадлежит IP-подсети интерфейса Cisco ASA

Проверяем опцию sysopt noproxyarp:

asa# sh run all sysopt 
. . .
no sysopt noproxyarp inside
no sysopt noproxyarp outside

Noproxyarp отключен, поэтому вы можете видеть, что опция не отмечена. Давайте получим доступ к tcp-порту 3389 сервера 198.18.992 и одновременно запустим сниффер:

ARP Протокол Разрешения Адресов для чайников, как работает

На запрос порта ARP отвечает Cisco ASA.

Попробуем выставить опцию sysopt noproxeyarp outside. Вычищаем arc-cache на компьютере, подключенном к outside интерфейсу

ARP Протокол Разрешения Адресов для чайников, как работает

ARP Протокол Разрешения Адресов для чайников, как работает

A RP-запросы к целевому IP больше не получают ответа от ASA. Точный адрес подсети IP интерфейса ASA не имеет значения. Когда выбрана опция noproxyarp, ASA будет отвечать на ARP-запросы, отправленные на IP-адрес интерфейса.

Опция Cisco ASA sysopt noproxyarps не имеет никакого отношения к настройке интерфейса ip proxy-arp маршрутизаторов. Конфигурация Cisco ASA предотвращает прохождение прокси ARP запросов через брандмауэр. Эта опция использует ключевое слово alias для обслуживания внешних общих IP-адресов в таблице ARP ASA.

В некоторых случаях ответы ARP могут потребовать отключения для определенных правил NAT. Ключевой фразой здесь является:

no-proxy-arp

N OT в настройках NAT. Настройка NAT-исключений при использовании VPN на Cisco ASA. Предположим, локальная сеть за Cisco ASA – 192.168.20.0/24 и удалённая сеть Site-toSite VPN — 193.168.10.0/128. NAT-исключение можно настроить следующим образом:

object network local-LAN
 subnet 192.168.20.0 255.255.255.0
object network remote-LAN
 subnet 192.168.30.0 255.255.255.0
nat (any,any) source static local-LAN local-LAN destination static remote-LAN remote-LAN

Отображаемая конфигурация показывает, что каждый интерфейс Cisco ASA (any или ani) публикует всю IP-подсеть локальной сети 192.168.20.0/24 под внутренними адресами той же IP-сети с именами NAT и PNC170xpcardonal LAN. При такой конфигурации любой ARP-запрос с адреса 192.168.20.0/24, поступающий в любую подсеть через внутренние интерфейсы, будет адресован Cisco ASA;

Предположим, что хост с адресом 192.168.206 хочет подключиться к другому хосту с адресом 192.168.206 в той же IP-подсети. Целевой узел и внутренний интерфейс Cisco ASA достигаются широковещательным ARP-запросом к целевому узлу 192.168.206. Cisco ASA отвечает на ARP-запрос своим MAC-адресом благодаря установленному правилу NAT. Весь трафик направляется на Cisco ASA, если его ARP-ответ приходит раньше, чем ответ целевого узла.

Для локальной IP-подсети в вышеупомянутом примере Cisco ASA будет действовать как “черная дыра”, в целом “засасывая” весь трафик. Ситуацию в данном случае не спасает элемент политики NAT (установка nat настроек после назначения статических ключевых слов). Настройка IP localproxy arpy и IP proxy-arp аналогична настройке маршрутизатора. Для предотвращения описанного выше эффекта NAT в Cisco ASA необходимо добавить ключевое слово no-proxy.

nat (any,any) source static local-LAN local-LAN destination static remote-LAN remote-LAN no-proxy-arp

Примечения

Правила NAT и ключевое слово any могут быть указаны в настройках для устранения описанного эффекта. Каково внутреннее/внешнее имя nat?

Итоги

В этом разделе статьи я кратко изложу основные идеи из второй главы:

  1. По умолчанию Cisco ASA отвечает на ARP-запросы на внутренний глобальный IP-адрес правила NAT, независимо от принадлежности интерфейса к IP-подсети. Это поведение контролируется установкой опции sysopt noproxyarp <имя интерфейса>.
  2. Cisco ASA позволяет отключить ARP-ответы для определенных правил NAT с помощью ключевого слова no-proxy-arp. Особенно для правил исключения NAT необходимо отключить ARP-ответ, чтобы избежать проблем с подключением в локальной сети.
  3. Функциональность Proxy ARP не настраивается явно на Cisco ASA, но желаемый эффект может быть достигнут с помощью правил NAT.

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

Cas № 1 вторичный IP-адрес провайдера

Провайдер был подключен к брандмауэру Cisco ASA. Каждая служба была использована должным образом, и соединение было успешным. Однако через некоторое время соединение разорвалось. Тщательный анализ показал, что оно функционирует правильно, если вы запускаете исходящее соединение (трафик идет в обоих направлениях). Одиночные интернет-соединения проявляются только при отключении от Интернета (например, при удаленном подключении к маршрутизатору). Входящие соединения могут функционировать правильно, если есть активные исходящие соединения. Однако через некоторое время попытка удаленного подключения или “пинга” устройства снова становится безуспешной.

Наши наблюдения привели к тому, что мы начали изучать работу ARP. На ASA мы попытались удалить все остатки, запустив debug arp. Отладочные сообщения показали, что ASA правильно отправляет запрос и успешно получает ответ. На этом рисунке IP-адрес нашего ASA – 80. X.14, а его MAC-адрес – a0ec****. IP-шлюз провайдера – 80. X.1, а MAC-шлюз – aa43.

arp-send: arp request built from 80.X.X.4 a0ec.****.**** for 80.X.X.1 at 978772020
arp-refresh: Trying to refresh ARP for outside 80.X.X.1
arp-in: response at outside from 80.X.X.1 aa43.****.**** for 80.X.X.4 a0ec.****.**** having smac aa43.****.**** dmac a0ec.****.****narp-set: added arp outside 80.X.X.1 aa43.****.**** and updating NPs at 978772020
arp-in: resp from 80.X.X.1 for 80.X.X.4 on outside at 978772020

Но через некоторое время мы заметили следующее сообщение в отладке arp на ASA:

arp-in: request at outside from 195.Y.Y.1 aa43.****.**** for 80.X.X.4 0000.0000.0000 having smac aa43.****.**** dmac ffff.ffff.ffffnarp-in: Arp packet received from 195.Y.Y.1 which is in different subnet than the connected interface 80.X.X.4/255.255.255.0

Это сообщение информирует ASA о MAC-адресе отправителя, который равен aa43. **** Неверный IP-адрес отправителя – 195.3. Некорректный ARP-запрос отклоняется ASA, и в ответ он получает только отказ.

Таким образом, когда существует исходящий трафик, ASA отправляет ARP-запрос (при необходимости, когда соответствующая запись в ARP-таблице ASA требуется обновления) в сторону провайдера и получает ARP-ответ. Благодаря ARP-запросу от ASA оборудование провайдера также получает запись об ASA в своей ARP-таблице. Однако, когда исходящий трафик от ASA отсутствует продолжительное время и ASA не отправляет ARP-запрос, на оборудовании провайдера в ARP-таблице запись об ASA истекает. Оборудование провайдера пробует обновить запись, отправляя ARP-запрос, но ответ не получает. Отсюда и появляются «плавающие» проблемы со связью.

Необходимо было определить, почему оборудование провайдера передавало запрос с неправильным IP-адресом отправителя. После этого провайдер проверил сообщения ASA debounce:

324: 22:03:41.056546       802.1Q vlan#2 P0 arp who-has 80.X.X.4 tell 195.Y.Y.1
325: 22:03:41.937329       802.1Q vlan#2 P0 arp who-has 80.X.X.4 tell 195.Y.Y.1
326: 22:03:42.822909       802.1Q vlan#2 P0 arp who-has 80.X.X.4 tell 195.Y.Y.1

Оказалось, что на интерфейсе провайдера адрес 195.Y.Y.1 был настроен как основной, а IP-адрес 80.X.X.4, который являлся для нас шлюзом по умолчанию, был настроен как secondary. Эта настройка полностью объясняла ситуацию. В данном случае проблема была решена добавлением статической ARP-записи на оборудовании провайдера.

Абсолютно аналогичная ситуация у нас возникала на другой площадке, когда мы использовали для подключения к провайдеру маршрутизатор Cisco. На оборудовании провайдера наш шлюз был также настроен как seconday IP-адрес. В этом случае, чтобы ускорить процесс решения проблемы, мы добавили на маршрутизаторе secondary IP-адрес из той же подсети, что и основной IP-адрес на интерфейсе провайдера. После этого наш маршрутизатор стал успешно отвечать на ARP-запросы со стороны провайдера, так как на нашем интерфейсе появился IP-адрес из той же подсети, что и адрес в ARP-запросе.

Случай No2. ARP-совместимость

Перед нами была поставлена задача установить брандмауэр Cisko ASA вместо маршрутизатора Cisco ISR в одном из наших офисов. Во время установки брандмауэр ASA был настроен и отправлен в точку назначения. После подключения к провайдеру Cisco ASA удаленное подключение оказалось невозможным. Поначалу казалось, что устройство работает нормально. MAC-адрес маршрутизатора провайдера был успешно идентифицирован брандмауэром ASA с помощью обычного метода ARP-запроса/ARP-ответа. Внешний интерфейс устройства отправлял пакеты в Интернет. Встроенные средства захвата пакетов смогли исправить этот факт.

Пакеты от ASA были успешно доставлены на оборудование оператора, это выяснилось после обращения к провайдеру. Затем маршрутизатор был переподключен, и трафик начал беспрепятственно проходить в обоих направлениях. Это указывало на проблему между брандмауэром ASA и провайдером. После повторного контакта с провайдером и подробного описания проблемы было обнаружено, что оборудование абонента не видит MAC-адрес брандмауэра ASA. Подготовка демонстрации включала рассмотрение маршрутизатора Cisco. По какой-то причине, получив ответ от ASA, устройство провайдера не добавило запись об ASA в ARP-таблицу. Тот факт, что ARP-запрос Cisco ASA не был отклонен, является наиболее интригующим. Несмотря на то, что все было совершенно правильно, оборудование ISP не ответило на ARP-запрос ASA.

У провайдера была запрошена привязка статических данных к ARP-таблице. Провайдер обнаружил проблему совместимости брандмауэра с оборудованием Cisco ASA. К сожалению, провайдер не упомянул, кто производит его оборудование.

Случай №3. Gratuitous ARP

Мы восстанавливаем связь с поставщиком Cisco ASA. Вместо сервера MSTMG на этот раз используется сервер Microsoft. В данном случае для соединения MSTMG с устройством провайдера использовался L2-коммутатор. L2-коммутатор должен был использоваться для подключения к ASA.

Итак, отключаем MSTMG и вместо него в порт L2-коммутатора подключаем Cisco ASA. Мы видим стандартную ситуацию: с внешнего порта Cisco ASA трафик уходит, но ответных пакетов нет. После обращения к провайдеру выясняется, что оборудование MSTMG не видит MAC-адрес сервера в Cisco ASA.

Дальнейшее разбирательство показало, что межсетевой экран Cisco ASA не шлёт Gratuitous ARP сообщение при переходе интерфейса из состояния DOWN в состояние UP. А так как оборудование провайдера подключено через L2-коммутатор, при смене устройства на нашей стороне канал до провайдера не падает, и интерфейс маршрутизатора провайдера всегда остаётся во включенном состоянии. Единственный способ своевременно оповестить провайдера о том, что на нашей стороне изменилось устройство и MAC-адрес, – Gratuitous ARP. В противном случае, придётся ждать таймаута ARP-записи у провайдера, а это как, как правило, 4 часа.
В данном случае мы сделали на интерфейсе Cisco ASA команды no ip address, ip address x.x.x.x y.y.y.y. После этого ASA всё же отправила Gratuitous ARP, и всё взлетело.

Заключение

В данной статье, состоящей из двух частей (по одной части) я попытался рассмотреть тонкости работы ARP на оборудовании Cisco в случаях использования трансляции сетевых адресов и Proxy. Разбирал отличия между маршрутизаторами Cisco и межсетевыми экранными устройствами. В заключении статьи я рассмотрел проблемы, возникающие при подключении к Интернет-провайдеру из за работы ARP.

Практика показывает, насколько важно выполнять проверку ARP при анализе сетевых проблем. Я надеюсь, что эта статья даст вам более глубокое понимание ARP.

Мне интересно услышать ваши мысли. Возможно, кто-то сможет поделиться своими собственными забавными случаями с ARP.

Arp-запрос

Протокол ARP позволяет автоматически определять MAC-адрес компьютера по его IP-адресу. Режим ответа – это способ работы протокола “запрос-ответ”.

Компьютер, который хочет узнать МАК-адрес по известному IP адресу (UPDN), направляет ARPI запрос “У кого IP 192.168.10.43?” Запрос отправляется на широковещательный МАК-адрес (FF:FF: FF):

И вся сеть получает этот запрос. устройство, которое подтвердило свой собственный IP-адрес в запросе и ответило ARP. MAC – это адрес, который оно получает в обмен от компьютера для отправки ответа на серверы PINGS (MAC: 54:107:0);

Отправитель ARP запроса получает ответ, извлекает из него МАК-адрес и использует его для передачи данных по технологии канального уровня.

Arp-таблица

После того, как МАК-адрес найден и кэширован на компьютеры отправителя в ARP –таблице для предотвращения запрашивать адрес каждый раз по протоколу ARP.

Три поля составляют таблицу ARP: IP-адрес, MAC-адрес и тип записи в таблице. Существует два типа записей: статические записи, которые вводятся вручную, и динамические записи, которые являются результатом действий протокола ARP. Чтобы отслеживать изменения IP-адреса компьютера, динамические записи должны иметь время жизни после удаления.

Команда arp -a может быть использована для просмотра таблицы ARP.

Добровольный arp-запрос (gratuitous arp)

Это служит двум целям и представляет собой ARP-запрос для вашего собственного IP-адреса. Первоначальной целью является быстрое информирование всех подключенных компьютеров о новом IP-адресе компьютера.

Другая цель – проверка использования данного ip-адреса другим компьютером. Если на добровольный ARP запрос пришел ответ, это значит что какой-то компьютер в сети уже использует этот адрес и назначать его никому нельзя.

Место в модели osi

A RP находится между канальным и сетевым уровнями в модели открытых систем OSI. Без использования IP пакеты ARP вставляются прямо в кадры Ethernet.

A RP находится ниже сетевого уровня. В ARP можно узнать только МАК-адреса компьютеров, которые находятся в одной подсети отделенные маршрутизатором.

Что вызывает такую ситуацию? Все компьютеры, подключенные к сети, получают ARP-запрос, отправленный на широковещательный адрес, но широковещательный запрос не проходит через маршрутизатор.

Нет ответа arp от шлюза

Я разрабатываю встроенную систему, которая должна взаимодействовать с внешним миром через Ethernet 10Base-T. Я создал все функции, необходимые для обслуживания веб-страниц, включая ARP, IP, TCP, ICMP (ping), HTTP и части FTP. Теперь мне нужно собрать остальной код, который позволит мне действовать как клиент. Все вышеперечисленные протоколы хорошо работают с серверной точки зрения уже несколько месяцев.

Для того чтобы запрашивать данные из других серверных сетей, я должен создать клиентскую половину этих протоколов. ARP для получения аппаратного адреса удаленного сервера – это первый шаг. Чтобы иметь возможность видеть весь трафик из этой сети или из других сетей, мне нужно ответить своим MAC-адресом, если сервер находится в другой сети и пакеты приходят с этого IP-адреса (на мой шлюз). Проблема заключается в следующем:

Мой шлюз (192.168.1.251) не получает ответа на ARP от моего устройства (в маске подсети 255.266,225) или любой машины вне сети Но мое устройство (X.251) получает ответ ARP от моего ноутбука (192.168.1.100), который находится под тем же маршрутизатором, что и мой компьютер (216.2.170.15).

Поскольку я уверен в точности своей фундаментальной структуры кадра Ethernet ARP, я последовательно отвечаю на запросы AP. Поле OPERATION, которое равно 1 или 2 в зависимости от других параметров, делает разницу.


Вот мой запрос (192.168.1.251) к шлюзу (203.161.2), который не получил ответа:

F F FF FF FF FF FF <- MAC назначения - широковещательный (также пробовал 0x00)

M AC-адрес источника моего устройства – 00 04 A3 7F C1 57.

08 06 <- ARP

00 01 <- Ethernet

08 00 <- IP

06 <- 6-байтовые MAC-адреса

04 <- 4 байтовые IP-адреса

00 01 <- запрос (2 = ответ).

00 04 A3 7F C1 57 <- MAC отправителя - шахта

C0 A8 01 FB <- IP отправителя - мой = 192.168.1.251

00 00 00 00 00 00 <- целевой MAC - неизвестен, причина запроса.

C0 A8 01 01 <- целевой IP - шлюз = 192.168.1.1

00 00 00 00 . 00 00 00 <- трейлер 18 комплектов 00 для набивки.


Теперь мой запрос (192.168.1.251) совпадает с запросом моего ноутбука (9.160.01.002), и он получает правильный ответ:

M AC назначения – широковещательный (также пробовали 0x00): FF FF FF FF FF FF FF FF FF FF FF FF

M AC-адрес источника моего устройства – 00 04 A3 7F C1 57.

08 06 <- ARP

00 01 <- Ethernet

08 00 <- IP

06 <- 6-байтовые MAC-адреса

04 <- 4 байтовые IP-адреса

00 01 <- запрос (2 = ответ).

00 04 A3 7F C1 57 <- MAC отправителя - шахта

C0 A8 01 FB <- IP отправителя - мой = 192.168.1.251

00 00 00 00 00 00 <- целевой MAC - неизвестен, причина запроса.

C0 A8 01 64 <- целевой IP - ноутбук = 192.168.1.100

00 00 00 00 . 00 00 00 <- трейлер 18 комплектов 00 для набивки.


Примечания, которые могут быть или не быть существенными

  • И мое устройство, и мой шлюз указаны в таблице ARP на моем ноутбуке.
  • На моем ноутбуке установлена Win7.
  • Мой шлюз – это широкополосный маршрутизатор Linksys WRT54GL Wireless-G.
  • Я проанализировал пакеты через Wireshark, чтобы получить вышеуказанные результаты.
  • Мой блок DHCP идет от X.100 до X.149, поэтому мой портативный маршрутизатор назначает X.100.
  • IP-адрес X.251 моего устройства подключен к нему. Я не вижу никакого способа установить соединение между этим IP-адресом и MAC-адресом моего устройства в приложении конфигурации маршрутизатора. Все остальные функции, похоже, работают с моим устройством в качестве сервера, поэтому я думаю, что это не проблема.
  • Я попробовал отправить ARP-запрос на удаленные серверы (google = 173.194.43.33) как непосредственно на IP-адрес сервера, так и на IP-адрес моего шлюза (в надежде, что он поймет, что мне нужен прокси).
  • Я попробовал удариться головой о стол, что, к сожалению, помогло ненадолго.

Оптимизация arp

A RP запрос отправляется на широковещательный адрес и его получают все компьютеры в сети, кроме мак-адресов для получения мак-адреса. Отправитель также включает свои ip-адрес и свой мак адрес, эти данные могут быть записаны всеми компьютерами в сети.

Таблица соответствия arp

Таблица соответствия является самым базовым инструментом. Мы составляем таблицу и вносим в нее IP-адрес вместе с соответствующим MAC-адресом.

На самом деле, это работает; например, в Linux у меня есть подобная таблица, сохраненная в файле /etc/ethers. Однако в большой сети она не работает.

Формат arp-запроса

A RP был создан как протокол общего назначения, который можно было использовать не только для IP-адресов и Ethernet. Пакет ARP начинается с инструкции, позволяющей указать тип сетевого оборудования и протоколы семантического уровня.

  • Первое поле “тип сети” указывает на тип оборудования, которое мы используем в сети, 1 – соответствует Ethernet.
  • Во втором поле “тип протокола” указывается протокол сетевого уровня 2048, то есть IP.
  • Затем следует “длина локального адреса”, в нашем случае MAC-адрес из 6 байт, “длина глобального адреса, в нашем случае IP-адрес”. 4 байта.
  • Следующее поле – код операции, 1 соответствует ARP-запросу, а 2 – ARP-ответу.
  • Далее следует полезная информация о локальном (1C:75:08:D2:49:45) и глобальном (192.168.10.15) адресах. MAC-адрес и IP-адрес отправителя указываются для того, чтобы получатель знал, кому отправлять ответ.
  • Глобальный адрес назначения (192.168.10.43).
  • Локальный адрес получателя неизвестен (00:00:00).

Формат arp-ответа

Формат ARP ответа в принципе такой же, только адрес отправителя указан на поле “операция”.

Выводы по протоколу arp

A RP — протокол разрешения адресов, который позволяет по IP-адресу определить MAC номер компьютера в сети. ARP работает в режиме запрос-ответ. Запрос отправляется на широковещательный адрес и его получают все компьютеры сети, а ответ дает тот человек который узнал свой IP–адрес; ARP-таблицы записывают результаты запросов для повышения производительности.

:/>  Как правильно установить рыболовную сеть на озере

Оставьте комментарий

Adblock
detector