Вопрос или проблема
Я настраиваю Linux через AWS и изучаю sysctl
.
Когда я запускаю ip route
, я вижу, что на машине уже есть маршруты, связанные с адресами 169.X.X.X
.
Вопросы:
- Что делает
sysctl -w net.ipv4.route.flush=1
? - Может ли
sysctl -w net.ipv4.route.flush=1
испортить настройки по умолчанию, необходимые для корректной работы экземпляра AWS Linux?
- Это вызывает функцию ядра
ipv4_sysctl_rtcache_flush()
с параметром1
.
Тем не менее, эта функция ожидает получить спецификацию сети (технически struct net *
) в качестве параметра, а не просто 1
. Так что, скорее всего, sysctl -w net.ipv4.route.flush=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
-
Что делает эта команда?
Команда
sysctl -w net.ipv4.route.flush=1
подразумевает вызов функции ядраipv4_sysctl_rtcache_flush()
с параметром1
. Однако функция ожидает в качестве параметра спецификацию сети, а не просто число1
. Следовательно, эта команда, вероятно, не выполнит никаких действий, поскольку переданный параметр не соответствует ожидаемому. -
Риски для конфигурации 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-экземпляром. Убедитесь, что вы адекватно оцениваете важность каждой конфигурации, чтобы избежать нежелательных сбоев в работе системы.