如何在 Arch Linux 上设置静态 IP 地址?

如何在 Arch Linux 上设置静态 IP 地址?

读过https://wiki.archlinux.org/title/Network_configuration有好几次,我仍然发现自己在这个看似简单的任务上遇到了困难。

在一个系统上,通过创建文件,我的工作完全正常:

/etc/systemd/network/eth0.network

包含以下内容:

[Match]
Name=eth0

[Network]
Address=192.168.1.200/24
Gateway=192.168.1.1
DNS=192.168.1.1

但请注意,它使用 eth0,因此仅将设置应用于 eth0。

更新并重新启动后,eth0 突然被命名为 enu1u1。

作为一个没有连接任何显示器或键盘的系统,这一点突然变得不可能实现。

现在我有一个文件 enu1u1.network 并且它可以再次工作,并且在重新启动后仍然有效。

处理这个问题的正确方法是什么?我真的需要为此创建一个 udev 规则吗?系统的更新是什么,只是覆盖了我制定的这条规则,然后我又回到了原点?

我有一个非常简单的设置:

该系统有一个并且将永远有一个以太网接口。

这就是我要的:

我希望这个以太网接口始终获得 IP 192.168.1.200。

我该如何做到这一点,并保证它在更新和重新启动后仍然存在?

我的想法是使用 udev,有足够的规则来尝试很好地匹配它,然后使 udev 规则文件不可变以适应更新。然而,即便如此,我也并不感到完全安全。如果某个我不认识的网络管理器变得活跃或默认安装,并且现在覆盖静态 IP,想要使用 DHCP,该怎么办?

总之,我感觉现在设置静态IP很乱。我可能只是变老了,并且由于不知道执行此操作的正确方法而滥用系统。

我想要一个可以编辑的简单 RC 文件,只需指定 DHCP=no、IP=...,它就应该始终有效。

答案1

从 v197 开始systemd/udev分配“所有本地接口的可预测、稳定的本地接口名称”。请参阅 systemd.io 发布的内容可预测的网络接口名称

在 Arch 中你可以恢复为传统的接口名称并通过屏蔽udev规则来禁用可预测的接口名称

# ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules

或添加net.ifnames=0内核参数

答案2

enu1u1是 systemd 197 中引入的“可预测”接口名称:https://systemd.io/PREDICTABLE_INTERFACE_NAMES/

我建议坚持使用这个新命名,因为旧的命名方案(eth0、eth1...)高度依赖于内核探测接口的顺序。由于您关心的是更新和重新启动后的生存情况,因此这个新的可预测名称就是正确的选择(并且您已经配置了它)。

相关内容