Compare o endereço MAC da interface de rede ao vivo usando o grep em arquivos de configuração existentes

1

Clonar VMs cria nova interface de rede toda vez em VMs CentOS / RedHat. Preciso renomear o ifcfg-eth * para o mesmo nome da interface ao vivo na VM.

O que eu gostaria de fazer é usar um script para comparar o endereço MAC da NIC ativa (tirar do resultado 'ifconfig') tp endereços MAC em todos os arquivos ifcfg- * existentes e renomear o correspondente para ifcfg-liveNICname.

Exemplo:

# ifconfig
eth2      Link encap:Ethernet  HWaddr 00:50:56:8F:5B:D5

existem 3 arquivos de configuração em / etc / sysconfig / network-scripts /:

ifcfg-eth0
ifcfg-Auto_eth0
ifcfg-eth1
O script

compara o endereço MAC 00:50:56:8F:5B:D5 aos endereços MAC em todos os 3 arquivos e renomeia o correto (com o endereço MAC em questão) para:

ifcfg-eth2

De preferência, também pode alterar a linha NAME no arquivo ifcfg:

NAME=eth2

mas não é necessário.

Eu preciso dessa 'correção' para poder executar um script em várias VMs para alterar as entradas de DNS de uma só vez. Eu tenho um script para isso, mas quando executado em uma VM de teste, ele cria um novo arquivo ifcfg-eth2 com apenas entradas de DNS, enquanto uma interface ativa tem um nome diferente no arquivo, por exemplo, ifcfg-eth0

Como não sou bom em scripts, comecei com isso:

nic=$(/sbin/route -n | grep "^0.0.0.0" | rev | cut -d' ' -f1 | rev)
ifconfig -a | grep $nic'

e é tudo o que eu tenho: (

Alguém pode ajudar por favor?

    
por Mark 20.05.2014 / 16:28

2 respostas

0

Se eu entendi corretamente, você deseja obter o endereço MAC da NIC que está sendo usada e, em seguida, encontrar o arquivo em /etc/sysconfig/network-scripts/ que menciona esse endereço MAC e renomeá-lo como ifcfg-NIC , em que NIC é o dispositivo de rede encontrado anteriormente. Em caso afirmativo, isso deve funcionar:

#!/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"
    
por 21.05.2014 / 00:40
0

Não sei se entendi o que você deseja fazer.

Deseja alterar os servidores DNS? Eles estão localizados no arquivo /etc/resolv.conf, independentemente do nome da NIC.

Deseja ter todos os clones com os mesmos endereços MAC? Endereços MAC diferentes? endereços MAC escolhidos manualmente? Leia.

O mais fácil é atribuir manualmente os endereços MAC de suas NICs para cada VMs (clonadas ou não).

As instruções para fazer isso são on-line. Consulte, por exemplo, aqui . Edite o arquivo .vmx da VM, apague as linhas que começam com

  ethernetN.generatedAddress
  ethernetN.addressType
  ethernetN.generatedAddressOffset 

e coloque em seu lugar as duas linhas

  ethernetN.address = "00:50:56:XX:YY:ZZ"
  ethernetN.addressType = “static”

onde 00: 50: 56: XX: YY: ZZ é o endereço MAC que você deseja impor. Agora salve o arquivo e pronto.

    
por 20.05.2014 / 17:12