如何在启动时重新映射网络接口?

如何在启动时重新映射网络接口?

事实证明,我正在尝试创建一个便携式发行版,同时为任何类型的硬件故障做好准备。

我正在创建(或恢复)一个 Debian 发行版多带(或来自我的备份)并要求生成的磁盘可在新的(大部分兼容)硬件上启动,包括VirtualBox 机器

正如我之前问过,“便携式发行版”所需的少数事情之一是处理网络接口的名称。

例如,在真机上,第一个以太网设备名为enp2s0,在 VirtualBox 中,它名为enp0s3。我应该如何/etc/network/interfaces在启动时生成文件?

是否有一种更通用的方法来重新映射网络接口名称(可能通过符号链接)并让每个应用程序使用这些名称(角色名称),而无需知道底层硬件的真实网络接口名称?

答案1

有几种方法可以解决这个问题。

最熟悉的方法可能是通过使用 boot 选项来禁用新的网络接口命名方案net.ifnames=0,或者通过使用 覆盖/lib/systemd/network/99-default.linkln -s /dev/null /etc/systemd/network/99-default.link或者通过屏蔽实际实现新样式名称的 udev 规则文件ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules...参见Debian 维基有关恢复经典命名方案的各种方法的更多信息。然后你可以重写你的/etc/network/interfaces以仅使用eth0.

最灵活的方法可能是停止使用静态/etc/network/interfaces并切换到 NetworkManager。如果没有进一步配置,它将自动默认在具有活动链路的网络接口上使用 DHCP。即使您有多个 NIC 但实际插入的只有一个(不一定是第一个),这也会自动处理这种情况。

或者您可以做自己的事情,通过编写一个自定义脚本来读取ip link show输出(或 中的链接/sys/class/network)并重写/etc/network/interfaces(或任何您实际的网络配置文件)以适应。然后您可以使用Wants=network-pre.targetBefore=network-pre.targetAfter=module-init-tools.service可能将脚本添加为 systemd 服务DefaultDependencies=no。这应该允许脚本作为早期系统设置的一部分运行,在加载所有模块之后但在网络配置开始之前。

相关内容