问题描述
传统的网络接口命名方式(eth0, eth1, …)与驱动的探测顺序有关,这样带来的问题是:
1)如果有多张网卡,某个接口是以 eth0 命名,重启后下次就可能变成以 eth1 命名;
2)再比如,当做 Bonding 时候,怎么能接受网卡名变来变去呢?
3)再比如,防火墙,接口命名发生变化,但是防火墙还作用于原来的接口,这就会导致安全问题;
解决方案
可预测网络接口名
从 systemd v197 开始,会给网络设备一个稳定的、可预测的命名。这区别于传统的 eth0、eth1、wlan0 之类的命名规则;
关于可预测网络接口名的命名规则,参考源码说明:https://github.com/systemd/systemd/blob/master/src/udev/udev-builtin-net_id.c#L20
如何启用
首先,要确保的系统使用 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 的文件);
1)在 Debian 中,通过命令 update-grub 来更新引导,这一步是为了修改传递给内核的启动参数(net.ifnames=0);
2)至于其他的发行版配置方法,需要参考发行版的文档说明;
如何禁用
如果觉得这种命名比较傻,可以使用下面的三种方式来使用旧的网卡命名方式:
掩盖网络设备配置文件
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:
创建上述的软链接即可;
自定义命名方案
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命令
接口名称发生变化
问题描述
虽然我们开启可预测的接口名称,但是接口名称却发生变化:
1)我们的主板具有 3 个 PCIE 接口,其中 2 个接入 PCIE 网卡,另 1 个接入磁盘阵列卡;
2)随着磁盘阵列卡的插拔,我们发现 PCIE 网卡的名称发生变化,同时主板网卡的名称也发生变化;
原因分析
我们并不具备相关的知识背景,问题暂时搁置;
解决方案
通过 systemd.link 服务,来配置固定接口名称:
# /etc/systemd/network/10-dmz.link [Match] MACAddress=00:a0:de:63:7a:e6 [Link] Name=dmz0
参考文献
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 上改变网络接口名的方法与步骤