Нумерация интерфейсов

Sergei A. Beilin sbeilin на narod.ru
Вт Сен 12 10:09:00 BST 2006


Приветствую, all!

Некоторое время назад я столкнулся с одной неприятной проблемой. Именно, пусть 
в системе есть два или более сетевых адаптера; благодаря PnP, архитектуре 
ядра 2.6.* и udev, нет никаких гарантий, что номера интерфейсов (eth0, eth1 и 
т.д.) будут после перезагрузки присвоены именно тем "железным" интерфейсам.

Читая man interfaces, видим:
--------------------------------8<--------------------------------------
Unfortunately it can happen that the kernel assigns different physical  
interface names  to the same hardware at different times; for example, what 
was called "eth0" last time you booted is now called  "eth1"  and  vice 
versa. 
--------------------------------8<--------------------------------------

Вот именно так и происходит.

Правка /etc/network/interfaces и использование там конструкций типа map не 
является хорошим решением проблемы, т.к. позволяет только "прибить" нужную 
конфигурацию (IP-адрес и т.д.) к нужному "железному" интерфейсу, но номер -- 
номер интерфейса будет не тот. А зачастую номер интерфейса важен -- при 
задании сложных правил в iptables, хитрых правил маршрутизации "в интерфейс", 
и при установлении pppoe-соединения "поверх" определенного интерфейса.

Лично меня эта нумерация "от балды" бесила: в моей домашней машине три 
ethernet-устройства -- одно к компутеру жены (тоже под Kubuntu), другое -- 
в "домашнюю" локалку (которая, впрочем, охватывает уже пол-Самары), и третий 
интерфейс -- в него включен ADSL-модем.

И тут, к несчастью, у одного из клиентов, где работает ubuntu-сервер, вырубили 
свет; после перезагрузки номера интерфейсов так же "съехали" (там их тоже 
три: два наружу и один -- внутрь).

Кто-то скажет: "А пропиши в /etc/modules ручками драйвера адаптеров". Ага, как 
бы не так: а если все n адаптеров -- на одном чипсете? Я вот люблю линейку 
3C905, например :)

К счастью, в ubuntu имеется замечательное и простое средство решения этой 
проблемы. Это маленький файлик, 
	/etc/iftab
Что туда написать? Наберите
	man iftab
и прочитаете :) В двух словах, файл обеспечивает udev необходимой информацией 
о соответствии физического интерфейса (например, по mac-адресу) и его номера, 
в самом простом варианте -- вот так:

	$ cat /etc/iftab
	eth0    mac 00:06:5B:84:5E:01
	eth2    mac 00:C0:A8:8A:BB:07
	eth1    mac 00:04:76:22:BD:AD

Все! Опускаем интерфейсы (ifdown -a), перезапускаем udev (/etc/init.d/udev 
restart), поднимаем интерфейсы с "правильными" номерами (ifup -a).


-- 
	С уважением, Сергей Бейлин

	"Лаб М", г.Самара
	http://www.lab-m.ru/
	+7 (846) 244-25-40


Подробная информация о списке рассылки ubuntu-ru