Как зафиксировать имена сетевых интерфейсов?

Оригинал статьи взят отсюда.

Когда-то давно имена сетевым интерфейсам выдавались в порядке их появления в системе. То есть в порядке загрузки ядерных модулей с драйверами сетевых карт. Если они были в ядре, а не модулями, то порядок их инициализации было трудно угадать. Также, если в компе стояли несколько (больше одной) сетевых карт одного типа (например, две 3Com), то трудно угадать кто из них будет под каким номером. Вообщем, были трудности.

В Дебиане сейчас, если есть udev, имена сетевых карт привязываются к их MAC адресам. Это гораздо лучше, но всё же далеко от идеала. Например, была сетевая карта, и звали её eth0. Потом она поломалась, её заменили. Но в системе осталась запись о ней. Новая сетевая карта получит имя eth1.

IMHO лучшее решение -- это привязать имя сетевого интерфейса к номеру PCI слота. Средствами udev это возможно.

В Дебиане это пишется в файле /etc/udev/rules.d/z25_persistent-net.rules. Вместо такого:
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:13:d4:26:94:e3", NAME="eth0"

Пишем так:
SUBSYSTEM=="net", DRIVERS=="?*", KERNELS=="0000:05:01.0", NAME="eth0"
SUBSYSTEM=="net", DRIVERS=="?*", KERNELS=="0000:05:02.0", NAME="eth1"
SUBSYSTEM=="net", DRIVERS=="?*", KERNELS=="0000:02:00.0", NAME="eth2"

В параметре KERNELS ставятся номера PCI устройств, как их показывает команда lspci.

Теперь имя сетевого интерфейса зависит только от того, куда воткнута сетевая карта. И не зависит от её типа, от порядка загрузки и инициализации драйверов и прочих посторонних вещей. Если карточку заменить, то все имена останутся на своих местах.

PS. А ещё есть http://etcnet.org/ smile Его родной дом -- Alt Linux.

-- VitalyDruzhinin - 2009-11-19
Topic revision: r1 - 2013-08-29, VitalyDruzhinin
 

This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback