Вопрос или проблема
Я использую Debian 9.13. Я пытался выяснить, в чем разница между auto eth1
и allow-hotplug eth1
в /etc/network/interfaces
. У меня есть сетевая интерфейса eth1
, подключенная через USB
. Я пробовал перезагрузку, выполнение systemctl restart networking
, а также подключение и отключение, и кажется, что основная разница между allow-hotplug
и auto
заключается в том, что если интерфейс помечен как auto
, команда systemctl restart networking
не выполняется, когда eth1
не подключен. Это приводит к выводу, что allow-hotplug
на самом деле предпочтительнее во всех случаях, возможно, за исключением ситуации, когда я знаю, что интерфейс не исчезнет (lo, встроенные интерфейсы).
Это правильно? Есть ли какая-то другая разница?
Я дополню ответ еще одной очень важной заметкой. Если вы используете специальные интерфейсы, такие как bonding (транк) или сетевой мост, избегайте добавления allow-hotplug
в их конфигурацию в файле /etc/networking
, всегда используйте auto
.
auto
подключает их при загрузке, но allow-hotplug
может начать создавать проблемы во время работы ОС (после первоначальной конфигурации), например, удалить статическую IP-конфигурацию, сбросить интерфейс, настроить автоконфигурацию IP, что может привести к назначению IP, как 169.254.240.1/16.
-
allow-hotplug
в основном означает для ОС: этот интерфейс динамичен, управляйте им при изменении различных условий (подключение / отключение USB-ключа, подключение / отключение Wi-Fi/VPN). -
auto
в основном говорит ОС: активируйте этот интерфейс с предоставленной конфигурацией во время загрузки или при событии поднятия соединения интерфейса.
auto
Интерфейс, помеченный auto
, будет активирован во время загрузки.
allow-hotplug
Интерфейс подождет, пока udev и ядро его обнаружат, после чего будет активирован.
man interfaces
:
Интерфейсы, помеченные "allow-hotplug", активируются, когда udev их обнаруживает.
Это может произойти как во время загрузки, если интерфейс уже присутствует, так и позже, например, при подключении USB-сетевой карты.
Ответ или решение
Вопрос о различии между auto
и allow-hotplug
в файле конфигурации сети /etc/network/interfaces
является важным для настройки сетевых интерфейсов в Debian, особенно когда речь идет о динамических интерфейсах, таких как USB-адаптеры.
Основные различия
-
Обозначение интерфейса:
auto
: Интерфейс, отмеченный какauto
, будет активирован автоматически во время загрузки системы. Например, если в конфигурации указаноauto eth1
, то интерфейсeth1
будет поднят при старте системы, независимо от его состояния (оптическое подключение).allow-hotplug
: В отличие от этого, при использованииallow-hotplug
, интерфейс будет активирован только в том случае, если система обнаружит его наличие через механизмыudev
и ядра. Это может произойти как во время загрузки, если интерфейс уже подключен, так и в процессе работы системы, например, при подключении USB-адаптера.
-
Поведение при перезапуске сети:
- Использование
auto
может привести к ошибке при попытке перезапуска сетевого стека (например, черезsystemctl restart networking
), если интерфейс не подключен. Это происходит, потому что система ожидает, что интерфейс будет доступен при старте, и не может выполнить команду. - В случае
allow-hotplug
, интерфейс будет ждать, пока не появится событие подключения, и, соответственно, не вызовет ошибок, если интерфейс отсутствует.
- Использование
Рекомендации
- Для встроенных и всегда доступных интерфейсов (таких как
lo
или встроенные сетевые карты) оптимально использоватьauto
, так как эти интерфейсы всегда должны быть активированы при загрузке. - Для динамических интерфейсов (например, USB-сетевые адаптеры) более предпочтительным является использование
allow-hotplug
. Это позволяет избежать проблем с отсутствующими интерфейсами на этапе загрузки.
Особые случаи
Важно отметить, что для специальных интерфейсов, таких как сетевые мосты (bridges) или интерфейсы с объединением (bonding), рекомендуется использовать только auto
. Использование allow-hotplug
для таких интерфейсов может привести к неожиданным последствиям, таким как сброс конфигурации IP-адреса или возникновение конфликта с другими сетевыми настройками.
Заключение
Ваша интерпретация различий между auto
и allow-hotplug
абсолютно верна. Для управления статичными и всегда доступными интерфейсами предпочтительнее использовать auto
, тогда как для динамически меняющихся интерфейсов, таких как USB, более разумным будет использование allow-hotplug
. Важно также помнить о возможных рисках при использовании allow-hotplug
для сложных сетевых конфигураций.