У меня есть две server системы, одна из которых работает под управлением Debian Stretch , другая - Ubuntu 17.10 , каждая из которых имеет два сетевых адаптера, настроенных следующим образом (/etc/network/interfaces):

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
        address 192.168.2.x
        netmask 255.255.255.0
        network 192.168.2.0
        broadcast 192.168.2.255
        gateway 192.168.2.1
        dns-nameservers 8.8.8.8

allow-hotplug eth1
iface eth1 inet dhcp

Кроме того, начальные ram-диски в обеих системах имеют одинаковые IP-адреса (да, я использую имена интерфейсов "старой школы"), настроенные с помощью (/etc/default/grub):

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"
GRUB_CMDLINE_LINUX="ip=192.168.2.x::192.168.2.1:255.255.255.0:whatever:eth0:off"

В обеих системах первый адаптер всегда подключен к локальной сети, а второй почти никогда ни к чему не подключен, но иногда используется для тестирования сетевого оборудования.

Иногда (1/10 раза) происходит, после перезагрузки, имена адаптеров меняются местами, и вдруг eth1 имеет MAC адрес, который имел eth0 до перезагрузки, и получает адрес, полученный DHCP . Это происходит и на начальном RAM-диске.

Теперь Debian Jesse и Ubuntu 16.04 LTS имели /etc/udev/rules.d/70-persistent-net.rules котором четко указано, какой MAC принадлежит какому интерфейсу. Этот файл не существует в моих системах, я никогда не удалял ни одного пакета и не удалял этот файл из этих двух систем. Я попытался воссоздать файл с:

udevadm trigger --type=devices --action=change
udevadm trigger --subsystem-match=net --action=add
udevadm control --reload-rules

А после перезагрузки файла нет, а переходники все еще иногда меняются местами. Любая подсказка или идея, как исправить эту надоедливую проблему, очень ценится.

1 ответ1

1

Сетевые интерфейсы проверяются при загрузке, и результат этого исследования не предсказуем. Имена интерфейсов назначаются в том порядке, в котором они были найдены, но, к сожалению, это не является детерминированным. Это как раз проблема с именами интерфейсов "старой школы", которые Predictable Network Interface Names пытается решить.

Вы также можете создать файл правил udev "вручную", чтобы сопоставить MAC-адрес с именем интерфейса, например:

/etc/udev/rules.d/70-network.rules

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="net1"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="net0"

Обратите внимание, что поменяются не MAC-адреса, а имена интерфейсов. MAC-адрес (обычно) фиксируется на оборудовании. В вашем случае происходит то, что физический интерфейс с именем "eth0" иногда получает имя "eth1", что означает, что ваша статическая сетевая конфигурация применяется к неправильному порту.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .