LINUX.ORG.RU
ФорумAdmin

OIF, IIF. Может ли измениться числовой индекс сетевого интерфейса?

 , ,


0

1

Решил заменить строковые значения в конфиге nftables на числовые идентификаторы.
Так вот, если сетевой интерфейс хардварный, типа lo или enp1s0, то там уверенность есть, что их значения будут по порядку

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 2f:54:6z:87:0e:42 brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 1.2.3.4/5 brd 1.2.3.6 scope global enp1s0
       valid_lft forever preferred_lft forever

Если у меня добавлена PCI-сетевая с 4-мя портами. На первых 2-х портах VLAN’ы + поднят OpenVPN, который поднимается systemctl’ем и т. п., ну то есть, условно, на данный момент есть 10 числовых идентификаторов сетевых интерфейсов, что хардварных, что софтварных.
По моим наблюдениям lo всегда первый, enp1s0 (в моём случае) всегда второй, а вот допустим enp1s0.vlan04 - пятый, а tun0 шестой.
Есть ли вероятность того, что при перезагрузке последовательность софтварных интерфейсов изменится?


Есть ли вероятность

Нет вероятности, есть уверенность. Ты же в курсе, что интерфейсы могут удаляться и появляться?

no-dashi-v2 ★★★★
()
Ответ на: комментарий от Dodik

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

Если это чисто systemd, даже без systemd-networking - тут всё может запуститься плюс - минус в произвольном порядке, допустим через отдельный Unit.

Если это systemd-netoworking, тут всё зависит от того, как systemd интерпретирует его конфиг, возможно так же для каждой описанной конфигурации сетевого интерфейса создаёт отдельный systemd unit, читай документацию по systemd.

Если это debian network-interfaces - тут плюс минус всё запускается по очереди.

Но во всех этих случая - есть но, если какой-то интерфейс не поднялся, то следующий поднявшийся изменит свой индекс.

По поводу netplan - плюс минус так же, если что-то не поднялось - индекс может измениться.

В случае systemd-networking - не подскажу, но думаю тоже, что создаются отдельные unit`ы.

В случае отдельных systemd unit`ов - точно произвольно может запуститься, если ты не прописал директивы after и / или requierd.

Так же ты сказал, что есть pci-e плата.

Прочитай документацию по systemd udevd, если кратко, systemd создаёт предсказуемые имена устройств, чтобы при каждом запуске они были одинаковые, а не зависели от очерёдности инициализации устройства, т.е. загрузки драйвера (модуля). Есть одно «но», для именования systemd использует порядковые номера устройство на pci/pci-e шине. Это значит, что если ты, допустим, подключишь новый nvme накопитель или отключишь один из существующих, добавишь ещё одну pci-e карту в слот, или переставишь в другой слот или заменишь видео карту или другую плату расширения в pci-e, которая в себе содержит большее число pci-e устройств - нумерация устройства сетевого контроллера на pci-e шине изменится - изменится имя сетевого устройства, вместо enps0 - станет что-то другое. И в случае, если есть ещё другие сетевые контроллеры - они могут поменяться местами.

Поэтому, советую делать grep по именам устройств и / или mac адресов в выводе

ip a

И проверять всё, при изменении аппаратной части ПК.

kostik87 ★★★★★
()

Номера в этом списке - исключительно для удобства чтения вывода юзером. Никакие алгоритмы на них завязывать нельзя. Даже если оно у тебя будет работать, когда-нить неожиданно что-то пойдёт не так и ты уже забуешь в чём было дело.

А зачем вообще тебе эти номера понадобились?

firkax ★★★★★
()
Ответ на: комментарий от kostik87

Дистрибутив - Debian 13
Интерфейсы управляются systemd-networkd. По пути /etc/systemd/network/ создаются файлы вланов .netdev и .network, ну как создаются? Созданы 1 раз и всё. В принципе конфигурация не меняется.
Пока ждал ответов, нагуглил, что да. Присвоение идентификаторов интерфейсам непредсказуемо, в отличии от их именования. Единственное, в чём можно быть уверенным, что lo будет всегда первым

Dodik
() автор топика
Ответ на: комментарий от firkax

А зачем вообще тебе эти номера понадобились?

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

Dodik
() автор топика
Последнее исправление: Dodik (всего исправлений: 2)
Ответ на: комментарий от Dodik

в отличии от их именования.

Нет, имена тоже могут меняться и я выше написал почему. Systemd тебе это гарантирует только в случае, если ты ничего не меняешь в аппаратной части ПК, читай выше.

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

Никакого выигрыша при использовании индексов сетевых устройств ты не получишь. При загрузке правил nftables в ядро правила преобразуются в ebpf код и работаю напрямую с сетевыми устройствами, как их видит само ядро. Поэтому используй имена сетевых интерфейсов в правилах и всё.

Это тебе, видимо, ИИ такую чушь посоветовал. Слушай их больше.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Это тебе, видимо, ИИ такую чушь посоветовал.

Я к этому калу не обращаюсь.

Спасибо за разъяснения!

Dodik
() автор топика
Ответ на: комментарий от kostik87

используй имена сетевых интерфейсов в правилах и всё

Хороший совет. Только надо имена интерфейсов зафиксировать через правила udev например и тогда вообще красота.

no-dashi-v2 ★★★★
()
Ответ на: комментарий от no-dashi-v2

Чтобы зафиксировать имена физических интерфейсов в начале нужно отключить предсказуемые имена в systemd.

И фраза, что ты вырвал из предложения относилась в целом ко всем интерфейсам, в том числе tun, vlan и прочему. И автору это всё не нужно, если не будет менять конфигурацию оборудования - у него и так будут постоянные имена.

И он хотел он использовать индексы, вместо имён сетевых интерфейсов, в том числе для tun и прочего.

И тут твой совет никак не поможет.

kostik87 ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария