我正尝试在Ubuntu 16.04 VPS上重命名networking接口,但无法这样做。 系统命名我的主要networking接口enp0s3。 我想将这个接口重命名为eth0。
根据systemd.link文档,我创build了一个名为/etc/systemd/network/10-eth0.link ,内容如下:
[Match] MACAddress=08:00:27:f7:57:e5 [Link] Name=eth0
MAC地址与接口的ip a输出中给出的MAC地址相匹配。 我还将/etc/network/interfaces文件中的enp0s3条目重命名为eth0。 虽然,当我重新启动机器时,界面仍被命名为enp0s3。
dmesg输出中的以下条目对我来说很有意思:
e1000 0000:00:03.0 eth0 🙁 PCI:33MHz:32位)08:00:27:f7:57:e5
e1000 0000:00:03.0 eth0:Intel(R)PRO / 1000networking连接
e1000 0000:00:03.0 enp0s3:从eth0重命名
显然,它起始于eth0,但是之后又重新命名为enp0s3。 我不知道为什么?
当我尝试debugging链接文件时,我得到以下输出:
$ sudo udevadm test-builtin net_setup_link /etc/systemd/network/10-eth0.link calling: test-builtin === trie on-disk === tool version: 229 file size: 6841778 bytes header size 80 bytes strings 1755242 bytes nodes 5086456 bytes Load module index timestamp of 'etc/systemd/network' changed Parsed configuration file /lib/systemd/network/99-default.link Parsed configuration file /etc/systemd/network/10-eth0.link Created link configuration context. unable to open device '/sys/etc/systemd/network/10-eth0.link' Unload module index Unloaded link configuration context.
关于它无法打开设备的线似乎很奇怪。 我不知道为什么它是这样做的,根目录下没有etc目录,我应该创build它吗?
任何洞察为什么我的界面名称不坚持是非常受欢迎的。
根据https://www.freedesktop.org/software/systemd/man/systemd.link.html ,默认的命名策略是:
# /usr/lib/systemd/network/99-default.link [Link] NamePolicy=kernel database onboard slot path MACAddressPolicy=persistent
所以我怀疑你可能想要添加以下行到你的eth0.link:
NamePolicy=mac
我没有testing过,所以我不确定,但是我怀疑问题是你在MAC上匹配,但没有命名策略来制作这个棍子。
每个政策可能会失败,并使用第一个成功的政策。 该名称不是直接设置,而是作为属性“ID_NET_NAME”导出到udev,默认情况下,该属性被udev规则用于设置“NAME”。 如果名称已经被用户空间设置,则不执行重命名
这只是一个猜测。
你也应该能够禁用default.link,至less每个https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
在我运行的一些openSUSE系统上,我遇到了一个类似的问题,除了必须使用99-default.link'技巧'之外,还通过在/etc/udev/rules.d下创build两个文件来解决这个问题(请参阅https ://unix.stackexchange.com/questions/118272/80-net-setup-link-no-longer-functions-when-i-downgraded-systemd,https://wiki.archlinux.org/index.php/Network_configuration #Device_names和https://wiki.gentoo.org/wiki/Udev/Upgrade_Guide ):
sudo touch /etc/udev/rules.d/80-net-setup-link.rules (或只是确保该名称的空文件在该位置)
和
我创build了/etc/udev/rules.d/10-persistent-network.rules:
ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*", ATTR{tx_queue_len}="1000"
在你的情况下,你实际上可以使用该文件来设置你想要的名称:
ACTION=="add", SUBSYSTEM=="net",ATTR{address}=="08:00:27:f7:57:e5",NAME="eth0"
根据systemd文档,这是由于新的可预测的networking接口名称
文件说,你有三个选项来禁用行为,可能是第三个是最简单的:
您禁用固定名称的分配,以便再次使用不可预知的内核名称。 为此,只需将udev的.link文件掩盖为默认策略即可:ln -s / dev / null /etc/systemd/network/99-default.link
您可以创build自己的手动命名scheme,例如命名接口“internet0”,“dmz0”或“lan0”。 为此,在/ etc / systemd / network /中创build自己的.link文件,为一个,一些或全部接口select一个明确的名称或更好的命名scheme。 有关更多信息,请参阅systemd.link(5)。
在内核命令行上传递net.ifnames = 0
我已经尝试了以上所有。 没有任何工作 我一直在不断研究2周。
我确实find了答案和它的工作。 这里:
https://superuser.com/questions/914646/renaming-network-interface-with-systemd
这篇文章包含一个链接到Lennart的笔记,根本不帮助。 阅读post,你应该赢。
以下是我如何工作:
第1步:sudo nano /etc/udev/rules.d/70-local-net-names.rules
SUBSYSTEM ==“net”,ACTION ==“add”,ATTR {address} ==“74:da:38:68:55:c1”,NAME =“wlan1”
此文件需要在/usr/lib/udev/rules.d/80-net-setup-link.rules之前订购
这在Debian Stretch上运行。 它也应该在Ubuntu上工作。