Устранение ошибки в работе сетевых интерфейсов eth0 и eth1: ADDRCONF(NETDEV_UP): eth0: link is not ready




Сайт создан в системе uCoz
Вернуться к Оглавлению

 

Автор: Andrey Rjavskov(Rzhavskov) as rjaan <rjaan@yandex.ru>


Суть проблемы

Одной из часто встречающихся проблем, связанной с одновременной работой двух сетевых интерфейсов eth0 и eth1 во-время старта ОС Debian GNU/Linux UDEV, встречается неправильно отображение имен сетевых интерфейсов eth0 и eth1 менеджером UDEV, ранее присваиваенных ядром ethernet-адаптерам. Данная проблема выражается в том, что ifconfig выдает на первый взгляд все правильно, но ничего не работает, а дамп ядра пишет лишь, что ADDRCONF(NETDEV_UP): eth0: link is not ready.

Вариант решения

# dmesg | grep eth [ 2.560056] Driver 'rtc_cmos' needs updating - please use bus_type methods
[ 3.331121] e100: eth0: e100_probe: addr 0xe2014000, irq 11, MAC addr 00:08:b3:00:84:fd
[ 3.367854] e100: eth1: e100_probe: addr 0xe2040000, irq 11, MAC addr 00:08:b3:00:84:fe
[ 13.108693] ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 13.112330] e100: eth0 NIC Link is Up 100 Mbps Full Duplex
[ 13.112669] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 13.232465] ADDRCONF(NETDEV_UP): eth1: link is not ready
[ 13.236323] e100: eth1 NIC Link is Up 100 Mbps Full Duplex
[ 13.236957] ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready

Жирным выделены нужные нам строчки, а красным выделены MAC-адреса для eth0 и eth1.

Во-вторых, МАС адрес не всегда может быть получен из дампа ядра. В этом случае, вам лучше будет выполнить утилиту настройки сетевых интерфейсов ifconfig с ключом -a.

# ifconfig -a
eth0    Link encap:Ethernet HWaddr 00:08:b3:00:84:fd
     inet addr:192.168.0.101 Bcast:192.255.255.255 Mask:255.0.0.0
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:8318 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:0 (0.0 B) TX bytes:349356 (341.1 KiB)

eth1    Link encap:Ethernet HWaddr 00:08:b3:00:84:fe
      inet addr:10.0.0.1 Bcast:10.255.255.255 Mask:255.0.0.0
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:1657 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1942 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:493812 (482.2 KiB) TX bytes:836716 (817.1 KiB)

Жирным курсивом выделены нужные значения MAC адресов для сетевых интерфейсов eth0 и eth1.

Теперь переходим к решению нашей проблемы. Открываем файл /etc/udev/rules.d/70-persistent-net.rules под пользователем root в любом удобным вам редакторе и оставляем или добавляем следующие строчки:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x1209 (e100)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:08:b3:00:84:fd",
ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth0", NAME="eth0"

# PCI device 0x8086:0x1209 (e100)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:08:b3:00:84:fe",
ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth1", NAME="eth1"

Жирным курсивом выделены нужные значения MAC адресов для сетевых интерфейсов eth0 и eth1, раннее полученные из дампа загрузки ядра или утилитой конкурирования сетевых интерфейсов ifconfig.

Обращаю ваше внимание на то, чтобы имена сетевых адресов к eth0 и eth1 соответствовали именам, присвоенных им ядром во-время инициализации драйвера, нужно в правилах для сетевых интерфейсов eth0 и eth1 для KERNEL и NAME прописать одно и то же имя сетевого интерфейсу.

Делаем reboot!

P.S.

Обычно в разных руководствах все оканчивается на reboot и после этого, читатель остается один на один с мыслью: «Как проверить работоспособность ?».

Для чего опять обратим свой взгляд на дамп приведенный выше. Когда во время старта ОС Debian GNU/Linux запускается скрипт-запуска /etc/rc.d/init.d/networking, он выполняет команду ifup, которая определяет сначала сконфигурирован или нет запрашиваемый сетевой интерфейс, на что нам указывает строчка ADDRCONF(NETDEV_UP): eth0: link is not ready. Если он не настроен, она настраивает его. Результатом успешного завершения процесса присвоения адреса сетевому интерфейсу будет строка ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready.

 

Вернуться к Оглавлению


Copyright © 2010 rjaan as Andrey Rjavskov(Rzhavskov) <rjaan@yandex.ru> <arjavskov@gmail.com>