如何可靠地将物理以太网端口位置映射到 eth0/1

如何可靠地将物理以太网端口位置映射到 eth0/1

我正在使用 Debian 9(延伸版)。我有一个带有四个以太网接口的主板,两个在顶部,两个在底部。对于我的用例,我只使用其中两个。我的问题是:如何使左上角为 eth0,右上角为 eth1?

最初这可能听起来很容易。 “使用 MAC 地址”可能是您的第一反应。可悲的是,这并不那么容易。我需要将其扩展到数百个这样的主板,其中一些最终将位于同一网络上,因此 MAC 将是唯一的。

这是输出的片段lspci

02:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
03:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
04:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
05:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)

我最初的做法是找出其中哪个对应于我关心的物理接口,并使用如下所示的 systemd 网络链接文件:

[Match]
Path=pci-0000:02:00.0
[Link]
NamePolicy=
Name=eth0

这实际上看起来效果很好。问题是 BDF 实际上并不稳定。有时我需要在此处放置一个火线卡,该卡最终会占用较早的总线编号,并将所有以太网接口恢复:

02:00.0 FireWire (IEEE 1394): Texas Instruments XIO2213A /B/XIO2221 IEEE-1394b OHCI Controller [Cheetah Express] (rev 01)
03:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
04:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
05:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
06:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)

不过,这四人的组合似乎从来没有被分裂过。有人可以确认这四个设备的相对顺序在多个相同的主板之间至少是明确定义的吗?也许更具体地说:我可以相信一个特定的IFINDEX可靠地指向多个相同主板上的相同物理端口的想法吗?到目前为止,这似乎是我的经历,但除了轶事之外,我还没有找到任何真正证实这一点的东西。即使这是真的,我也会遇到这样一个事实:stretch 中的 systemd 版本不支持Property链接文件中的密钥。我似乎只被困住了MACAddress, Path, Driver, Type, Name, Host, , Virtualization,KernelCommandLineArchitecture

目前,我发现的最好的解决方案是使用已弃用的 udev 支持并将这样的东西放入/etc/udev/rules.d/70-persistent-net.rules

ACTION=="add", SUBSYSTEM=="net", ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1533", ATTR{ifindex}=="5", NAME:="eth0"
ACTION=="add", SUBSYSTEM=="net", ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1533", ATTR{ifindex}=="3", NAME:="eth1"
ACTION=="add", SUBSYSTEM=="net", ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1533", ATTR{ifindex}=="4", NAME:="eth2"
ACTION=="add", SUBSYSTEM=="net", ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1533", ATTR{ifindex}=="2", NAME:="eth3"

在 systemd v243 之前的新世界中,我有什么办法可以做到这一点吗?有没有比 IFINDEX 更好/更稳定的东西?

相关内容