У меня есть система 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)
говорит, что Строки, начинающиеся с «переименовать», используются для переименования интерфейсов. Он принимает один или несколько аргументов в форме «CUR = NEW», где CUR - это имя существующего интерфейса, а NEW - новое имя. Это становится очень эффективным в сочетании с сопоставлением с образцом для интерфейса CUR.
; однако сопоставление с образцом мне тоже не помогает.
Если бы можно было каким-то образом использовать результат сопоставления в операторе 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 на случай, если кто-то еще сочтет это полезным.