Ubuntu 17.04:如何根据路径重命名 USB 网络接口?(不是基于 MAC)

Ubuntu 17.04:如何根据路径重命名 USB 网络接口?(不是基于 MAC)

不,这不是重复的为什么我的 Wi-Fi 适配器在 16.04 中没有显示为 wlan0?,因为这解释了如何恢复eth0命名,但没有解释如何单独命名特定的接口。

我不想根据 MA​​C 匹配进行分配。我所需要的只是指定名称根据 USB 路径

当我插入 USB 网络适配器时,在 Ubuntu 17.04 上,它会根据其 MAC 分配一个网络接口名称,例如encx000000000000。现在我想根据其 ID_PATH= 将其重命名为更具说明性的名称pci-000:02:03.0-usb-0:1:1.0。特别是,我不想根据 MA​​C 地址进行匹配其理由是,更换接口后所有东西都会崩溃,但如果有人只是更换网络接口硬件,使新硬件与旧硬件位于同一位置,系统就会继续运行而不需要 IT 和重新配置支持。

因此我创建了一个文件/etc/systemd/network/50-my-island.link

[Match]
Path=pci-000:02:03.0-usb-0:1:1.0
[Link]
Name=island0

不幸的是,名称从未被分配。使用时udevadm info我可以看到设置了ID_NET_NAME=island0,但它不适用。尝试NamePolicy=NamePolicy=name在该[Link]部分下也无济于事。

我迷路了!我该如何在 .link 文件中将我的名字分配给我的 USB 网络适配器?如果不借助某些 udev 规则,这是否可行?那么,既然 .link 文件似乎在我的例子中不起作用,为什么还要使用它呢?我在哪里犯了错误?

答案1

所以我终于自己弄清楚了到底发生了什么。

唉,我看到的问题是重命名USB基于网络接口无法工作实际上是由/lib/udev/rules.d/73-usb-net-by-mac.rulesUbuntu/Debian(以及 Raspbian)上的 udev 规则引起的。罪魁祸首在这里:

ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", NAME=="", \
  ATTR{address}=="?[014589cd]:*", \
  TEST!="/etc/udev/rules.d/80-net-setup-link.rules", \
  TEST!="/etc/systemd/network/99-default.link", \
    IMPORT{builtin}="net_id", NAME="$env{ID_NET_NAME_MAC}"

注意这个特定的规则如何检查/etc/udev/rules.d/80-net-setup-link.rules存在;如果不存在,NAME则将设置为基于 MAC48 的名称,之后将使用默认安装规则/lib/udev/rules.d/80-net-setup-link.rules永远没有机会分配NAME。这真是太可悲了。又一次。

为了能够分配用户定义的名称USB网络接口,我们需要有/etc/udev/rules.d/80-net-setup-link.rules73-usb-net-by-mac.rules,因为这是分配之前检查的规则集NAME

这意味着只需从到链接/etc/udev/rules.d/80-net-setup-link.rules即可/lib/udev/rules.d/80-net-setup-link.rules避免用户分配的网络接口名称被忽略。

sudo ln -s /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules

重启。完成。

请注意,此方式的副作用73-usb-net-by-mac.rules是,这会导致所有基于 USB 的网络接口采用“旧”命名eth0等等,除非在.link文件中明确命名。

我不知道为什么要这样写规则,因为对于所有未明确命名的 USB 网络适配器,使用基于 MAC 的命名方式是可以的。再想想……,使用基于 MAC48 的名称没有任何意义,除非你碰巧标记了所有的 USB 网络加密狗并不断地交换它们;但也许基于 MAC 的名称与扩展坞一起使用,在那里它实际上是有意义的......?

答案2

按照此主题 尤其是这一段:

自定义网络接口命名...规则文件的名称需要有一个小于“80”的前缀,以便它在 /lib/udev/rules.d/80-net-setup-link.rules 之前运行,并且应该有一个大于“75”的前缀,以便它在 75-net-description.rules 之后运行,因此您可以使用 ID_VENDOR 和类似属性的匹配。...

我确实创建了这个文件:/etc/udev/rules.d/76-netnames.rules

有此内容

# USB device by path
# get ID_PATH if not present yet
ENV{ID_PATH}=="", IMPORT{builtin}="path_id"
SUBSYSTEM=="net", ACTION=="add", ENV{ID_PATH}=="*-usb-0:1.*", NAME="eth%n"

它运行良好,无需您提供的解决方法。

我在 debian preseed.cfg 中创建了这个文件,以便在 Debian 全自动安装中设置我的目标网络配置。在 Intel NUC 上执行此操作后,我的内部 NIC 现在由 Debian 9.5 (stretch)
命名eno1

相关内容