• 01-Redhat/Centos7网卡命名介绍及修改方式


    1. Redhat/Centos7网卡命名介绍

    1.1 网络设备命名

      Redhat/Centos7提供在网络接口中使用新的网络设备命名方法。这些功能会更改系统中的网络接口名称,以便定位和区分这些接口。

    1.2 命名方案层级结构

      默认情况下,systemd会使用以下策略,采用支持的命名方案为接口命名:

    • 方案1:如果固件或BIOS信息适用且可用,则使用整合了为板载设备提供索引号的固件或BIOS的名称(例如:eno1),否则请使用方案2。
    • 方案2:如果固件或BIOS信息适用且可用,则使用整合了为PCI快速热插拔插槽提供索引号的固件或BIOS名称(例如ens1),否则请使用方案3。
    • 方案3:如果硬件连接器物理位置信息可用,则使用整合了该信息的名称(例如:enp2s0),否则请使用方案5。
    • 方案4:默认不使用整合接口MAC地址的名称(例如:enx78e7d1ea46da),但用户可选择使用此方案。
    • 方案5:传统的不可预测的内核命名方案,在其他方法均失败后使用(例如:eth0)。

      这个策略(如上所述)是默认策略。如果该系统已启用biosdevname,则会使用该方案。注:启用biosdevname需要添加biosdevname=1作为命令行参数(Dell系统除外),此时只要安装biosdevname,就会默认使用该方案。如果用户已添加udev规则,该规则会更高内核设备名称,则会优先使用这些规则。

    1.3 设备重命名过程

      设备命名过程如下:

    • 1. /usr/lib/udev/rules.d/60-net.rules

      文件中的规则会让udev帮助工具/lib/udev/rename_device查看所有/etc/sysconfig/network-scripts/ifcfg-suffix文件。如果发现包含HWADDR条目的ifcfg文件与某个接口的MAC地址匹配,它会将该接口重命名为ifcfg文件中由DEVICE指令给出的名称。

      例,如下配置文件网卡则以eth0命名:

    [root@spring rules.d]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    NAME=eth0
    UUID=e073eeeb-ecba-4481-841f-539454d90a6f
    DEVICE=eth0
    ONBOOT=yes
    HWADDR=00:0c:29:7c:4a:f8
    • 2. /usr/lib/udev/rules.d/71-biosdevname.rules

      文件中的规则让biosdevname根据其命名策略重命名该接口,即在上一步中没有重命名该接口、已安装biosdevname、且在boot命令行中将biosdevname=0作为内核命令给出。

    • 3. /lib/udev/rules.d/75-net-description.rules

      文件中的规则让udev通过检查网络接口设备,填写内部udev设备属性值ID_NET_NAME_ONBOARD、ID_NET_NAME_SLOT、ID_NET_NAME_PATH。注:有些设备属性可能处于未定义状态。

    • 4. /usr/lib/udev/rules.d/80-net-name-slot.rules

      文件中的规则让udev重命名该接口,优先顺序如下:ID_NET_NAME_ONBOARD、ID_NET_NAME_SLOT、ID_NET_NAME_PATH。并提供如下信息:没有在步骤1或2中重命名该接口,同时未给出内核参数net.ifnames=0。如果一个参数未设定,则会按列表的顺序设定下一个。如果没有设定任何参数,则不会重命名该接口。

    1.4 网卡命名规则

    1.4.1 net.ifnames规范

      根据接口类型以两个字母开头(net.ifnames规范):

      说明:设备类型+设备位置+数字

    • 1. en 代表以太网
    • 2. wl 代表无线局域网(WLAN)
    • 3. ww 代表无线广域网(WWAN)

      例:

      eno1 板载网卡

      enp0s2  pci网卡

      ens33   pci网卡

      wlp3s0  PCI无线网卡

      wwp0s29f7u2i2   4G modem

      wlp0s2f1u4u1   连接在USB Hub上的无线网卡

      enx78e7d1ea46da pci网卡

    1.4.2 biosdevname规范

      dell开发

      例:

      em1 板载网卡

      p3p4 pci网卡

      p3p4_1 虚拟网卡

    格式 描述
    o<index> 板载设备索引号
    s<slot>[f<function>][d<dev_id>] 热插拔插槽索引号
    x<MAC> MAC地址
    p<bus>s<slot>[f<function>][d<dev_id>] PCI地理位置
    p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>] USB端口链
    • 所有多功能PCI设备都在其设备名称中包含[f<function>]号,其中包括function0设备。
    • 在USB设备中会组成集线器端口号完整链。如果该名称超过15个字符上限,则无法导出该名称。
    • 已取消USBconfigurationdescriptors==1和USBinterfacedescriptors==0(如果只有一个USB配置或接口存在,则默认值为configuration==1及interface==0)。

    2. Redhat/Centos7修改网卡名

      如系统BIOS符合要求,且系统中安装了biosdevname,且biosdevname=1启用,则biosdevname优先;

      如果BIOS不符合biosdevname要求或biosdevname=0,则仍然是systemd的规则优先。

      如果用户自己定义了udev rule来修改内核设备名字,则用户规则优先。

      内核参数组合使用的时候,其结果如下:

      默认内核参数(biosdevname=0,net.ifnames=1):  网卡名 "enp5s2"

      biosdevname=1,net.ifnames=0:网卡名 "em1"

      biosdevname=0,net.ifnames=0:网卡名 "eth0" (最传统的方式,eth0 eth1 傻傻分不清)

    2.1 方法一

    说明:修改/etc/sysconfig/grub文件,在GRUB_CMDLINE_LINUX配置中添加"net.ifnames=0 biosdevname=0"

    评价:如果系统同时存在光卡、电卡,因为不同网卡驱动加载时间不同,会出现网卡乱序现象,如:2光2电的网口,出现一光一电交错出现的现象。

    1. 修改/etc/sysconfig/grub文件

    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet net.ifnames=0 biosdevname=0"
    GRUB_DISABLE_RECOVERY="true"

    2. 生成grub配置

    grub2-mkconfig -o /boot/grub2/grub.cfg

    3. 修改网卡配置文件

    [root@spring ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=dhcp
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=eth0
    UUID=a88bc211-429d-4a00-8e52-1fa11c811b7f
    DEVICE=eth0
    ONBOOT=yes

    4. 重启操作系统

    shutdown -h now

    2.2 方法二

    原理同第一种方法,但是在安装系统时配置

    1. 进入系统安装界面,将光标移动到Install CentOS7,根据系统提示使用Tab或者e

    2. 编辑grub配置

    3. 设置网卡选项,发现网卡名称为eth0

    2.3 方法三

    修改/usr/lib/udev/rules.d/60-net.rules更改网卡名,因为mac地址与网卡名一一对应,所以不会出现网卡乱序的现象。

    注意:使用以下脚本,网卡配置文件需要存在,使用后如果网卡启动,不能同时多个网卡使用dhcp获取IP模式,否则network网络服务重启会报错

    1. 脚本配置文件

    #原网卡名 新网卡名
    eno1 eth0
    eno2 eth1
    eno3 eth2

    2. 脚本内容

    #!/bin/bash
    
    inforfile=$1
    >testfile
    cat $1 | egrep -v '^#|^#' | while read line
    do
    	src_name=$(echo ${line} | awk '{print $1}')
    	dst_name=$(echo ${line} | awk '{print $2}')
    	mac_=$(ifconfig ${src_name} | awk '/ether/{print $2}')
    	a='ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", ATTR{address}=="'
    	b='", NAME="'
    	c='", GOTO="net_end"'
    	echo $a$mac_$b$dst_name$c >> testfile
    	cp -a /etc/sysconfig/network-scripts/ifcfg-${src_name} ./ifcfg-${src_name}.backup
    	sed -i -e "/^DEVICE/s/DEVICE=.*/DEVICE=${dst_name}/g" -e "/^NAME/s/NAME=.*/NAME=${dst_name}/g" /etc/sysconfig/network-scripts/ifcfg-${src_name}
    	
    	mv /etc/sysconfig/network-scripts/ifcfg-${src_name} /etc/sysconfig/network-scripts/ifcfg-${dst_name}
    done
    
    echo 'ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", RESULT=="?*", NAME="$result"' >> testfile
    echo 'LABEL="net_end"' >> testfile
    cp -a /lib/udev/rules.d/60-net.rules ./60-net.rules.backup
    cat testfile > /lib/udev/rules.d/60-net.rules
    

    3. 脚本执行

    sh change-nic.sh inforfile

    2.4 自动生成ifcfg-xxx网卡配置文件的方法

    启动NetworkManager服务

    systemctl start NetworkManager

    使用nmcli

    # 创建通过dhcp获取IP的配置文件
    nmcli connection add con-name default type ethernet ifname eth0
    
    # 创建静态配置IP的配置文件
    nmcli connection add con-name static type ethernet ifname eth0 ip4 192.168.0.111/24 gw4 192.168.0.254
    
    参数详解:
    connection/con -- 连接
    add -- 添加
    default -- 默认dhcp获取IP
    type ethernet -- 以太网类型
    ifname -- 接口名称

    3.参考文档

    Redhat官方手册

    https://www.jianshu.com/p/b66981dbb389

    https://blog.51cto.com/zaa47/1927466

  • 相关阅读:
    类的再理解
    关于网络配置和zmp以及json
    PCL 库安装
    Ros学习注意点
    Ros集成开发环境配置
    《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记
    《Effective C++》第1章 让自己习惯C++-读书笔记
    《TCP/IP详解卷1:协议》第2章 链路层-读书笔记
    《TCP/IP详解卷1:协议》第1章 概述-读书笔记
    C++内存分配与对象构造的分离
  • 原文地址:https://www.cnblogs.com/gongniue/p/10723036.html
Copyright © 2020-2023  润新知