CentOS 7 如何通过 macaddress 获取接口名称?

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}'

答案1

我会用一个小脚本来做到这一点,首先将接口的名称放入一个变量中,然后用它来设置新名称

#!/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; }

答案2

您可以让一致的网络设备命名根据 MA​​C 地址创建接口名称。例如,使用此方法,硬件地址为 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,则需要手动干预来重新配置网络。

答案3

您还可以通过创建文件 /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(如果处于活动状态))。

相关内容