Вопрос или проблема
В Linux возраст записи ARP сбрасывается/обновляется, если приходит пакет. Однако, похоже, что FreeBSD просто устанавливает таймер и без условий удаляет запись ARP, даже если проходили пакеты с этим MAC-адресом/IP. Есть ли способ получить поведение Linux, обновляющее возраст при наличии трафика?
Я испытываю большие всплески трафика широковещательных ARP каждые 20 минут в своей локальной сети из-за этого. Я знаю, что можно изменить возраст в кэше FreeBSD, но это просто меняет интервалы между всплесками. Я хочу остановить всплески в первую очередь.
Прекрасная вещь в FreeBSD заключается в том, что всё документируется: arp(4)
У нас есть:
Эти маршруты периодически истекают (обычно через 20 минут после
подтверждения; записи не подтверждаются, когда не используются)
…и…
max_age Как долго запись ARP хранится в кэше
до того, как её нужно обновить. По умолчанию
1200 секунд.
Я читаю это так: если мы увидим запись в пределах maxage
, то она подтверждается. То есть: когда используется, она подтверждается.
Итак, если вы выполните:
arp -i ixl0 -a
? (192.168.1.2) at 00:00:00:00:00:00 on ixl0 expires in 237 seconds [ethernet]
? (192.168.1.1) at 00:00:00:00:00:01 on ixl0 permanent [ethernet]
Вы увидите записи arp и их возраст. Если вы хотите увеличить продолжительность кэша, просто измените max_age
.
Ответ или решение
Обновление ARP-энциклопедий в FreeBSD
FreeBSD, в отличие от Linux, использует несколько иную стратегию управления ARP-кешем. Ваша проблема с частыми ARP-трафиками, возникающими каждые 20 минут, связана с тем, что FreeBSD не обновляет таймеры ARP-записей на основе поступающего трафика, как это делает Linux. Давайте рассмотрим более подробно, как вы можете решить данную проблему.
ARP в FreeBSD
По умолчанию FreeBSD использует механизм, описанный в документации (мануал arp(4)
), где указано, что ARP-записи истекают автоматически по истечении максимального времени (max_age
). В вашем случае это значение по умолчанию составляет 1200 секунд (или 20 минут). Если за это время не поступает трафик от устройства, записи удаляются, что приводит к необходимости повторной установки связи и, соответственно, к избыточному трафику ARP.
Как добиться поведения, аналогичного Linux
В текущей версии FreeBSD нет встроенной настройки, которая позволила бы точно имитировать поведение Linux, где ARP-записи обновляются при получении пакетов. Однако, вы можете выполнить ряд настройок, чтобы минимизировать количество ARP-трафика или улучшить его поведение.
Изменение max_age
Вы уже упомянули об изменении значения max_age
. Это действительно может помочь в ситуациях, когда связь с устройством бездействует длительное время. Установив значение больше 1200 секунд, вы можете сократить число ARP-броадкастов:
sysctl net.link.ether.inet.max_age=3600
Эта команда установит максимальное время жизни ARP-записей в один час.
Установка постоянных ARP-записей
Если у вас есть статические IP-адреса, вы можете вручную добавить постоянные ARP-записи для устройств, которые часто взаимодействуют в вашей сети. Это позволит избежать необходимости повторной регистрации ARP в случае, когда устройства не отправляют пакеты в течение стандартного временного интервала. Вы можете использовать следующую команду:
arp -s <IP> <MAC>
Например:
arp -s 192.168.1.2 00:00:00:00:00:02
Использование альтернативных методов
В дополнение к вышеперечисленным методам, существует возможность оптимизации сетевого трафика с помощью настройки маршрутизаторов и свитчей. Изучите возможность активации протоколов, таких как Proxy ARP или Gratuitous ARP, в тех устройствах, которые имеют поддержку этих функций. Это может помочь уменьшить количество ARP-запросов, поступающих от клиентов.
Заключение
Хотя FreeBSD не предлагает прямого способа эмулировать поведение Linux с обновлением ARP-времени при получении пакетов, изменения, такие как увеличение max_age
и установка постоянных записей ARP, могут значительно улучшить ситуацию в вашей локальной сети. Постоянное мониторинг и анализ ARP-трафика помогут выявить узкие места и уменьшить ненужные пакеты. Для более глубокого анализа вы можете использовать инструменты мониторинга сети, такие как tcpdump или Wireshark.
Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.