【Ubuntu20.04】多个网口,每次启动网口的名称不固定

包含网卡/无线网的网络问题和ADSL/校园网/宽带拨号支持及代理/共享等网络使用问题
回复
rrhy
帖子: 10
注册时间: 2023-03-02 14:12
系统: ubuntu20.04

【Ubuntu20.04】多个网口,每次启动网口的名称不固定

#1

帖子 rrhy » 2023-03-02 14:33

一、问题
发现物理网口比较多的情况下,每次启动系统物理网口对应的网卡名称不固定。由于我们设备会有几十台,物理网口会配置固定IP,如果物理网口对应的名称一直变化,则无法实现配置。使用的Ubuntu版本是20.04 LTS 版本。

代码: 全选

----|-- 第一次------------|---第二次------------|---第三次------------|---第四次
eth0|   00:30:64:35:48:e6|   00:30:64:34:92:e6|   00:30:64:35:48:e6|   00:30:64:35:48:e6
eth1|   00:30:64:35:48:e7|   00:30:64:35:48:e6|   00:30:64:34:92:e6|   00:30:64:35:48:e7
eth2|   00:30:64:34:92:e6|   00:30:64:35:48:e7|   00:30:64:35:48:e7|   00:30:64:34:92:e6
eth3|   00:c0:3a:ae:61:8f|   00:c0:3a:ae:61:8f|   00:c0:3a:ae:61:8f|   00:c0:3a:ae:61:8f
eth4|   00:c0:3a:ae:63:8f|   00:30:64:34:92:e7|   00:c0:3a:ae:63:8f|   00:c0:3a:ae:63:8f
eth5|   00:c0:3a:ae:65:8f|   00:c0:3a:ae:63:8f|   00:c0:3a:ae:65:8f|   00:c0:3a:ae:65:8f
eth6|   00:30:64:34:92:e7|   00:c0:3a:ae:65:8f|   00:30:64:34:92:e7|   00:c0:3a:ae:67:8f
eth7|   00:c0:3a:ae:67:8f|   00:c0:3a:ae:67:8f|   00:c0:3a:ae:67:8f|   00:30:64:34:92:e7

二、例子
安装Ubuntu20.04LTS系统的设备有6个物理网口,第一个物理网口这次开机是enp16s0,下一次开机可能变成了enp2s0。

三、之前版本的解决方案
以前使用Ubuntu14.04LTS时,可以通过
>lspci | grep Eth
查询到的设备号,在/etc/udev/rules.d/70-persistent-net.rules中增加如下内容,可以将设备号与网卡名称进行绑定,并且每次启动物理网口对应的名称就都不会改变了。
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",KERNELS=="0000:08:00.0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"


四、Ubuntu20.04LTS的尝试
但是到了Ubuntu20.04LTS之后,/etc/udev/rules.d/70-persistent-net.rules不再起作用,尝试了将网口变更为eth0. eth1...也同样会出现当次开机为eth2,下次开机为eth4的情况。

/etc/udev/rules.d/70-persistent-net.rules
用下面两种方式绑定,均无效。但是这两种方式在Ubuntu14.04均有效。

代码: 全选

SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",KERNELS=="0000:02:00.0",ATTR{type}=="1",KERNEL=="eth*",NAME="eth0"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",KERNELS=="0000:01:00.0",ATTR{type}=="1",KERNEL=="eth*",NAME="eth1"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",KERNELS=="0000:10:00.0",ATTR{type}=="1",KERNEL=="eth*",NAME="eth2"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",KERNELS=="0000:11:00.0",ATTR{type}=="1",KERNEL=="eth*",NAME="eth3"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",KERNELS=="0000:13:00.0",ATTR{type}=="1",KERNEL=="eth*",NAME="eth4"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",KERNELS=="0000:15:00.0",ATTR{type}=="1",KERNEL=="eth*",NAME="eth5"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",KERNELS=="0000:1a:00.0",ATTR{type}=="1",KERNEL=="eth*",NAME="eth6"
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",KERNELS=="0000:19:00.0",ATTR{type}=="1",KERNEL=="eth*",NAME="eth7"

代码: 全选

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:30:64:35:48:e6", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:30:64:35:48:e7", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:30:64:34:92:e6", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:c0:3a:ae:61:8f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:c0:3a:ae:63:8f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth4"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:c0:3a:ae:65:8f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth5"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:30:64:34:92:e7", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth6"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:c0:3a:ae:67:8f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth7"
变更为eth0. eth1...的方法是在/etc/default/grub中GRUB_CMDLINE_LINUX增加net.ifnames=0 biosdevname=0,然后使用命令update-grub更新后,重新开机启动。
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 acpi_enforce_resources=lax text"

使用netplan的yaml绑定mac地址的方式不可取,因为每个机器的mac地址都不一样,要实现多个机器都能用,目前只发现了lspci中的设备号绑定能够唯一固定网口名称


请教各位大神有没有遇到过这个问题的,求教 :What
头像
astolia
论坛版主
帖子: 6459
注册时间: 2008-09-18 13:11

Re: 【Ubuntu20.04】多个网口,每次启动网口的名称不固定

#2

帖子 astolia » 2023-03-02 21:30

代码: 全选

udevadm info -a /sys/class/net/接口名
去看每一层级各个参数的值是什么,和你写的对得上不
rrhy
帖子: 10
注册时间: 2023-03-02 14:12
系统: ubuntu20.04

Re: 【Ubuntu20.04】多个网口,每次启动网口的名称不固定

#3

帖子 rrhy » 2023-03-03 8:54

astolia 写了: 2023-03-02 21:30

代码: 全选

udevadm info -a /sys/class/net/接口名
去看每一层级各个参数的值是什么,和你写的对得上不
我在第一次登录的时候查询之后设置的,然后设置好的。但是第二次开机,第三次开机就不一样了。没有达到固定网口名称的目的。
头像
astolia
论坛版主
帖子: 6459
注册时间: 2008-09-18 13:11

Re: 【Ubuntu20.04】多个网口,每次启动网口的名称不固定

#4

帖子 astolia » 2023-03-03 9:58

rrhy 写了: 2023-03-03 8:54
astolia 写了: 2023-03-02 21:30

代码: 全选

udevadm info -a /sys/class/net/接口名
去看每一层级各个参数的值是什么,和你写的对得上不
我在第一次登录的时候查询之后设置的,然后设置好的。但是第二次开机,第三次开机就不一样了。没有达到固定网口名称的目的。
你把你查询到的内容贴上来看看?
rrhy
帖子: 10
注册时间: 2023-03-02 14:12
系统: ubuntu20.04

Re: 【Ubuntu20.04】多个网口,每次启动网口的名称不固定

#5

帖子 rrhy » 2023-03-03 10:07

astolia 写了: 2023-03-03 9:58
rrhy 写了: 2023-03-03 8:54
astolia 写了: 2023-03-02 21:30

代码: 全选

udevadm info -a /sys/class/net/接口名
去看每一层级各个参数的值是什么,和你写的对得上不
我在第一次登录的时候查询之后设置的,然后设置好的。但是第二次开机,第三次开机就不一样了。没有达到固定网口名称的目的。
你把你查询到的内容贴上来看看?
udevadm info -a /sys/class/net/eth0

代码: 全选

 looking at device '/devices/pci0000:00/0000:00:1c.0/0000:01:00.0/net/eth0':
    KERNEL=="eth0"
    SUBSYSTEM=="net"
    DRIVER==""
    ATTR{addr_assign_type}=="0"
    ATTR{dev_id}=="0x0"
    ATTR{speed}=="-1"
    ATTR{dev_port}=="0"
    ATTR{iflink}=="2"
    ATTR{proto_down}=="0"
    ATTR{netdev_group}=="0"
    ATTR{flags}=="0x1003"
    ATTR{broadcast}=="ff:ff:ff:ff:ff:ff"
    ATTR{operstate}=="down"
    ATTR{type}=="1"
    ATTR{addr_len}=="6"
    ATTR{dormant}=="0"
    ATTR{link_mode}=="0"
    ATTR{napi_defer_hard_irqs}=="0"
    ATTR{testing}=="0"
    ATTR{carrier_down_count}=="1"
    ATTR{address}=="00:30:64:35:48:e6"
    ATTR{mtu}=="1500"
    ATTR{gro_flush_timeout}=="0"
    ATTR{carrier_changes}=="1"
    ATTR{ifindex}=="2"
    ATTR{carrier_up_count}=="0"
    ATTR{duplex}=="unknown"
    ATTR{ifalias}==""
    ATTR{carrier}=="0"
    ATTR{tx_queue_len}=="1000"
    ATTR{threaded}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:1c.0/0000:01:00.0':
    KERNELS=="0000:01:00.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="igb"
    ATTRS{ari_enabled}=="0"
    ATTRS{driver_override}=="(null)"
    ATTRS{device}=="0x1533"
    ATTRS{subsystem_vendor}=="0xffff"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{power_state}=="D0"
    ATTRS{reset_method}=="flr bus"
    ATTRS{max_link_speed}=="2.5 GT/s PCIe"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{class}=="0x020000"
    ATTRS{dma_mask_bits}=="64"
    ATTRS{consistent_dma_mask_bits}=="64"
    ATTRS{irq}=="16"
    ATTRS{broken_parity_status}=="0"
    ATTRS{max_link_width}=="1"
    ATTRS{local_cpus}=="f"
    ATTRS{revision}=="0x03"
    ATTRS{enable}=="1"
    ATTRS{current_link_width}=="1"
    ATTRS{vendor}=="0x8086"
    ATTRS{subsystem_device}=="0x0000"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{current_link_speed}=="2.5 GT/s PCIe"

  looking at parent device '/devices/pci0000:00/0000:00:1c.0':
    KERNELS=="0000:00:1c.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{current_link_speed}=="2.5 GT/s PCIe"
    ATTRS{driver_override}=="(null)"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{power_state}=="D0"
    ATTRS{ari_enabled}=="0"
    ATTRS{secondary_bus_number}=="1"
    ATTRS{vendor}=="0x8086"
    ATTRS{enable}=="1"
    ATTRS{class}=="0x060400"
    ATTRS{max_link_speed}=="5.0 GT/s PCIe"
    ATTRS{revision}=="0x11"
    ATTRS{local_cpus}=="f"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{subsystem_device}=="0x0f48"
    ATTRS{current_link_width}=="1"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{subordinate_bus_number}=="1"
    ATTRS{irq}=="87"
    ATTRS{reset_method}=="pm"
    ATTRS{broken_parity_status}=="0"
    ATTRS{max_link_width}=="1"
    ATTRS{subsystem_vendor}=="0x8086"
    ATTRS{numa_node}=="-1"
    ATTRS{msi_bus}=="1"
    ATTRS{device}=="0x0f48"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""
    ATTRS{waiting_for_supplier}=="0"