在 CentOS/RedHat VM 上,每次克隆 VM 都会创建新的网络接口。我需要将 ifcfg-eth* 重命名为与 VM 上的实时接口相同的名称。
我想要做的是使用脚本比较活动 NIC 的 MAC 地址(从“ifconfig”结果中获取)和所有现有 ifcfg-* 文件中的 MAC 地址,并将相应的 MAC 地址重命名为 ifcfg-liveNICname。
例子:
# ifconfig
eth2 Link encap:Ethernet HWaddr 00:50:56:8F:5B:D5
/etc/sysconfig/network-scripts/ 中有 3 个配置文件:
ifcfg-eth0
ifcfg-Auto_eth0
ifcfg-eth1
脚本将 MAC 地址00:50:56:8F:5B:D5
与所有 3 个文件中的 MAC 地址进行比较,并将正确的 MAC 地址(具有相关的 MAC 地址)重命名为:
ifcfg-eth2
最好它还可以更改 ifcfg 文件中的行名称:
NAME=eth2
但不是必须的。
我需要这个“修复”,这样我就可以在一堆虚拟机上运行脚本来一次性更改 DNS 条目。我有这个脚本,但在测试虚拟机上运行时,它会创建一个新的 ifcfg-eth2 文件,其中只有 DNS 条目,而活动接口在文件中有不同的名称,例如 ifcfg-eth0
由于我不擅长编写脚本,所以我从以下内容开始:
nic=$(/sbin/route -n | grep "^0.0.0.0" | rev | cut -d' ' -f1 | rev)
ifconfig -a | grep $nic`
这就是我得到的全部内容 :(
有人可以帮忙吗?
答案1
如果我理解正确的话,您需要获取当前正在使用的 NIC 的 MAC 地址,然后找到提及此 MAC 地址的文件/etc/sysconfig/network-scripts/
,并将该文件重命名为先前找到的网络设备的位置。如果是这样,这应该可行ifcfg-NIC
:NIC
#!/usr/bin/env bash
## Get the NIC's name
# nic=$(/sbin/route -n | awk '/^0\.0\.0\.0/{print $NF}')
nic=$(/sbin/ip route show | awk '/default/{print $5}')
## Get the NIC's MAC address
#mac=$(/sbin/ifconfig "$nic" | grep -oP 'HWaddr\s*\K[^\s]*')
mac=$(/sbin/ip link show "$nic" | grep -oP 'ether\s*\K[^\s]*')
## Get the file name. This assumes that there will only
## be one matching file.
file=$(grep -lm 1 "$mac" /etc/sysconfig/network-scripts/*)
## Change the NAME line to the new NIC and make
## a backup copy of the file called "$file.bak".
sed -i.bak -r "s/NAME=(.*)/NAME=$nic/" "$file"
## Rename the file
mv "$file" "$(dirname "$file")"/ifcfg-"$nic"
答案2
我不确定我是否明白你想要做什么。
您想更改 DNS 服务器吗?它们位于文件 /etc/resolv.conf 中,与 NIC 名称无关。
您希望所有克隆都具有相同的 MAC 地址吗?不同的 MAC 地址?还是手动选择的 MAC 地址?请继续阅读。
最简单的方法是为每个虚拟机(无论是否克隆)手动分配 NIC 的 MAC 地址。
操作说明可以在线查看,例如这里. 编辑虚拟机的 .vmx 文件,删除以 开头的行
ethernetN.generatedAddress
ethernetN.addressType
ethernetN.generatedAddressOffset
并把他们的位置二线
ethernetN.address = "00:50:56:XX:YY:ZZ"
ethernetN.addressType = “static”
其中 00:50:56:XX:YY:ZZ 是您希望强加的 MAC 地址。现在保存文件,您就完成了。