Дата и время публикации:
Дата и время модификации:
Проблема и решение
1. Cуть проблемы
Одной из часто встречающихся проблем, связанной с одновременной работой двух сетевых интерфейсов eth0 и eth1 во-время старта ОС Debian GNU/Linux UDEV, встречается неправильно отображение имен сетевых интерфейсов eth0 и eth1 менеджером UDEV, ранее присваиваенных ядром ethernet-адаптерам. Данная проблема выражается в том, что ifconfig выдает на первый взгляд все правильно, но ничего не работает, а дамп ядра пишет лишь, что ADDRCONF(NETDEV_UP): eth0: link is not ready.
2.Решение
Дамп 2.1
# 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.
Дамп 2.2
# 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 в любом удобным вам редакторе и оставляем или добавляем следующие строчки, как показано в дампе 2.3
Дамп 2.3
# 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.