运行ifconfig -a时,我只会得到lo和enp0s10接口,而不是传统的eth0

enp0s10是什么意思?为什么没有eth0?

评论

不推荐使用ifconfig。考虑尽快从iproute2迁移到ip。

正如答案所说,这是systemd的变化。要恢复您的eth0,请使用内核选项net.ifnames = 0 biosdevname = 0(请参见此线程)。在下面的答案中使用ln -s / dev / null /etc/udev/rules.d/80-net-setup-link.rule在Debian 10(Buster)中不起作用

@MrCalvin:ln -s ...应该更新,请参见下文

#1 楼

这是udevd现在为以太网设备分配名称的方式的变化。现在您的设备使用“可预测的接口名称”,该名称基于(并引用源):



包含固件/ BIOS的名称为板载提供了索引号设备(例如:eno1)
包含提供的固件/ BIOS的名称PCI Express热插拔插槽索引号(例如:ens1)
包含硬件连接器的物理/地理位置的名称(例如:enp2s0)
包含接口的MAC地址的名称(示例:enx78e7d1ea46da)
经典的,不可预测的内核本机ethX命名(示例:eth0)




这是为什么改变了已在systemd freedesktop.org页上进行了记录,并提供了禁用此方法的方法:

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


,或者,如果您使用的是较早的版本:

ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules


评论


通过freedesktop,org链接,主要要点是:内核应用的网络接口的经典命名方案是,在驱动程序探测到的所有接口上,简单地为所有接口分配以“ eth”开头的名称。由于对于现代技术而言,通常无法预测驱动程序探测,因此,这意味着一旦有多个网​​络接口可用,名称的分配通常就不再固定,并且很可能在一个引导上最终出现“ eth0” ”。这可能会带来严重的安全隐患...

–lepe
16-10-17在2:43



这也适用于docker映像。因此,尝试在2个docker网络之间设置网桥会在2年前引起问题,因为网络端口在下次启动时可能会反转。桥接设备不可能的情况。

– U.V.
20 Dec 16'在12:01

#2 楼

回答“ enp0s10是什么意思?”问题:

enp0s10:
| | |
v | |
en| |   --> ethernet
  v |
  p0|   --> bus number (0)
    v
    s10 --> slot number (10)


来源:GitHub上的udev-builtin-net_id.c

评论


来找这个。

–雏鸟
17年7月7日在8:38

由于NIC名称的末尾没有... fN部分,因此我们可以推断出函数编号为0。将数字转换为十六进制(十六进制为10 =“ a”)后,我们知道enp0s10表示PCI设备。 ID 00:0a.0。

–telcoM
19年4月13日在6:13

还有freedesktop.org/software/systemd/man/…

–user3840170
20/12/08在20:21

#3 楼

如上所述,enp0s10表示以太网(en),前缀0(p0),插槽10(s10)。总线号,设备号和功能号从PCI设备的总线设备功能(BDF)中提取,以创建可预测网络接口名称的前缀,插槽和功能部分。
如果功能为0,则f0部分被省略。为了使本示例更加清楚,我将前缀从p0更改为p4,将功能从f0更改为f1。
扩展'DIG mbl'发布的答案:
enp4s10f1                        pci 0000:04:0a.1
| | |  |                                |  |  | |
| | |  |                   domain <- 0000  |  | |
| | |  |                                   |  | |
en| |  |  --> ethernet                     |  | |
  | |  |                                   |  | |
  p4|  |  --> prefix/bus number (4)   <-- 04  | |
    |  |                                      | |
    s10|  --> slot/device number (10) <--    10 |
       |                                        |
       f1 --> function number (1)     <--       1

https:/ /wiki.xen.org/wiki/Bus:Device.Function_(BDF)_Notation
https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames
我遇到了一个带有u7位于末尾,用于USB端口。本文档包含一些不同的标签可能性:
https://access.redhat.com/documentation/zh-CN/red_hat_enterprise_linux/7/html/networking_guide/sec-understanding_the_predictable_network_interface_device_names

评论


我有点困惑。您说过“由于函数为0,所以省略了f0部分”,但是为什么更改前缀以不省略f0呢?

–ebk
20-5-13在11:28



我试图说明可预测网络接口名称的每个部分。我更改了示例,将f0更改为f1。我更改了前缀以使插图更易于理解;更改与功能部分无关。谢谢

– mhck
20-5-13在12:20



我现在明白了:)感谢您的出色回答。

–ebk
20年5月13日在13:03

#4 楼

要引用通过@Braiam链接的禁用的全文:

我不喜欢这个,如何禁用它?
您基本上有三个选择:

您禁用固定名称的分配,以便再次使用不可预测的内核名称。为此,只需为默认策略屏蔽
udev的.link文件:ln -s /dev/null /etc/systemd/network/99-default.link
您可以创建自己的手动命名方案,例如,通过将接口命名为“ internet0”,“ dmz0”或“ lan0”。为此,请在/etc/systemd/network/中创建您自己的
.link文件,这些文件为一个,某些或所有
接口选择一个明确的
名称或更好的命名方案。有关更多信息,请参见systemd.link(5)
在内核命令行上传递net.ifnames=0


TL; DR:它已重命名为99-default.link

#5 楼

您可以在内核命令行参数中使用
net.ifnames=0

,并且您的接口名称将再次称为eth0