Linux修改mac地址重啟后依然生效的方法步驟
需求描述:項目中需要用新的板子替換掉舊的板子。舊板已在生產(chǎn)環(huán)境中使用,且網(wǎng)絡(luò)已經(jīng)配置好。為了使新板的網(wǎng)絡(luò)配置跟舊板的一樣,需要將新板的eth0和eth1這兩個網(wǎng)口的mac地址替換成舊板的eth0和eth1兩個網(wǎng)口的mac地址,并且重啟后依然生效。
為了方便客戶操作,計劃通過shell腳本+u盤實現(xiàn)上述需求:
(1)在舊板插入u盤后,自動調(diào)用u盤中的腳本,獲取舊板上的mac地址并生成.yaml文件保存到u盤中
(2)然后在新板插入u盤,將yaml文件拷貝到/etc/netplan路徑下
(3)需要另寫一個程序:識別u盤的拔插,以及根據(jù)ini配置文件自動執(zhí)行u盤中的對應(yīng)的腳本
這樣在運行程序后,客戶只需要拔插u盤就能實現(xiàn)mac地址的更換
本文主要介紹(1)(2)兩步的實現(xiàn)過程
板子系統(tǒng)環(huán)境:ubuntu20.04
實現(xiàn)思路:需要先獲取舊板上的mac地址,然后在新板中通過修改YAML 配置文件來達到更換mac地址的目的
一、Netplan網(wǎng)絡(luò)配置
從 Ubuntu 17.10 版本開始引入Netplan,作為默認(rèn)的網(wǎng)絡(luò)配置管理工具。它通過簡單的 YAML 文件 來定義網(wǎng)絡(luò)設(shè)置,并交由不同的后端(如 systemd-networkd 或 NetworkManager)來管理實際的網(wǎng)絡(luò)連接。(在 Ubuntu 16.04 及更早版本中,默認(rèn)使用 /etc/network/interfaces 文件來配置網(wǎng)絡(luò))
YAML 配置文件
Netplan 使用 YAML 文件 來配置網(wǎng)絡(luò)接口。這些文件通常位于 /etc/netplan/ 目錄下,以 .yaml 作為文件擴展名。

出于安全考慮,在更換mac地址時需要先對原來的mac地址備份,需要了解以下信息:
(1)Netplan 沒有強制要求配置文件的名稱,只要求配置文件位于 /etc/netplan/ 目錄下,并且必須是 YAML 格式。
(2)Netplan 會在啟動時按文件名的字典順序讀取 /etc/netplan/ 目錄下的所有 YAML 配置文件,如果有多個 YAML 文件,后讀取的文件會覆蓋之前文件中的配置。
假設(shè)你在 /etc/netplan/ 目錄下有以下三個文件:
10-netplan.yaml
20-network-config.yaml
99-custom-settings.yamlNetplan 會按順序讀取這些文件:
先讀取 10-netplan.yaml
然后讀取 20-network-config.yaml,如果文件中有和 10-netplan.yaml 中相同的配置項,后者會覆蓋前者。
最后,讀取 99-custom-settings.yaml,它會覆蓋前兩個文件中相同的配置項。
二、獲取舊板上的mac地址
實現(xiàn)腳本
#!/bin/bash
#此腳本用于獲取當(dāng)前設(shè)備的mac地址,并生成對應(yīng)的/etc/netplan/01-network-manager-all.yaml文件.
# U 盤掛載路徑(程序里面已建立軟鏈接,也可以根據(jù)U盤的掛載點修改)
USB_PATH="/userdata/workspace/runningspace/Upgrade"
CONFIG_NAME="01-network-manager-all.yaml"
# 檢查 U 盤路徑是否存在
if [ ! -d "$USB_PATH" ]; then
echo "錯誤: 未找到 U 盤掛載路徑 $USB_PATH"
exit 1
fi
# 獲取 MAC 地址
MAC_ETH0=$(cat /sys/class/net/eth0/address)
MAC_ETH1=$(cat /sys/class/net/eth1/address)
echo "檢測到 eth0 MAC: $MAC_ETH0"
echo "檢測到 eth1 MAC: $MAC_ETH1"
# 生成 YAML 內(nèi)容
cat <<EOF > "${USB_PATH}/${CONFIG_NAME}"
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
macaddress: $MAC_ETH0
optional: true
eth1:
dhcp4: true
macaddress: $MAC_ETH1
optional: true
EOF
echo "配置文件已生成至: ${USB_PATH}/${CONFIG_NAME}"腳本解析:
1、在ubuntu20.04中,可以通過/sys/class/net路徑下的文件獲取網(wǎng)卡的mac地址

2、讀取后生成相應(yīng)的YAML文件,保存到u盤中。這里有個地方需要注意:
renderer需要設(shè)置為networkd(不是NetworkManager),并且optional設(shè)置為True。這樣即使在沒接網(wǎng)線的情況下,Netplan配置也能生效。否則后續(xù)根據(jù)YAML文件更改mac地址時如果沒接網(wǎng)線就會更改失敗
三、更改新板上的mac地址
實現(xiàn)腳本
#!/bin/bash
#此腳本用于將另一臺設(shè)備的mac地址替換到當(dāng)前設(shè)備
# U 盤掛載路徑(程序里面已建立軟鏈接,也可以根據(jù)U盤的掛載點修改)
USB_PATH="/userdata/workspace/runningspace/Upgrade"
# 定義路徑
NETPLAN_DIR="/etc/netplan"
CONFIG_NAME="01-network-manager-all.yaml"
BACKUP_NAME="01-network-manager-all.yaml.bak"
# 檢查 U 盤中是否有目標(biāo)文件
if [ ! -f "${USB_PATH}/${CONFIG_NAME}" ]; then
echo "錯誤: U 盤中不存在配置文件 ${CONFIG_NAME}"
exit 1
fi
# 1. 備份原文件 (如果尚未備份)
if [ -f "${NETPLAN_DIR}/${CONFIG_NAME}" ]; then
echo "正在備份原配置文件..."
sudo cp "${NETPLAN_DIR}/${CONFIG_NAME}" "${NETPLAN_DIR}/${BACKUP_NAME}"
fi
# 2. 從 U 盤拷貝新配置
echo "正在從 U 盤應(yīng)用新配置..."
sudo cp "${USB_PATH}/${CONFIG_NAME}" "${NETPLAN_DIR}/${CONFIG_NAME}"
# 3. 設(shè)置權(quán)限(Netplan 對權(quán)限有嚴(yán)格要求,通常為 600 或 644)
sudo chmod 600 "${NETPLAN_DIR}/${CONFIG_NAME}"
# 4. 應(yīng)用 Netplan 配置
echo "正在應(yīng)用網(wǎng)絡(luò)配置..."
sudo netplan apply
if [ $? -eq 0 ]; then
echo "MAC 地址永久修改成功!"
ip link show eth0 | grep link/ether
ip link show eth1 | grep link/ether
else
echo "應(yīng)用失敗,請檢查 YAML 語法或硬件狀態(tài)。"
fi到此這篇關(guān)于Linux修改mac地址重啟后依然生效的方法步驟的文章就介紹到這了,更多相關(guān)Linux修改mac地址重啟有效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux解決RocketMQ中NameServer啟動問題的方法詳解
這篇文章主要為大家詳細(xì)介紹了Linux解決RocketMQ中NameServer啟動問題的方法,文中通過圖片和示例代碼進行了詳細(xì)講解,需要的小伙伴可以參考下2023-08-08
linux系統(tǒng)用戶管理與grep正則表達式示例教程
這篇文章主要給大家介紹了關(guān)于linux系統(tǒng)用戶管理與grep正則表達式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用linux系統(tǒng)具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03
Linux創(chuàng)建用戶組并分配用戶權(quán)限方式
這篇文章主要介紹了Linux創(chuàng)建用戶組并分配用戶權(quán)限方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-11-11
在Windows的Apache服務(wù)器上配置對PHP和CGI的支持
這篇文章主要介紹了在Windows的Apache服務(wù)器上配置對PHP和CGI的支持,其中CGI腳本文中演示的為Perl示例,需要的朋友可以參考下2015-07-07
詳解ubuntu 16.04 LTS 降級安裝gcc 4.8
本篇文章主要介紹了ubuntu 16.04 LTS 降級安裝gcc 4.8 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04

