Linux系统网卡命名
一、Linux系统中网络管理的重要性
在实际的生产环境中,大多数的业务应用都需要借助网络资源被外部访问或者访问外部,所以如果想让你的业务应用可以正常工作,那么运维人员就需要保证网络的稳定性,保证网络配置正确,这才才能保证业务正常稳定运行。由于业务应用是复杂且多样的,有的业务可能只需要被访问到即可,即我们可以通过某个网络访问到业务应用,这种网络我们称之为业务网络或者数据网络。有的业务应用为了保证数据的可用性,可能需要使用专门的高可用网络存储来让业务应用的数据不会因为某个业务节点故障而无法访问或者丢失,业务应用访问网络存储的网络我们称之为存储网络。由于业务应用都是运行在Linux操作系统之上的,所以有时候针对某些问题的故障排除我们可以需要访问到linux操作系统,从操作系统层面排查业务应用的问题,我们访问操作系统或者对操作系统进行管理的网络我们称之为管理网络(带内网络-inband networking)。所以我们在实际的生产环境上,并不是针对单一个网卡进行配置管理,我们可能要对多种不同功能的网卡进行管理,而且为了保证可用性,我们可能还需要配置多网卡链路聚合,来防止单个网卡(NIC)或者网口(port)故障导致某些网络故障。常规的网卡配置就是为网卡配置正确的ip地址,子网掩码,网关IP,DNS地址。进阶的网卡配置是需要做网卡的链路聚合,就是我们常说的将多个网口进行绑定,聚合成一个网口,防止网口的单点故障导致无法通过网络访问到你服务器上的业务。有些业务流量还需要通过不同的vlan网络访问不同的功能,所以我们还要了解vlan子接口的配置。有时候我们光配置网关IP还不够,还需要配置一些静态路由。有些业务应用可能不是直接运行在linux系统上,可能是以虚拟机的形式或者以容器的形式运行的,所以这些运行业务应用的虚拟机或者容器就需要通过"网桥"或者"虚拟交换机"来连接他们的虚拟网卡,然后通过不同的方式访问外部或者被外部客户访问到。网络管理是保证业务运行的必要知识,所以如果不懂网络管理,那么当业务出现了网络相关的问题,你就无法进行有效排查,所以作为linux运维人员,网络管理是非常重要的内容,必须要达到精通的程度才可以。
二、Linux系统的网络管理架构
1.确定网卡名称在对网卡进行配置之前,需要确定网卡的名称,但是网卡的名称实际上有可能会有变化,由于网卡的mac地址默认是不会改变的,所以有些软件会根据你提供的网卡mac地址来选择到正确的网卡名称来对网卡进行配置。但是我们需要知道为什么同样的网卡在不同的linux发行版本上会有不同的名称,这个等我们后面再说。2.网卡临时配置我们在人为手工配置网卡的ip地址时,可以使用一些命令临时为网卡配置ip地址,但是一般这种情况只用于测试,因为当你重启系统后,临时配置的ip地址就会消失,不会在重启后仍然存在。3.网卡永久配置当我们需要让我们对网卡配置的ip等信息持久存在时,我们需要将配置写入配置文件,这样即使重启系统后,网卡也会获得配置文件指定的ip地址等信息,不用担心重启后网络配置丢失。4.多网卡配置在生产环境中,服务器往往有多个网卡,每个网卡有多个网口,除了载网卡外,还有额外的PCIE网卡或者子卡,不同的网卡可以用于配置不同类型的网络,常见的网络种类有管理网络,业务网络(数据网络),存储网络,迁移网络,SRIOV网络。管理网络一般使用千兆网卡即可,常用于远程连接,或者传输一些协议的心跳报文检测节点是否存活。业务网络就是我们的业务被外部网络的访问,一般都是至少使用万兆网卡。存储网络用于访问存储集群,一般都是至少使用万兆网卡。迁移网络一般在虚拟化的场景中用于虚拟机的热迁移,一般都是至少使用万兆网络用于迁移。SRIOV网络是特殊的网络,可以理解为将一个物理网卡分为多个子物理网卡使用,只有特定厂商的特定网卡的型号才支持,相比于操作系统层面的网卡虚拟化,SR-IOV有更低的延迟,适用于一些特殊的对网络延迟要求比较高的敏感业务。5.虚拟网络配置将多个物理网口聚合成一个聚合网口,这个聚合网口属于虚拟网口。物理网卡和聚合网络的vlan子接口也属于虚拟网络。在容器和虚拟化的场景下,需要配置linux网桥或者虚拟交换机,无论是linux网桥还是虚拟交换机都属于虚拟网络。容器或者虚拟机如果需要访问外部或者被外部访问到,那么就需要linux虚拟网卡连接到linux网桥或虚拟交换机,无论是容器还是虚拟机的虚拟网卡都属于虚拟网络的范畴。所以linux的网络管理中虚拟网络的配置管理也是非常重要的内容,其实虚拟网络在大多情况下都比物理网络要更加复杂,掌握这些知识的前提是运维人员需要具备深厚的网络基础,我们运维人员有些时候要比网络工程师更懂网络。#Daughter card(子卡)和 PCIe card(PCIe 卡)区别1.Daughter card(子卡)子卡不是一种通用标准接口的扩展卡,而是特定于某款主板或设备的扩展卡。它通常是为了满足该主板或设备的特定功能扩展需求而设计,比如为某些服务器型号提供额外的网络接口(如 quad ethernet port 或 ethernet 和 sfp+ slot 的组合等),或者实现特定的功能模块扩展,且一般只能安装在该主板指定的插槽或位置上,与主板的设计紧密相关。安装位置由主板设计决定,可能不是传统意义上的通用扩展插槽位置,有些可能是集成在主板内部的特定接口或模块上,或者是在主板上有专门为其设计的非标准扩展插槽,安装方式可能也较为特殊,不一定像 PCIe 卡那样直接插入外部可见的插槽。2.PCIe card(PCIe 卡)PCIe 卡是基于 PCI Express 总线标准的扩展卡。通用性较强,只要主板具有相应规格的 PCIe 插槽(并且主板的 BIOS 等对该类型设备支持良好),就可以插入使用。例如,一块标准的 PCIe x16 显卡可以插入到不同品牌和型号但具有 PCIe x16 插槽的主板上。PCIe 卡直接插入主板上的 PCIe 插槽,插槽通常位于主板的边缘位置,且不同规格的 PCIe 卡对应不同长度和速度的插槽,插入时需要对准插槽方向平稳插入。
三、Linux系统网卡命名
1、Linux网卡命令规则
#网卡命名规则发展Linux 系统中的网卡命名方式经历了多次演变,从早期的 eth0, eth1 等简单的命名规则,发展到现在的 ens3, enp0s3 等更为复杂的命名方式。这种变化不仅仅是名称上的更新,更是网络配置和管理方式的一种进步。这节课我们将介绍一下Linux网卡命名方式的演变过程,分析其背后的原因,以及这些变化对系统管理员和开发者带来的影响。#传统命名规则(ethX)Linux 早期的网卡命名方式相对简单直观,网卡通常使用ethX的命名方式,其中eth是以太网(Ethernet)的缩写,X是一个从 0 开始的整数,用于区分不同的网卡。这种命名方式起源于 Linux 早期版本,当时系统中的硬件设备较少,网络接口的数量也不多,因此这种简单的命名方式足以满足需求。在这种方式下,eth0 通常代表第一块网卡,eth1 代表第二块,以此类推。这种命名规则直观易懂,便于系统管理员快速识别和管理网络接口,但存在一个问题,即网卡的编号可能会因为硬件插拔顺序或 BIOS 设置的不同而发生变化,导致网络配置文件中的网卡名称与实际网卡不匹配。#网卡新命名方式随着技术的发展,尤其是在服务器和云计算领域,硬件设备数量和类型的增加使得传统的命名方式显得不够灵活和明确。为了解决这一问题,Linux 社区引入了一种新的命名规则,即使用描述性更强的名称来标识网络接口。1.基于固件或者BIOS提供的信息命名规则(DELL开发的biosdevname的方案)对于以太网网卡,如果固件或 BIOS 提供了特定的设备信息,网卡名称会以en开头。例如,ensX 表示网卡使用的是 PCI Express 热插拔插槽(s 代表 slot);enoX 表示网卡使用的是板载设备(o 代表 on-board)。2.基于设备物理位置命名规则(1)enpXsY这种命名规则基于网卡所在的 PCI 总线和插槽位置。p 后面的数字 X 表示 PCI 总线编号,s 后面的数字 Y 表示插槽编号。例如,enp2s0 表示该网卡位于第 2 条 PCI 总线上的第 0 个插槽。(2)enxMAC网卡名称以 enx 开头,后面跟随网卡的 MAC 地址。这种命名方式确保了网卡名称的唯一性,即使网卡的物理位置发生变化,只要 MAC 地址不变,名称就不会改变。这种网卡新命名方式提供了更详细的硬件信息,有助于系统管理员快速定位硬件问题3. 网卡新命名方式总结en代表Ethernetwl代表无线网卡(WIFI)ww代表无线广域网卡(4G上网卡等)eno中的o代表Onboard,即板载的意思ens代表可热插拔的网卡enp中的p代表pci,也就是pcie网卡enx/wlx是使用MAC地址命名的网卡#可预测的网络接口命名方式(Predictable Network Interface Names)从 systemd 引入后,Linux 系统开始采用可预测网络接口命名规则,其目的是为了让网卡命名更加稳定和可预测。可预测网络接口命名规则综合了上述几种规则,若 BIOS 或固件提供了合适的名称,则优先使用这些名称。否则,根据设备的物理位置或拓扑结构进行命名。如果以上方法都不可行,则使用传统的命名方式,具体方案如下:方案1:如果固件或 BIOS 信息适用且可用,则使用整合了为板载设备提供索引号的固件或 BIOS 的名称(例如:eno1),否则请使用方案2。方案2:如果固件或 BIOS 信息适用且可用,则使用整合了为 PCI 快速热插拔插槽提供索引号的固件或BIOS 名称(例如 ens1),否则请使用方案 3。方案3:如果硬件连接器物理位置信息可用,则使用整合了该信息的名称(例如:enp2s0),否则请使用方案 5。方案4:默认不使用接口 MAC 地址的名称(例如:enx78e7d1ea46da),但用户可选择使用此方案。方案5:传统的不可预测的内核命名方案,在其他方法均失败后使用(例如:eth0)
2、Linux修改网卡名称
#修改网卡名称 1.临时修改(仅用于测试)ip link set dev ens192 name nic1 ip link set dev ens224 name nic2 2.关闭所有新型网卡命名规则(不建议使用)如果你希望使用传统的ethX命名方式,可以通过修改内核参数来实现。使用文本编辑器打开/etc/default/grub文件,找到GRUB_CMDLINE_LINUX行,在该行的引号内添加net.ifnames=0 biosdevname=0参数。 grub2-mkconfig-o /boot/grub2/grub.cfg --update-bls-cmdline 重启系统后,网卡将使用传统的ethX命名方式。 3.使用 udev 规则自定义网卡名称(特殊场景下使用) 创建一个新的规则文件,通常放在 /etc/udev/rules.d/ 目录下。 (1)查看网卡的mac地址 [root@bclinuxoe2110-68-61 ~]# ip link show ens192 2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 00:50:56:be:bb:0c brd ff:ff:ff:ff:ff:ff (2)查看接口的设备类型ID [root@bclinuxoe2110-68-61 ~]# cat /sys/class/net/ens192/type 1 (3)创建udev配置文件/etc/udev/rules.d/70-persistent-net.rules [root@bclinuxoe2110-68-61 ~]# cat /etc/udev/rules.d/70-persistent-net.rules SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="00:50:56:be:bb:0d",ATTR{type}=="1",NAME="nic1"SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="00:50:56:be:bb:0c",ATTR{type}=="1",NAME="nic2"(4)重启系统 (5)查看nic1的网卡 [root@bclinuxoe2110-68-61 ~]# ip link show nic1 3: nic1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 00:50:56:be:bb:0c brd ff:ff:ff:ff:ff:ff altname enp11s0 altname ens192 #总结 Linux 网卡命名方式的演变是技术进步的产物,它反映了从简单到复杂,再到更加合理和高效的发展过程。从最初的 ethX 命名方式到现在的基于硬件属性的命名规则,每一次变化都旨在提高网络管理的效率和准确性。虽然这种变化给系统管理员带来了一定的学习成本和兼容性挑战,但它也极大地提升了网络接口配置的灵活性和故障排除的便捷性。 通过这节课的学习,我们可以看到 Linux 社区是如何在保持系统灵活性和扩展性的同时,不断优化网络接口的命名规则。系统管理员和开发者需要跟上这些变化,学习新的知识和工具,以便更好地管理和维护 Linux 系统中的网络资源。 随着技术的不断发展,我们可以预见 Linux 网卡命名方式将继续演变,以适应更加多样化的硬件环境和网络管理需求。在这个过程中,持续学习和适应新技术将是系统管理员和开发者的重要任务。