Нумерация интерфейсов
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