Назад | Перейти на главную страницу

Solaris не записывает MAC-адрес в таблицу ARP

Я заметил, что сервер Solaris 9 продолжает отправлять запросы ARP для IP-адреса, принадлежащего нашему DNS-серверу.

DNS-сервер отвечает своим MAC-адресом, но Solaris 9 не записывает адрес в таблице ARP. Вы можете легко пропинговать DNS-сервер, но для каждого выходящего пакета он должен снова и снова запрашивать MAC-адрес.

Вот результат отслеживания:

10.0.0.12 -> (broadcast)  ARP C Who is 10.0.0.4, 10.0.0.4 ?
10.0.0.4 -> 10.0.0.12 ARP R 10.0.0.4, 10.0.0.4 is 0:14:4f:ac:cf:2e
10.0.0.12 -> (broadcast)  ARP C Who is 10.0.0.4, 10.0.0.4 ?
10.0.0.4 -> 10.0.0.12 ARP R 10.0.0.4, 10.0.0.4 is 0:14:4f:ac:cf:2e
10.0.0.12 -> (broadcast)  ARP C Who is 10.0.0.4, 10.0.0.4 ?
10.0.0.4 -> 10.0.0.12 ARP R 10.0.0.4, 10.0.0.4 is 0:14:4f:ac:cf:2e

Несмотря на то, что он отвечает, 10.0.0.4 никогда не отображается в таблице ARP, но ping работает все время (предположительно потому, что он запрашивает MAC-адрес для каждого запроса и, таким образом, может отправить пакет ICMP).

Я подтвердил, что исходный MAC-адрес в запросах действительно исходит от сервера Solaris 9, и в ответах также есть правильный исходный адрес с DNS-сервера. В основном все вроде работает нормально, кроме ... отравления ARP?

Что делает это еще более странным, так это то, что он отлично работает для всех других IP-адресов в сети 10.0.0.0/24. Их MAC-адреса кэшируются в таблице ARP, а эта - нет.

Есть ли что-нибудь особенное в IP-адресах, назначенных в качестве DNS-серверов в /etc/resolv.conf, что заставило бы ARP вести себя подобным образом? Два других DNS-сервера не находятся в одной подсети, поэтому я не могу проверить, происходит ли это с другими адресами.

# ndd -get  /dev/arp arp_cleanup_interval
60000

Оказалось, что в системе отсутствуют некоторые важные исправления:

  • 4157198 несогласованность кэша ARP между модулями arp и ip
  • 4978063 Опция SO_DONTROUTE вызывает трафик ARP для каждого кадра
  • 4653899 Проблема обработки пакетов ARP