У меня есть система Devuan с неудобно большим количеством физических сетевых интерфейсов. Иногда мне приходится отсоединять кабели, и мне сложно убедиться, что они снова подключены к одному интерфейсу.
Я также использую выразительные названия интерфейсов; вместо того ethX
У меня есть такие имена, как intra
или mgmt
или someprovider
, в зависимости от назначения интерфейса. Эти имена упоминаются в правилах брандмауэра и т. Д.
Я написал сценарий, который запускается при загрузке и определяет, какой интерфейс к чему подключен, а затем соответствующим образом переименовывает их. Я не доволен этим решением, потому что оно включает в себя множество настраиваемых сценариев; Если возможно, хотелось бы чего-нибудь более мейнстримного.
В настоящее время скрипт определяет сети следующими способами:
tcpdump
чтобы увидеть, есть ли трафик с какого-либо из ряда конкретных MAC-адресов, по крайней мере, один из которых, вероятно, отправит что-то в течение нескольких секунд. Я знаю, что это не надежно, но для меня этого достаточно. (Я использую что-то вроде timeout ... tcpdump -c 1 -i interfacename "(ether host foo) or (ether host bar) or ..."
Это хорошо работает для внутренних сетей, где у меня нет ничего специфического для ping, но где я могу ожидать почти постоянный трафик.nmap -sn -oG
по диапазону IP-адресов, чтобы узнать, сколько хостов присутствует и доступно из этого диапазона. Это полезная эвристика для некоторых внутренних сетей, в которых будет много хостов, но я не знаю наверняка, какие именно.Я ищу способ предпочтительно интегрировать это с ifupdown
. Я просмотрел сопоставления, но мне кажется, что с помощью скрипта карты я могу только выбрать логическую конфигурацию для применения к физическому интерфейсу, но не переименовать интерфейс. interfaces(5)
Говорит, что Lines beginning with "rename" are used to rename interfaces. It takes one or more arguments in the form of "CUR=NEW", where CUR is the name of an existing interface, and NEW is the new name. This becomes very powerful when combined with pattern matching for the CUR interface.
; однако сопоставление с образцом мне тоже не помогает.
Если бы можно было использовать результат сопоставления в rename
заявление каким-то образом, это может сработать.
Я также посмотрел на whereami
пакет, но это не выглядело многообещающим.
Я бы больше всего хотел, чтобы ifupdown
переименовать сетевой интерфейс на основе чего-то if-pre-up
сценарий или вывод сценария сопоставления.
Подумав об этом, я пришел к выводу, что могу сделать это с pre-up
скрипты, например:
iface intra inet static
pre-up find-interface intra
address ...
В find-interface
скрипт творит чудеса, чтобы определить, какой ethX
(или enX
или что-то еще) интерфейс должен быть intra
, переименовывает его и ifupdown
берет это оттуда.
Я опубликовал свой find-interface
сценарий в https://gist.github.com/akorn/7b96e78c7d1b3ca70e35261f9b1a2f2b на случай, если кто-то еще сочтет это полезным.