CentOS 7 как получить имя интерфейса по адресу macaddress?

Я пытаюсь понять, как я могу получить имя сетевого интерфейса, а затем изменить имя. Прямо сейчас легко изменить имя с помощью этого примера:

ip link set eth1 name <newName>;

Однако я хочу иметь сценарий или команду, в которой он автоматически устанавливает имя ссылки на основе MAC-адреса.

Пример, я пытаюсь сделать это:

1) Получите имя интерфейса с MAC-адресом «68: 05: ca: 0e: 74: c4».

2) Измените имя интерфейса, как только я его найду, найдя его по MAC-адресу. Путем выдачи 'ip link set name;'

Можно ли сделать это в сценарии / команде bash, чтобы автоматически найти имя интерфейса и переименовать его? Я пытался сделать это с помощью "ip link show" и с помощью awk, но мне не повезло.

Когда я пытаюсь использовать awk, я сталкиваюсь с проблемами, так как имя интерфейса и MAC-адрес находятся в разных строках .

ip link | awk '{print $2}'
2
задан 5 September 2019 в 08:09
3 ответа

Я бы сделал это с помощью небольшого скрипта, который сначала получил имя интерфейса в переменной, а затем использовал его для установки нового имени

#!/bin/bash

oldinterfacename=$(ip -br link | awk '$3 ~ /90:10:00:9f:46:c3/ {print $1}')
if [ -z "$oldinterfacename" ]
then
  echo "Did not find interface to rename"
  exit 1
fi
ip link set "$oldinterfacename" name newName  || { echo "Error: Failed to set newName"  ; exit 1; }
1
ответ дан 3 December 2019 в 09:30

Вы также можете задать произвольные имена устройств, создав файл /etc/udev/rules.d/70-persistent-net.rules, который содержит сопоставление с MAC-АДРЕСОМ для каждого интерфейса. Например:

# eth at pci address: 00:03.0
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:ad:33:02" ATTR{type}=="1", NAME="enp0"

# eth at pci address: 00:03.1
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:ad:33:03" ATTR{type}=="1", NAME="enp1"

После создания вам необходимо - перезагрузитесь, чтобы применить изменения. - изменить конфигурацию сети (например, / etc / sysconfig / network-scripts / ifcfg и файлы маршрута или использовать NetworkManager, если он активен).

2
ответ дан 3 December 2019 в 09:30

Вы можете согласовать имена сетевых устройств, создавая имена интерфейсов на основе MAC-адреса. Например, с помощью этого метода интерфейс с аппаратным адресом 68: 05: ca: 0e: 74: c4 будет называться enx6805ca0e74c4 .

В RHEL / CentOS 7 вам необходимо изменить udev правила именования совсем немного. Вы можете сделать это с помощью следующих указаний:

Скопируйте файл по умолчанию /usr/lib/udev/rules.d/80-net-name-slot.rules в каталог / etc / udev / rules.d , затем отредактируйте копию.

В скопированном файле найдите эти три строки:

NAME=="", ENV{ID_NET_NAME_ONBOARD}!="", NAME="$env{ID_NET_NAME_ONBOARD}"
NAME=="", ENV{ID_NET_NAME_SLOT}!="", NAME="$env{ID_NET_NAME_SLOT}"
NAME=="", ENV{ID_NET_NAME_PATH}!="", NAME="$env{ID_NET_NAME_PATH}"

Замените эти строки на:

NAME=="", ENV{ID_NET_NAME_MAC}!="", NAME="$env{ID_NET_NAME_MAC}"

Затем перезагрузитесь.

Перед изменением интерфейс выглядит так:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:21:d1:84 brd ff:ff:ff:ff:ff:ff
    inet 172.20.203.174/24 brd 172.20.203.255 scope global noprefixroute dynamic enx52540021d184
       valid_lft 3588sec preferred_lft 3588sec
    inet6 2001:db8:b0b9:0:3962::a1be/128 scope global noprefixroute dynamic 
       valid_lft 3591sec preferred_lft 3591sec
    inet6 fe80::5054:ff:fe21:d184/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Теперь после изменения:

2: enx52540021d184: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:21:d1:84 brd ff:ff:ff:ff:ff:ff
    inet 172.20.203.174/24 brd 172.20.203.255 scope global noprefixroute dynamic enx52540021d184
       valid_lft 3588sec preferred_lft 3588sec
    inet6 2001:db8:b0b9:0:3962::a1be/128 scope global noprefixroute dynamic 
       valid_lft 3591sec preferred_lft 3591sec
    inet6 fe80::5054:ff:fe21:d184/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Помните, что при этой схеме именования требуется ручное вмешательство для перенастройки сети, если вам нужно заменить NIC.

2
ответ дан 3 December 2019 в 09:30

Теги

Похожие вопросы