「systemd」- 可预测网络接口名

  CREATED BY JENKINSBOT

什么是“可预测网络接口名”?

从systemd v197开始,会给网络设备一个稳定的、可预测的命名。这区别于传统的eth0、eth1、wlan0之类的命名规则。关于可预测网络接口名的命名规则,这个命名不是随便命名的,命名规则参考源码说明:https://github.com/systemd/systemd/blob/master/src/udev/udev-builtin-net_id.c#L20

为什么要用”可预测网络接口名“?

因为传统的接口命名方式与驱动的探测顺序有关。因此,如果有多张网卡,某个接口是eth0,重启后下次就可能变成eth1。

再比如做Bonding的时候,怎么能接收网卡名变来变去呢?在比如说防火墙,接口命名变了,但是防火墙还作用于原来的接口。这就会导致安全问题。

如何启用?

首先,要确保你的系统使用的初始化进程是systemd,不然免谈,这是systemd 197引入的功能。

在/etc/default/grup配置文件中,参数GRUB_CMDLINE_LINUX_DEFAULT=””中不要添加”net.ifnames=0“。注意是”不要添加“,因为添加表示禁用。

确保/etc/systemd/network/99-default.link没有指向/dev/null。这是用于禁用可预测网络接口名功能的。

最后确保没有使用/etc/systemd/network/中没有自定义的命名规则文件(扩展名为.link的文件)。

在Debian中,指定update-grub命令来更新引导,这一步是为了修改传递给内核的启动参数(net.ifnames=0)。至于其他的发行版,自己想想办法吧。

如何禁用?

如果你觉得这种命名比较傻,可以使用下面的三种方式来使用旧的网卡命名方式:

掩盖网络设备配置文件

You disable the assignment of fixed names, so that the unpredictable kernel names are used again. For this, simply mask udev’s .link file for the default policy:

# ln -s /dev/null /etc/systemd/network/99-default.link

创建上述的软链接即可。

自定义命名方案

You create your own manual naming scheme, for example by naming your interfaces “internet0”, “dmz0” or “lan0”. For that create your own .link files in /etc/systemd/network/, that choose an explicit name or a better naming scheme for one, some, or all of your interfaces. See systemd.link(5) for more information.

使用内核命令参数

在内核的命令行上传递”net.ifnames=0“。这通常可以在各个Linux发行版中通过修改/etc/default/grub文件中的GRUB_CMDLINE_LINUX_DEFAULT参数来实现,然后更新GRUP引导。

在Debian 9中,可以修改/etc/default/grub文件中的GRUB_CMDLINE_LINUX_DEFAULT参数,然后加入”net.ifnames=0“,然后执行update-grub2命令

参考文献

www/Software/systemd/PredictableNetworkInterfaceNames
How to enable “Predictable Network Interface Names”?
serverfault/predictable network interface names in systemd
Change network interface names to eth0 schema in Debian Stretch
Use of Predictable Network Interface Names with alternate kernels
如何在CentOS7上改变网络接口名的方法与步骤

更新日志

08/06/2018 完善文章内容。