Ядро Linux обнаруживает сетевые интерфейсы (eth0, wlan1, ...) в непредсказуемом и нестабильном порядке. Но для того, чтобы из различных мест (ifupdown, networkd, firewall) работать с интерфейсом, нужно обладать единственным и постоянным именем.
Общая идея состоит в том, что для udev делается правило, которое находит по критерию нужный интерфейс и присваивает ему имя NAME="foo". Интерфейсы с указанной NAME будут названы, а остальные получат от ядра имена, традиционно ethN, wlanN или что-то подобное.
На протяжение многих лет появилось несколько решений по именам сетевых интерфейсов:
Заметьте, что выше перечисленные решения могут и на практике объединены. Первое правило, которое задаст имя, побеждает. В настоящее время biosdevname побеждает mac, побеждая ifnames.
Это решение применяется в данный момент на большинстве оборудования, но, то, что хорошо работало много лет назад, начинает показывает свои возрастные проблемы:
Поддержка схемы mac была закончена 2 года назад в апстриме проекта udev и с того времени поддерживалась силами Debian и Ubuntu.
Схему biosdevname используют много лет в образах для серверов и никогда для десктопных. В целом неплохой подход, но, к сожалению, большинство BIOS настольных ПК не заполняют нужную информацию и такое же поведение свойственно не-x86 машинам. Получается, что данная схема охватывает небольшое количество случаев и обычно всё скатывается к схеме mac.
Это решение расширяет идею biosdevname и применимо для множества случаев и архитектур. Данной схеме не нужно сохранять состояние (значит не нужен каталог для записи типа /etc/udev/rules.d/) и нет race conditions.
Основным, косметическим недостатком можно посчитать вычурные имена сетевых устройств, так как бородатые админы привыкли к eth. Для выданных BIOS имена могут быть вида ens0. Для сетевых карт в PCI слоте - enp1s1 (ethernet) или wlp3s0 (wlan). Это необходимая плата и, к слову сказать, имена в схеме biosdevname выглядят похоже.
Разработчики Debian и Ubuntu отключили такую схему до всестороннего её обсуждения. Можно загрузиться с параметром net.ifnames=1 и увидеть её работу в действии.
17 июня 2015 года разработчик Мартин Питт (Martin Pitt) объявил, что Ubuntu 15.10 Wily Werewolf и Debian GNU/Linux 9 Stretch будут использовать схему "постоянные сетевые имена без сохранения состояния" (stateless persistent network interface names - ifnames) при установке системы в чистую. Ubuntu будет использовать схему ifnames на всех своих платформах (десктоп, сервер, touch, snappy), чтобы перестать делать различия и ещё чуть-чуть приблизиться к своей цели - конвергенции.
Обновление существующей системы у пользователя данный переход не затронет, так как разработчики не могут гарантированно знать текущее состояние сети у каждого пользователя и не могут безопасно удалить схему, создавшую её. Разработчики надеются, что со временем и переустановленными системами, старая схема безопасно уйдёт в прошлое. Генератор для схемы mac будет удалён.
Пока не понятен один очень важный момент. Для Ubuntu 16.10 (следующая за 16.04 LTS) и релизам Debian Stretch + 1 и Stretch + 2 рекомендуется создать проверки на наличие файла /etc/udev/rules.d/70-persistent-net.rules в udev.preinst. При наличии данного файла рекомендуется показывать критическое сообщение debconf и отказаться от обновления! На 16.10 нельзя будет обновиться с 16.04 LTS, в которой сохранится старая схема из-за долгоподдерживаемого статуса релиза!!!
Привожу кусочек email переписки разработчиков в оригинале, чтобы вы оценили масштаб трагедии:
Ubuntu 16.10 (after next LTS) / stretch+1 (or maybe +2) (Debian) - Check existance/non-emptiness of /etc/udev/rules.d/70-persistent-net.rules in udev.preinst, Show critical debconf note, and refuse to upgrade
Считаю, что панику разводить рано. Разработчики призрачно и безболезненно переводили наши системы с использования систем инициализации Upstart на Systemd. Никто не заметил прыжок в версии загрузчика GRUB. Тут какое-то простое изменение в именах сетевых устройств!
Дата последней правки: 2015-07-15 13:16:30