Если используется Udev и модульные сетевые драйверы, то по умолчанию нумерация сетевых интерфейсов не сохраняется между перезагрузками, т.к. драйверы загружаются параллельно и, следовательно, в случайном порядке. Например, на компьютере с двумя сетевыми картами, изготовленными Intel и Realtek, сетевая карта, изготовленная Intel, может получить имя eth0, а карта Realtek - eth1. Иногда после перезагрузки имена карт могут назначаться в обратном порядке. Чтобы избежать этого, Udev поставляется со скриптом и некоторыми правилами, которые используя МАС-адреса сетевых карт назначают им стабильные имена.
Сначала нужно создать правила, которые обеспечат, что при каждой загрузке, в том числе и первой, одним и тем же устройствам будут назначаться одни и те же имена:
for NIC in /sys/class/net/* ; do INTERFACE=${NIC##*/} udevadm test --action=add $NICdone
Теперь, проверьте файл /etc/udev/rules.d/70-persistent-net.rules, чтобы узнать, какое имя какому сетевому устройству было назначено:
cat /etc/udev/rules.d/70-persistent-net.rules
Файл начинается с блока комментариев, за которым для каждой сетевой платы следуют две строки. Первая строка каждой сетевой платы является закомментированным описанием, в котором указываются аппаратные идентификаторы сетевых плат (например, идентификаторы изготовителя устройства и шины PCI, если это карты PCI), а также их драйверы, указанными в скобках, если их можно найти. Ни аппаратный идентификатор, ни драйвер не используются для присваивания имени интерфейсу; это лишь справочная информация. Вторая строка является правилом Udev, которое применяется к конкретной плате сетевого интерфейса и фактически назначает ему имя.
Все правила Udev состоят из нескольких ключей, разделенных запятыми и необязательными пробелами. Ниже перечислены ключи и для каждого из них приведено пояснение:
SUBSYSTEM=="net" - Этот ключ указывает Udev игнорировать устройства, которые не являются сетевыми картами
ACTION=="add" - Этот ключ указывает Udev игнорировать это правило для событий uevent, не связанных с добавлением устройств (также возможны события uevents вида "remove" - "удалить" и "change" — "изменить", но для них переименовать сетевые интерфейсы не нужно).
DRIVERS=="?*" - Этот ключ существует для того, чтобы Udev игнорировал подинтерфейсы VLAN или bridge (т. к. для этих подинтерфейсов нет драйверов). Эти подинтерфейсы пропускаются, поскольку имена, которые могут быть им назначены, будут вступать в коллизию с именами для устройств, от которых порождены эти подинтерфейсы.
ATTR{address} - Значением этого ключа является MAC-адрес сетевой платы.
ATTR{type}=="1" - Этот ключ обеспечит, что в тех случаях, когда используются определенные беспроводные драйверы, создающие несколько виртуальных интерфейсов, правило будет применяться только к первичному интерфейсу. Вторичные интерфейсы пропускаются по той же причине, по которой пропускаются подинтерфейсы VLAN и bridge: в противном случае возможны коллизии имен.
KERNEL=="eth*" - Этот ключ был добавлен в генератор правил Udev что обслуживать машины, в которых есть несколько сетевых интерфейсов с одним и тем же МАС-адресом (PS3 является одной из таких машин). Если независимые интерфейсы имеют различные базовые имена, то с помощью этого ключа Udev сможет отличать их друг от друга. Для большинства пользователей Linux From Scratch этот ключ необязателен, но он не навредит.
NAME - Значением этого ключа является имя, которое Udev назначит данному интерфейсу.
Значение NAME является важным. Прежде чем продолжить, убедитесь, что вы знаете, какое имя было назначено каждой из ваших сетевых карт, и убедитесь, что при создании файлов конфигурации, описанных ниже, используется это значение NAME.