自动化解决Linux网络预测网络接口命名问题

简介: 自动化解决Linux网络预测网络接口命名问题

在Linux Ubuntu20.04系统中,网络接口的命名是网络管理的一个基本方面。一般网络接口使用如eth0usb0等命名方式,但不知道为啥 有些文件系统有这个东西 : Predictable Network Interface Names的引入,让接口命名变得基于硬件属性,如MAC地址,导致名称如enx78e7d1ea46da这样的格式出现。但在某些情况下,需要旧的命名方式,比如我usb0的时候是写了个auto_udhcpc.sh 里面是固定的usb0 , 但是可预测的网络接口命名是加了MAC地址的 所以需要还原回去。

参考学习: Linux网络接口命名, Predictable Network Interface Names

初始问题

Ubuntu 20.04系统中,发现原本命名为usb0的网络接口被自动重命名为基于MAC地址的格式,如enxae0c29a39b6d。这种改变虽然符合最新的Linux网络命名约定,但在定制系统应用场景中可能不太方便。需求目标是恢复到usb0这样的命名方式,但在不同设备上,由于MAC地址的不同,这个需求难以通过简单的配置更改来实现。

解决过程

解决这个问题的关键在于理解Linux中udev系统的工作原理(可以看参考学习部分),它负责在设备连接时动态创建设备节点。通过创建自定义的udev规则,我们可以覆盖默认的网络接口命名机制。

步骤1:尝试手动更改

最初的尝试可能包括手动编辑/etc/udev/rules.d/目录下的规则文件,或是尝试修改系统的网络配置来强制使用特定的接口名称。这些方法可以,但是每台机器这么搞我受不了 ,肯定得把步骤打包脚本放rootfs自动运行的。

步骤2:自动化脚本

为了提供一个更通用且自动化的解决方案,编写一个脚本开机运行,该脚本能够:

  1. 检测系统中是否存在以enx开头的网络接口。
  2. 读取该接口的MAC地址。
  3. 创建一个自定义的udev规则文件(如果它还不存在),并基于读取的MAC地址写入一条规则,将该接口重命名为usb0
  4. 重新加载udev规则并触发它们,以确保更改立即生效。

这个脚本的核心在于它不依赖于硬编码的MAC地址,而是动态地从系统中检测和应用,使其能够在不同的机器上工作而无需任何修改。

脚本实现

脚本的实现涉及到使用ip linkgrep命令来查找网络接口和读取MAC地址,然后根据这些信息动态生成udev规则。这个过程需要root权限,因为它涉及到修改系统文件和执行系统命令。

#!/bin/bash
# 检查是否存在以enx开头的网络接口
interface=$(ip link | grep -o 'enx[[:xdigit:]]\+')
if [ -z "$interface" ]; then
    echo "没有找到以enx开头的网络接口。"
    exit 0
fi
# 读取该接口的MAC地址
mac_address=$(ip link show $interface | grep -oP '(?<=link/ether )[^ ]+')
if [ -z "$mac_address" ]; then
    echo "无法读取网络接口的MAC地址。"
    exit 1
fi
# 检查70-persistent-net.rules文件是否存在,如果不存在则创建
rules_file="/etc/udev/rules.d/70-persistent-net.rules"
if [ ! -f "$rules_file" ]; then
    echo "文件$rules_file不存在,正在创建..."
    touch "$rules_file"
fi
# 向70-persistent-net.rules文件中写入udev规则
echo "SUBSYSTEM==\"net\", ACTION==\"add\", ATTR{address}==\"$mac_address\", NAME=\"usb0\"" >> "$rules_file"
# 重新加载udev规则并触发
sudo udevadm control --reload-rules
sudo udevadm trigger
echo "操作完成。"

使用说明:

  1. 将内容脚本保存到一个文件中,例如rename-net-interface.sh
  2. 给该脚本执行权限:
chmod +x rename-net-interface.sh
  1. 以root用户执行该脚本 ,如果需要做到rootfs就弄到开机启动里运行:
sudo ./rename-net-interface.sh

结论

通过这个脚本,可以在不同的Linux系统上自动化地恢复到他们偏好的网络接口命名方式,而不必担心设备的MAC地址差异。这种方法既灵活又可靠,特别适合于需要批量出货刷机的环境。

但最开始,我一直在找系统默认如何恢复,不使用预测的网络接口命名的方式,找了系统的udev下的配置貌似没有。

既然在/etc/udev/rules.d/目录下没有找到直接负责网络接口命名的规则文件(如70-persistent-net.rules),网络接口的命名行为很可能是由系统默认的Predictable Network Interface Names策略控制的,这是由systemdudev共同管理的,而不是通过自定义的udev规则。

相关文章
|
2月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
84 2
|
2天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
30 15
|
7天前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
72 7
|
2月前
|
域名解析 网络协议 安全
|
3月前
|
运维 监控 网络协议
|
2月前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
356 1
|
2月前
|
存储 Ubuntu Linux
2024全网最全面及最新且最为详细的网络安全技巧 (三) 之 linux提权各类技巧 上集
在本节实验中,我们学习了 Linux 系统登录认证的过程,文件的意义,并通过做实验的方式对 Linux 系统 passwd 文件提权方法有了深入的理解。祝你在接下来的技巧课程中学习愉快,学有所获~和文件是 Linux 系统登录认证的关键文件,如果系统运维人员对shadow或shadow文件的内容或权限配置有误,则可以被利用来进行系统提权。上一章中,我们已经学习了文件的提权方法, 在本章节中,我们将学习如何利用来完成系统提权。在本节实验中,我们学习了。
|
3月前
|
Ubuntu Linux 虚拟化
Linux虚拟机网络配置
【10月更文挑战第25天】在 Linux 虚拟机中,网络配置是实现虚拟机与外部网络通信的关键步骤。本文介绍了四种常见的网络配置方式:桥接模式、NAT 模式、仅主机模式和自定义网络模式,每种模式都详细说明了其原理和配置步骤。通过这些配置,用户可以根据实际需求选择合适的网络模式,确保虚拟机能够顺利地进行网络通信。
122 1
|
2月前
|
监控 网络协议 安全
员工网络监控软件:PowerShell 在网络监控自动化中的应用
在数字化办公环境中,企业对员工网络活动的监控需求日益增长。PowerShell 作为一种强大的脚本语言,能够有效实现员工网络监控自动化。本文介绍了如何使用 PowerShell 获取网络连接信息、监控特定网址的访问情况,并生成自动化报告,帮助企业高效管理员工网络活动,确保网络安全和合规性。
53 0
|
3月前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程