/etc/network/interfaces - 通用网络配置

/etc/network/interfaces - 通用网络配置

我有两台来自 Orange pi 的单板计算机,每台都有两个板载网络适配器。其中一个通常称为 eth0,而另一个则因板而异。它有不同的名称,例如 enxc0742bffdf83 和 enxc0742bffdf6e。我用 Armbian 图像来为开发板供电。我在其中一个上配置了两个网络适配器,以便它们不会自动从 DCHP 获取 IP 地址。我通过修改 /etc/network/interfaces 文件来做到这一点,如下所示。

auto  eth0
iface eth0 inet manual

auto  enxc0742bffdf6e
iface enxc0742bffdf6e inet manual

我希望能够将手动配置的映像复制到另一张 SD 卡中并直接运行,而无需再次手动更改 /etc/network/interfaces。是否可以选择使用适用于所有主板的通用别名,例如适配器 1 和适配器 2?如果没有,是否有办法创建一个通用脚本,在系统启动时使用每个板适配器的正确名称自动更新 /etc/network/interfaces 文件?

答案1

以 开头的网络接口名称enx...包括相关 NIC 的 MAC 地址。它可能是由于文件而被分配的/etc/systemd/network/81-usbnet.link

请参阅man systemd.net-naming-schememan systemd.link了解更多详细信息。

根据第二个 NIC 的属性,您可能无法编写与/etc/systemd/network/*.link任何板上的第二个 NIC 相匹配的通用文件,并为其分配所需的名称。如果您能做到这一点,请创建一个*.link如下所示的文件并为其命名,以便它81-usbnet.link按基本 ASCII 字母数字排序顺序排在前面:

[Match]
<some condition that matches your second NIC>

[Link]
NamePolicy=
Name=<your desired name for the second NIC>

如果您的系统使用 initramfs,您可能需要重新创建它,以便该*.link文件将包含在其中,并且即使在系统仍在 initramfs 中运行时加载 NIC 驱动程序,该文件也会生效。


或者,如果您确定内核分配的名称(如)eth0在您的系统上稳定,则可以添加内核引导参数net.ifnames=0,并且您将获得两个网络接口,即eth0eth1。只需确保您的网络接口驱动程序模块始终以相同的顺序加载即可。您可能想将这样的内容添加到/etc/modprobe.d/*.conf文件中:

install <second_NIC_driver> /sbin/modprobe <first_NIC_driver> && /sbin/modprobe -i <second_NIC_driver>

这将确保即使内核由于某种原因首先加载第二个网卡的驱动程序,模块加载过程也将始终在其之前加载第一个网卡的驱动程序,以便第一个网卡始终捕获名称eth0

答案2

systemd-networkd考虑使用该服务(系统附带),而不是 /etc/network/interfaces 。

启用该服务并通过/etc/systemd/network/*.network文件配置您的网络(请参阅 参考资料man systemd.network),可以将其配置为根据各种条件匹配接口 – 例如,接口名称通配符或驱动程序名称:

[Match]
Name=enx*

[Network]
...
[Match]
Driver=r8188eu

[Network]
Address=...

(文件列表*.network按 ASCII 字母顺序读取,每个接口均从第一的仅匹配文件,如networkctl status.例如,您可以在“20-eth0.network”中进行与确切名称匹配的特定静态配置,然后在“50-other.network”中进行与所有以太网设备匹配的通用 DHCP 配置。

相关内容