Я заметил, что сервер 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
Оказалось, что в системе отсутствуют некоторые важные исправления: