Протокол arp

Структура пакета

Ниже проиллюстрирована структура пакета, используемого в запросах и ответах ARP. В сетях Ethernet в этих пакетах используется EtherType 0x0806, и запросы рассылаются на широковещательный MAC-адрес — FF:FF:FF:FF:FF:FF.
Отметим, что в структуре пакета, показанной ниже, в качестве SHA, SPA, THA и TPA условно используются 32-битные слова — реальная длина определяется физическим устройством и протоколом.

+ Bits 0 — 7 8 — 15 16 — 31
Hardware type (HTYPE) Protocol type (PTYPE)
32 Hardware length (HLEN) Protocol length (PLEN) Operation (OPER)
64 Sender hardware address (SHA)
? Sender protocol address (SPA)
? Target hardware address (THA)
? Target protocol address (TPA)
Hardware type (HTYPE)
Каждый канальный протокол передачи данных имеет свой номер, который хранится в этом поле. Например, Ethernet имеет номер 0x0001.
Protocol type (PTYPE)
Код сетевого протокола. Например, для IPv4 будет записано 0x0800.
Hardware length (HLEN)
Длина физического адреса в байтах. Адреса Ethernet имеют длину 6 байт (0x06).
Protocol length (PLEN)
Длина логического адреса в байтах. IPv4 адреса имеют длину 4 байта (0x04).
Operation
Код операции отправителя: 0x0001 в случае запроса и 0x0002 в случае ответа.
Sender hardware address (SHA)
Физический адрес отправителя.
Sender protocol address (SPA)
Логический адрес отправителя.
Target hardware address (THA)
Физический адрес получателя. Не требуется при запросе.
Target protocol address (TPA)
Логический адрес получателя.

Пример запроса

Если хост с IPv4 адресом 10.10.10.123 и MAC адресом 00:0D:9D:86:59:E2 хочет послать пакет другому хосту с адресом 10.10.10.140, но не знает его MAC адрес, то он должен послать ARP запрос для разрешения адреса.

Пакет, изображённый ниже, изображает широковещательный запрос.
Если хост с IP 10.10.10.140 присутствует в сети и доступен, то он получает этот запрос ARP и возвращает ответ.

Bits 0 — 7 8 — 15 16 — 31
Hardware type = 0x0001 Protocol type = 0x0800
32 Hardware length = 0x06 Protocol length = 0x04 Operation = 0x0001
64 SHA (first 32 bits) = 0x000D9D86
96 SHA (last 16 bits) = 0x59E2 SPA (first 16 bits) = 0x0A0A
128 SPA (last 16 bits) = 0x0A7B THA (first 16 bits) = 0x0000
160 THA (last 32 bits) = 0x00000000
192 TPA = 0x0A0A0A8C

Пример ответа

В ситуации, описанной выше, если узел с адресом 10.10.10.140 имеет MAC-адрес 00:09:58:D8:33:AA, то он отправит в ответ пакет, проиллюстрированный ниже. Заметим, что блоки адресов отправителя и получателя теперь поменяли значения (отправитель ответа теперь получатель запроса; получатель ответа — отправитель запроса). Кроме того, в ответе есть MAC-адрес узла 10.10.10.140 в поле физического адреса отправителя (SHA), а поле THA не пустое (одноадресный ответ).

Любой узел в той же сети, что и отправитель с получателем, тоже получит запрос (так как он широковещательный) и таким образом добавит в свой кэш информацию об отправителе. Ответ ARP направлен только источнику запроса ARP, поэтому ответ ARP не доступен другим узлам в сети.

+ Bits 0 — 7 8 — 15 16 — 31
Hardware type = 0x0001 Protocol type = 0x0800
32 Hardware length = 0x06 Protocol length = 0x04 Operation = 0x0002
64 SHA (first 32 bits) = 0x000958D8
96 SHA (last 16 bits) = 0x33AA SPA (first 16 bits) = 0x0A0A
128 SPA (last 16 bits) = 0x0A8C THA (first 16 bits) = 0x000D
160 THA (last 32 bits) = 0x9D8659E2
192 TPA = 0x0A0A0A7B

Замечание. Длина полей SHA, SPA, THA, TPA зависит от параметров Hardware length и Protocol length соответственно.

Механизм в деталях

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

  • Данные адреса всегда доступны и не обязательно связаны с кодом начальной загрузки.
  • Поскольку идентификационная информация зависит от сети, а не от ЦП, все машины в данной сети будут предоставлять уникальные идентификаторы.

Как и сообщение протокола ARP, запрос RARP отправляется с одного компьютера на другой, инкапсулированный в части данных сетевого кадра. Рамка Ethernet, содержащая его, имеет обычную преамбулу, Ethernet-источник и адреса назначения, а также поля типа пакета перед кадром. Кадр кодирует значение 8035, чтобы идентифицировать его содержимое как сообщение RARP. Часть данных кадра включает в себя 28-октетное сообщение.

Отправитель отправляет запрос RARP, который указывает себя как инициатор запроса и целевую машину, и передает свой физический сетевой адрес в поле целевого аппаратного адреса. Все устройства в сети получают запрос, но только те из них, кто уполномочен предоставлять RARP, обрабатывают запрос и отправляют ответ. Такие машины известны неофициально как серверы данного протокола. Для успешной реализации протоколов ARP/RARP сеть должна содержать как минимум один такой сервер.

Они отвечают на запрос, заполняя поле адреса целевого протокола, изменяя тип сообщения от запроса до ответа и отправляя ответ прямо на машину, отправляющую запрос.

Адресация

IPv4 идентифицирует отправителя и получателя при помощи 32-битного адреса, что ограничивает число возможных адресов 4 294 967 296. Из этого количества IPv4 резервирует специальные диапазоны адресов, называемые частными (~18 млн.) и мультикаст (~270 млн).

Адреса обычно записываются в виде четырех десятичных октетов через точку, например: 198.51.100.25 соответствует числу C633641916.

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

В первых версиях стандарта, первый октет использовался для идентификации сети, остальные – для идентификации узла. Довольно быстро стало ясно, что 256 сетей – это мало. Поэтому были введены классы сетей:

Класс Первые биты Длина адреса сети Длина адреса узла
A 8 24
B 10 16 16
C 110 24 8
D 1110 N/A N/A
E 1111 N/A N/A
Класс Начало диапазона Конец диапазона
A 0.0.0.0 127.255.255.255
B 128.0.0.0 191.255.255.255
C 192.0.0.0 223.255.255.255
D 224.0.0.0 239.255.255.255
E 240.0.0.0 255.255.255.255

Класс D зарезервирован для мультикаста, класс E – просто зарезервирован “на всякий случай”.

Длина адреса сети и длина адреса узла определялись первыми битами адреса. Примерно с 1985 года от этого тоже отказались. Причины этого в том, что многие организации требовали больше адресов, чем предоставляла сеть класса C и получали сеть класса B. Сеть класса B, однако, превышала требования организации в разы.

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

Например, 192.0.2.0/24 означает, что первые 24 бита (три октета) относятся к адресу сети, а остальные – к адресу узла. /24 эквивалентно маске сети 255.255.255.0.

Использование масок сетей описано в RFC 1517.

Многочисленные стандарты так же резервируют различные диапазоны адресов для специальных нужд.

Диапазон Описание RFC
0.0.0.0/8 Текущая сеть (адрес источника) 6890
10.0.0.0/8 Частная сеть 1918
100.64.0.0/10 Разделяемое адресное пространство CGN 6598
127.0.0.0/8 Loopback 6890
169.254.0.0/16 Автоконфигурация 3927
172.16.0.0/12 Частная сеть 1918
192.0.0.0/24 IETF Protocol Assignments 6890
192.0.2.0/24 Документация и примеры 1 5737
192.88.99.0/24 Релей ipv6 to ipv4 3068
192.168.0.0/16 Частная сеть 1918
198.18.0.0/15 Тестирование пропускной способности сети 2544
198.51.100.0/24 Документация и примеры 2 5737
203.0.113.0/24 Документация и примеры 3 5737
224.0.0.0/4 Мультикаст 5771
240.0.0.0/4 Зарезервировано 1700
255.255.255.255 Широковещательный запрос 919

Так же резервируются адреса узлов, в двоичном представлении состоящий из нулей (обозначает всю сеть, зарезервирован) и единиц (широковещательный запрос для данной сети).

Например, 203.0.113.0 означает (в тексте) сеть 203.0.113.0/24, а 203.0.113.255 – широковещательный запрос в эту сеть.

5.2. Настройка функции предотвращения ARP Spoofing

  1. Отключить автоматическое обновления ARP;

  2. Отключить автоматическое обучение ARP;

  3. Конвертировать динамические ARP в статические;

  4. Настроить защищенный IP-адрес для arp-guard;

  5. Настроить Gratuitous ARP;

  6. Просмотреть конфигурацию Gratuitous ARP.

  1. Отключить автоматическое обновления ARP:

Команда

Описание

ip arp-security updateprotect

no ip arp-security updateprotect

!  В режиме глобальной конфигурации и в режиме конфигурирования интерфейса

Выключить автоматическое обновление ARP

Включить автоматическое обновление ARP

2. Отключить автоматическое обучение ARP:

Команда

Описание

ip arp-security learnprotect

no ip arp-security learnprotect

!  В режиме глобальной конфигурации и в режиме конфигурирования интерфейса

Выключить автоматическое обучение ARP

Включить автоматическое обучение ARP

3. Конвертировать динамические ARP в статические:

Команда

Описание

ip arp-security convert

!  В режиме глобальной конфигурации и в режиме конфигурирования интерфейса

Конвертировать динамические ARP в статические ARP

4. Настроить защищенный IP-адрес для arp-guard

Команда

Описание

arp-guard ip <addr>

no arp-guard ip <addr>

!  В режиме конфигурирования интерфейса

Добавить ARP Guard адрес

Удалить ARP Guard адрес

5. Настроить Gratuitous ARP.

Команда

Описание

ip gratuituous-arp <5-200>

no ip gratuituous-arp

!  В режиме глобальной конфигурации или в режиме конфигурирования интерфейса

Включить функцию gratuitious ARP и задать интервал отправки сообщений ARP <5-200> в секундах.

Отключить функцию gratuitious ARP

6. Просмотреть конфигурацию Gratuitous ARP.

Команда

Описание

show ip gratuituous-arp

no show ip gratuituous-arp

!  В привилегированном режиме

Добавить ARP-Guard адрес

Удалить ARP-Guard адрес

Примечания

• IP-адреса для Inetaddr и ifaceaddr являются десятичными представлениями с точками.
• Физический адрес для Etheraddr состоит из шести байтов, выраженных шестнадцатеричным представлением и разделённых дефисами (например, 00-AA-00-4F-2A-9C).
• Вводимые данные, добавляемые с параметром /s,являются статическими и не убираются из кэша ARP по тайм-ауту. Вводимые данные удаляются только в случае остановки или запуска протокола TCP/IP. Чтобы создать постоянные данные кэша ARP, следует поместить соответствующие команды arp в командный файл и воспользоваться запланированными заданиями (Scheduled Tasks), чтобы командный файл активировался при запуске системы.

5.1. Общие сведения о ARP Spoofing

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

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

5.1.1. Отключение обновления без запроса (arp-security)

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

5.1.2. ARP Guard

Существует также вероятность подмены злоумышленником адреса шлюза или коммутатора — в этом случае кроме перехвата трафика данных, существует также опасность отказа всей сети из-за передачи трафика не по назначению. Для предотвращения подмены адреса шлюза, возможно использовать функцию ARP Guard. При получении на порт ARP-ответа с source адресом, указанным в ARP-Guard, это пакет будет расценен как вредоносный и отброшен.

5.1.3. Рассылка ARP коммутатором без запроса (Gratuitous ARP)

Еще одним из способов предотвращения подмены ARP коммутатора (или шлюза) является периодическая рассылка коммутатором ARP-ответов без запроса (функция Gratuitous ARP). С одной стороны это позволяет предотвратить акату, так как хосты периодически будут обновлять свои ARP-таблицы и вероятность подмены будет низка. С другой стороны это позволит уменьшить количество исходящего трафика от хостов, так как не будет необходимости отправлять ARP-запрос шлюзу для обновления ARP-таблицы.

Что такое и как работает Gratuitous ARP

Это страшное слово переводится как “самопроизвольный” ARP. Суть события в следующем. Любой узел, который инициирует новый интерфейс, на котором есть поддержка ARP, должен при завершении процесса конфигурирования IP-адреса (статически ли, по DHCP, через APIPA’у – без разницы) уведомить соседей о том, что он появился. Делается это при помощи отправки одиночного ARP Reply, в котором указывается, что логично, связка “мой MAC – мой новый IP”. Т.е. выглядит этот ARP-ответ несколько странно с точки зрения классической схемы работы ARP – узел рассылает на броадкастовый MAC и свой IP информацию о своём настоящем MAC и своём же IP. Т.е. совпадают SRC IP и DST IP.

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

Но, в общем-то, мы и договорились, что это – исключительная и разовая ситуация. Казалось бы, в чём проблема-то?

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

Соответственно, в ряде ситуаций (например, много клиентов, краткие сессии) такой механизм надо отключать. Зачастую проще привязать статически целую пачку ARP-соответствий (например, когда на сервере удалённого доступа выделен пул в 20 адресов, и абоненты подключаются, делают какую-то краткую операцию и отключаются), чем постоянно форвардить в сеть эти ARP Reply.

Примечание: На самом деле, делать это надо с умом, как и всё остальное. Есть ситуации, когда gratuitous ARP является штатным и нужным. Например, у Вас сделан HSRP-балансировщик. Активный узел упал – второй становится активным. И в этот момент он тоже “просто так, внезапно” отправит gratuitous ARP – чтобы сразу уведомить всю сеть, что теперь у виртуального IP новый MAC, а не ждать, пока у всех узлов кончится тайм-аут кэша.

Как настроить Gratuitous ARP на оборудовании Cisco

Включить:

router(config)#ip gratuitous-arps

Если добавить в конце команды слово non-local, то будет обрабатываться вышеописанная ситуация с PPP.

Отключить приём всех gratuitous ARP’ов:

router(config)#ip arp gratuitous none

Включить приём только gratuitous ARP’ов, source которых из connected-сетей:

router(config)#ip arp gratuitous local

Как настроить Gratuitous ARP на Windows Server

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

Управлять же Gratuitous ARP со стороны узла вполне можно. Для этого есть ключ реестра:

HKLM\System\CurrentControlSet\Services\TcpIp\Parameters

а в нём – параметр ArpRetryCount типа DWORD32. Если поставить этот параметр в нуль, то механизм будет выключен. По умолчанию Windows-хосты делают Gratuitous ARP три раза – сразу после инициализации адреса, потом через 1/2 секунды, потом через ещё 1/10 секунды. Можете поставить единицу, если уверены в качестве работы сети и её не-критичной загруженности на момент выхода ARP Reply – “сэкономите трафик”.

Примечание: Считаются фактически отправленные ARP, а не попытки. Т.е. если среда была недоступна, то все равно отправят три, просто чуть позже.

Примечание: Если поставить нуль, то вдобавок отвалится функция обнаружения конфликтов DHCP, но это будет в другой истории.

Examples

  • The networking stack in many operating systems will issue a gratuitous ARP if the IP or MAC address of a network interface changes, to inform other machines on the network of the change so they can report IP address conflicts, to let other machines update their ARP tables, and to inform switches of the MAC address of the machine. The networking stack in many operating systems will also issue a gratuitous ARP on an interface every time the link to that interface has been brought to the up state. The gratuitous ARP then is used to preload the ARP table on all local hosts of the possibly new mapping between MAC and IP address (for failover clusters that do not take over the MAC address) or to let the switch relearn behind which port a certain MAC address resides (for failover clusters where you do pull the MAC address over as well or when you simply just move the network cable from one port to another on a normal nonclustered host)
  • The High-Availability Linux Project utilizes a command-line tool called send_arp to perform the gratuitous ARP needed in their failover process. A typical clustering scenario might play out like the following:

    • Two nodes in a cluster are configured to share a common IP address 192.168.1.1. Node A has a hardware address of 01:01:01:01:01:01 and node B has a hardware address of 02:02:02:02:02:02.

    • Assume that node A currently has IP address 192.168.1.1 already configured on its NIC. At this point, neighboring devices know to contact 192.168.1.1 using the MAC 01:01:01:01:01:01.

    • Using the heartbeat protocol, node B determines that node A has died.
    • Node B configures a secondary IP on an interface with ifconfig eth0:1 192.168.1.1.

    • Node B issues a gratuitous ARP with send_arp eth0 192.168.1.1 02:02:02:02:02:02 192.168.1.255. All devices receiving this ARP update their table to point to 02:02:02:02:02:02 for the IP address 192.168.1.1.

СинтаксисSyntax

ПараметрыParameters

ПараметрParameter ОписаниеDescription
Отображает текущие таблицы кэша ARP для всех интерфейсов.Displays current arp cache tables for all interfaces. Параметр /n учитывает регистр.The /n parameter is case-sensitive. Чтобы отобразить запись кэша ARP для определенного IP-адреса, используйте ARP/a с параметром инетаддр , где инетаддр — это IP-адрес.To display the arp cache entry for a specific IP address, use arp /a with the inetaddr parameter, where inetaddr is an IP address. Если инетаддр не указан, используется первый подходящий интерфейс.If inetaddr is not specified, the first applicable interface is used. Чтобы отобразить таблицу кэша ARP для определенного интерфейса, используйте параметр /n ифацеаддр в сочетании с параметром /a , где инетаддр — это IP-адрес, назначенный интерфейсу.To display the arp cache table for a specific interface, use the /n ifaceaddr parameter in conjunction with the /a parameter where inetaddr is the IP address assigned to the interface.
Идентично /a.Identical to /a.
Удаляет запись с указанным IP-адресом, где инетаддр — это IP-адрес.Deletes an entry with a specific IP address, where inetaddr is the IP address. Чтобы удалить запись в таблице для определенного интерфейса, используйте параметр ифацеаддр , где ифацеаддр — это IP-адрес, назначенный интерфейсу.To delete an entry in a table for a specific interface, use the ifaceaddr parameter where ifaceaddr is the IP address assigned to the interface. Чтобы удалить все записи, используйте подстановочный знак звездочки (*) вместо инетаддр.To delete all entries, use the asterisk (*) wildcard character in place of inetaddr.
Добавляет статическую запись в кэш ARP, которая разрешает IP-адрес инетаддр с физическим адресом есераддр.Adds a static entry to the arp cache that resolves the IP address inetaddr to the physical address etheraddr. Чтобы добавить статическую запись кэша ARP в таблицу для определенного интерфейса, используйте параметр ифацеаддр , где ифацеаддр — это IP-адрес, назначенный интерфейсу.To add a static arp cache entry to the table for a specific interface, use the ifaceaddr parameter where ifaceaddr is an IP address assigned to the interface.
/?/? Отображение справки в командной строке.Displays help at the command prompt.

ПримечанияRemarks

  • IP-адреса для инетаддр и ифацеаддр выражаются в десятичной нотации.The IP addresses for inetaddr and ifaceaddr are expressed in dotted decimal notation.

  • Физический адрес для есераддр состоит из шести байт, выраженных в шестнадцатеричной нотации и разделенных дефисами (например, 00-AA-00-4F-2A-9C).The physical address for etheraddr consists of six bytes expressed in hexadecimal notation and separated by hyphens (for example, 00-AA-00-4F-2A-9C).

  • Записи, добавленные с параметром /s , являются статическими и не выходят за пределы времени ожидания кэша ARP.Entries added with the /s parameter are static and do not time out of the arp cache. Записи удаляются, если протокол TCP/IP остановлен и запущен.The entries are removed if the TCP/IP protocol is stopped and started. Чтобы создать постоянные статические записи кэша ARP, поместите соответствующие команды ARP в пакетный файл и используйте запланированные задания для запуска пакетного файла при запуске.To create permanent static arp cache entries, place the appropriate arp commands in a batch file and use Scheduled Tasks to run the batch file at startup.

Windows ПК как генератор ARP флуда +13

  • 06.07.16 11:15


Yoda33

#304868

Хабрахабр

15800

Информационная безопасность, Сетевые технологии

Доброго дня, %username%!
Хочу поведать поучительную историю, которая случилась сегодня у меня на работе. Работаю я в одной очень известной компании предоставляющей, в числе прочих, услуги доступа ко всемирной паутине. И суть моей работы заключается в поддержании нормальной работы сети передачи данных. Сеть эта построена по классической структуре Ядро, Агрегация, Доступ. Коммутаторы доступа приблизительно на половину производства D-Link, вторая (большая) часть от Huawei. Управление всем сетевым железом вынесено в отдельный вилан, через него же оно всё и мониторится.
И вот сегодня поутру стало твориться нечто неладное. Система управления и мониторинга железа стала выкидывать «портянки» событий «коммутатор *** офлайн»-«коммутатор *** онлайн». Причём сообщения эти приходили по сегментам сети, в которых установлены были коммутаторы производства Huawei. Беглый просмотр состояния шторм-контроля и загруженности интерфейсов на агрегации ничего не дал, ничего не сказали и логи. День обещал быть весёлым…
Звонок от службы мониторинга сети не добавил радости — завели инцидент по выпадению домовых узлов. При этом массовых жалоб от клиентов об ограничениях в получении услуги не поступало. Удалось даже найти клиента в проблемном сегменте, который отвечал на ICMP обнадёживающими 0,8-ю милисекундами. Попытки зайти на какой-либо коммутатор по телнету были сродни пытке: коннект либо отваливался по тайм-ауту, либо приходилось минутами ждать реакции на ввод логина/пароля и на команды. Отчаявшись посмотреть лог «полуживого» коммутатора я, для очистки совести, помучившись изрядно, перезагрузил его. Секунд 10 после старта коммутатор был жив, бодренько отвечая на ICMP запросы, но тут же «пинги» на глазах стали принимать совершенно неприличные значения в 800-1000 мс, а потом и вовсе пропали.
Тут до меня стало доходить, что процессоры, отнюдь не высокопроизводительные у коммутаторов, явно чем-то загружены и, по всей видимости, на все 100%. Запустив tcpdump на vlan-интерфейсе сервера мониторинга я нашел причину высокой загрузки CPU на коммутаторах. Аномально большое количество ARP трафика в вилане управления — несколько тысяч пакетов в секунду. Причина найдена, но вот как отыскать её источник? Было решено заблокировать вилан управления на всех портах агрегации и потом по очереди разблокировать его обратно пока не будет найден проблемный сегмент.
Я успел проделать эту операцию всего на двух узлах агрегации, как вдруг внезапно вся эта свистопляска прекратилась. Но очень подозрительным мне показалось то, что минутою раньше мой коллега, сидящий за соседним столом, вынул сетевой патчкорд из порта коммутатора который служил для доступа к оборудованию и его настройки. Я попросил коллегу снова подключить свой ноутбук в сеть — спустя 10 секунд «пинги» на коммутаторы опять взлетели до безобразных значений. Источник был найден, но этот ноутбук не один месяц использовался для обновления ПО и настройки сетевого оборудования, что же могло с ним такое случиться?
Для начала решили, хотя и наличествовал установленный антивирус, просканировать на наличие зловредов утилитами от доктора и лаборатории. Ничего существенного найдено не было. Попробовали загрузиться в Linux — сетевая молчала, никакого флуда. Обратно загрузили Windows — стойкий эффект, сразу же вилан наполнялся ARP флудом. Но буквально вчера с ноутбуком всё было в порядке! И тут я зачем-то полез в настройки сетевой карты… Коллега мой не часто занимается настройкой железа и обновлением ПО на нём, поэтому запомнить значения маски и шлюза для сети управления он не мог. И он допустил досадную ошибку в конфигурации сетевой карты — вместо 255.255.224.0 для маски подсети он указал 255.255.254.0!
Но что ещё более меня поразило, так это то, что несмотря на явно неправильную конфигурацию (шлюз в ней оказался за пределами сетевого сегмента из-за неверно указанной маски), операционка безропотно проглотила этот бред! Превратив ноутбук в генератор ARP трафика. Вот что было в настройках протокола ipv4:

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий