Каков риск выполнения net.ipv4.route.flush?

Вопрос или проблема

Я настраиваю Linux через AWS и изучаю sysctl.
Когда я запускаю ip route, я вижу, что на машине уже есть маршруты, связанные с адресами 169.X.X.X.
Вопросы:

  1. Что делает sysctl -w net.ipv4.route.flush=1?
  2. Может ли sysctl -w net.ipv4.route.flush=1 испортить настройки по умолчанию, необходимые для корректной работы экземпляра AWS Linux?
  1. Это вызывает функцию ядра ipv4_sysctl_rtcache_flush() с параметром 1.

Тем не менее, эта функция ожидает получить спецификацию сети (технически struct net *) в качестве параметра, а не просто 1. Так что, скорее всего, sysctl -w net.ipv4.route.flush=1 не делает ничего, потому что 1 не является корректным параметром для этого.

  1. Если система зависела от маршрутов, создаваемых динамически (например, запуск gated или аналогичного демона маршрутизации), то успешная очистка кеша маршрутов может вызвать временное нарушение сетевого трафика. Но, как я сказал выше, это не кажется корректным синтаксисом для net.ipv4.route.flush, поэтому, скорее всего, это не сделает ничего.

net.ipv4.route.flush sysctl, по-видимому, используется чем-то вроде ip route flush (или использовалась в какой-то момент, если с тех пор был разработан лучший интерфейс). Страница руководства ip-route(8) говорит следующее:

ip route flush

очистить таблицы маршрутизации

эта команда очищает маршруты, выбранные по некоторым критериям.

Аргументы имеют ту же синтаксис и семантику, что и аргументы команды ip route show, но таблицы маршрутизации не отображаются, а очищаются. Единственным различием является действие по умолчанию: show выводит все основные таблицы маршрутизации IP, а flush отображает страницу справки.

Быстрое экспериментирование на тестовой виртуальной машине показало, что ip route flush 1 удалит только маршрут для 1.0.0.0/32 из основной таблицы маршрутизации, но sysctl -w net.ipv4.route.flush=1 не сделает даже этого. Таким образом, по-видимому, sysctl требует какую-то нетривиальную синтаксис, чтобы иметь какой-либо эффект. Изучение исходного кода ядра позволяет предположить, что для параметра требуется структура данных, поэтому sysctl net.ipv4.route.flush на самом деле не применим из командной строки без инструмента, такого как ip route.


Если вы видите маршруты к 169.254.0.0/16 на любом активированном сетевом интерфейсе, это часть системы Bonjour/Zeroconf, которая обеспечивает подключение на канальном уровне без каких-либо требований к конфигурации. Если вы хотите избавиться от них, файлы конфигурации сети в стиле RedHat могут сделать это с помощью настройки NOZEROCONF=yes в файле /etc/sysconfig/network или в файловых скриптах настройки на интерфейс /etc/sysconfig/network-scripts/ifcfg-<имя интерфейса>; другие дистрибутивы могут иметь другие способы отключения конфигурации Zeroconf.

Ответ или решение

Использование команды sysctl -w net.ipv4.route.flush=1 в контексте конфигурации маршрутов на вашем Linux-сервере, развернутом через AWS, может показаться сложной задачей, особенно если вы не уверены в ее последствиях. Разберем этот вопрос подробно.

Понимание sysctl -w net.ipv4.route.flush=1

  1. Что делает эта команда?

    Команда sysctl -w net.ipv4.route.flush=1 подразумевает вызов функции ядра ipv4_sysctl_rtcache_flush() с параметром 1. Однако функция ожидает в качестве параметра спецификацию сети, а не просто число 1. Следовательно, эта команда, вероятно, не выполнит никаких действий, поскольку переданный параметр не соответствует ожидаемому.

  2. Риски для конфигурации AWS-экземпляра

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

Альтернатива: ip route flush

Для очистки маршрутов в Linux-системах команда ip route flush обычно используется для удаления маршрутов, выбранных по определенным критериям. Важно отметить, что аргументы этой команды имеют те же синтаксис и семантику, что и в команде ip route show, но вместо отображения они удаляют маршруты.

Справление с адресами 169.254.0.0/16

Если вы видите маршруты к адресу 169.254.0.0/16, это связано с системой Bonjour/Zeroconf, предоставляющей локальную сетевую связь без необходимости конфигурации. Если вам нужно убрать эти маршруты, в конфигурационных файлах сети в RedHat используется настройка NOZEROCONF=yes. У других дистрибутивов могут быть свои способы отключения Zeroconf.

Заключение

Пока команда sysctl -w net.ipv4.route.flush=1 предпринимает неочевидное действие, понимание и использование правильных инструментов управления маршрутизацией, таких как ip route, являются важными навыками для управления вашим AWS Linux-экземпляром. Убедитесь, что вы адекватно оцениваете важность каждой конфигурации, чтобы избежать нежелательных сбоев в работе системы.

Оцените материал
Добавить комментарий

Капча загружается...