j本文介绍 Linux 系统中网卡命名规范.
1. 网络接口命名规范
NetworkInterfaceNames 列出了下面5种可用的网络接口命名规范(Network Interface Naming Scheme):
Naming Scheme | Examples |
---|---|
Original Simple Scheme | eth1,eth2 |
“Persistent Names” Scheme | … |
Miscellaneous Old Scheme | … |
“Predictable Names” Scheme | eno1, wlp1s3 |
Custom Schemes using .link files | … |
现在较新的 Linux 发行版采用了 “Predictable Names” Scheme,例如 CentOS7、Ubuntu16.04 等. 与 Original Simple Scheme 相比,“Predictable Names” Scheme 解决了网络接口名称和网络接口设备映射不唯一导致的安全隐患,但是也导致了复杂的可读性.
2. Predictable Names 命名方式
2.1 简述
从 systemd v197 开始,Linux 对网络接口加入了 Predictable Names 的命名规范,它包含如下策略:
- 1:如果 Firmware 或者 BIOS 提供的板载设备的索引号可用就用此命名. 例如
eno1
. - 2:如果 Firmware 或者 BIOS 提供的 PCI-E 扩展插槽索引号可用就用此命名. 例如
ens1
. - 3:如果硬件接口的物理或者位置信息可用就用此命名. 例如
enp2s0
. - 4:如果网络接口的 MAC 地址可用就用此命名. 例如
enx78e7d1ea46da
. - 5:传统的内核原生命名方式. 例如
eth0
.
默认地,systemd v197 使用策略1,如果策略1条件不满如则使用策略2,如果策略2条件不满足使用策略3,如果其它条件都不满足使用策略5. 策略4默认不使用,当用户选择是否启用.
2.2 详解
详细的 systemd v197 命名规则见 systemd.net-naming-scheme(7).
所有名称包含前缀,前缀由两个字母组成,标明接口类型:
Prefix | Description |
---|---|
en | 以太网(Ethernet) |
ib | 无限带宽(InfiniBand) |
sl | 串列线路互联网协议(slip:Serial line IP) |
wl | 无线局域网(WLAN,Wireless local area network) |
ww | 无线广域网(WWAN,Wireless wide area network) |
由 udev net_id 输出下列可以获得的设备信息.
1. 固件板载设备信息. 点击ID_NET_NAME_ONBOARD
ID_NET_NAME_ONBOARD=prefixonumber
2. 固件板载设备文本标签,从 v243 开始不再使用. 点击ID_NET_LABEL_ONBOARD
ID_NET_LABEL_ONBOARD=prefix label
3. 网络接口 MAC 地址. 点击ID_NET_NAME_MAC
ID_NET_NAME_MAC=prefixxAABBCCDDEEFF
4. 插槽位置. 点击ID_NET_NAME_SLOT
ID_NET_NAME_SLOT=prefix[Pdomain]sslot[ffunction][nport_name|ddev_port],
ID_NET_NAME_SLOT=prefixvslot,
ID_NET_NAME_SLOT=prefix[Pdomain]sslot[ffunction][nport_name|ddev_port]bnumber,
ID_NET_NAME_SLOT=prefix[Pdomain]sslot[ffunction][nport_name|ddev_port]uport…[cconfig][iinterface],
ID_NET_NAME_SLOT=prefix[Pdomain]sslot[ffunction][nport_name|ddev_port]vslot
Format | Description |
---|---|
prefix [Pdomain] sslot [ffunction] [nport_name | ddev_port] | PCI slot number |
prefix vslot | VIO slot number (IBM PowerVM) |
… bnumber | Broadcom bus (BCMA) core number |
… uport… [cconfig] [iinterface] | USB port number chain |
… vslot | SR-VIO slot number |
5. 设备安装位置. 点击ID_NET_NAME_PATH
ID_NET_NAME_PATH=prefixcbus_id,
ID_NET_NAME_PATH=prefixavendormodeliinstance,
ID_NET_NAME_PATH=prefixiaddressnport_name,
ID_NET_NAME_PATH=prefix[Pdomain]pbussslot[ffunction][nphys_port_name|ddev_port],
ID_NET_NAME_PATH=prefix[Pdomain]pbussslot[ffunction][nphys_port_name|ddev_port]bnumber,
ID_NET_NAME_PATH=prefix[Pdomain]pbussslot[ffunction][nphys_port_name|ddev_port]uport…[cconfig][iinterface]¶
Format | Description |
---|---|
prefix cbus_id | CCW or grouped CCW device identifier |
prefix avendor model iinstance | ACPI path names for ARM64 platform devices |
prefix iaddress nport_name | Netdevsim (simulated networking device) device number and port name |
prefix [Pdomain] pbus sslot [ffunction] [nphys_port_name | ddev_port] | PCI geographical location |
… bnumber | Broadcom bus (BCMA) core number |
… uport… [cconfig] [iinterface] | USB port number chain |
根据 2.1 所述命名方式选择合适的 ID_NET_NAME_X
作为网络接口名称.
3.设置使用传统命名方式
提供以下方法使用传统的网络接口命名方式. 但是,不建议退回传统命名方法,没必要且有隐患.
编辑 /etc/default/grub
文件
sudo vim /etc/default/grub
修改
GRUB_CMDLINE_LINUX=""
为
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
生效
sudo update-grub
或者
sudo grub-mkconfig -o /boot/grub/grub.cfg
重启系统
sudo shutdown -r now
修改前
修改后