Gerador de endereço MAC local

Gerador de endereço MAC local

RecentementeCopiei um scriptdeusuário deltaraypara gerar endereços MAC locais aleatórios para máquinas virtuais. Gosto desse script porque é o script bash mais fácil e eficaz para gerar um endereço MAC.

No entanto,todos os endereços MAC privados disponíveis têm quatro octetos OUI diferentes disponíveispara uso, e minha pergunta é:

Como randomizar o primeiro conjunto de octetos para endereços MAC privados e nunca precisar se preocupar em colidir com outra VM?

x2-xx-xx-xx-xx-xx 
x6-xx-xx-xx-xx-xx
xA-xx-xx-xx-xx-xx
xE-xx-xx-xx-xx-xx

Onde o “x” em x2, x6, xA e xE são randomizados.

Modifiquei o script do deltaray para um endereço MAC privado estático, mas gostaria de ser minucioso e ter a melhor solução, e não apenas uma única solução.

Meus mods:

#!/bin/bash
hexchars="0123456789ABCDEF"
mac=$( for i in {1..10} ; do echo -n ${hexchars:$(( $RANDOM % 16 )):1} ; done | sed -e 's/\(..\)/:\1/g' )
echo 02$mac

Obrigado

Por favor, veja a resposta à minha pergunta abaixo.

Responder1

Existe uma razão pela qual os endereços MAC da VM precisam ser aleatórios (pseudo aleatórios, na verdade)? Parece que você está se perguntando como obter um período máximo garantido em uma sequência de números, antes da sobreposição. Um incremento simples seria o mais óbvio, mas existem CRCs com período máximo para uma faixa mín/máx permitida. mas não acho que você teria problemas com sequencial, então o CRC seria desnecessário.

Com o período máximo, você só precisa se preocupar se uma VM ainda existe, ao encapsular. Se isso puder acontecer (devido ao tempo de vida de suas VMs), você deverá manter um histórico de execução de VMs e escolher outra opção até não encontrar o histórico. Supondo que você tenha uma gama mais ampla disponível do que possivelmente ainda executando VMs, não haverá sobreposição. É improvável que você precise de um histórico (se você usar uma sequência com período máximo, como incremento simples). Estou supondo o tempo de vida de suas VMs e o número em relação ao espaço que você tem disponível.

Supondo que não haja outros endereços Mac com os quais você precise se preocupar em colidir, além daqueles que você mesmo cria com esse algoritmo. O que pode não ser verdade.

Responder2

Eu descobri.

#!/bin/bash
# This will generate every possible local MAC address available.  Works on any system that can run the bash shell.
localoctet="26AE"
hexchars="0123456789ABCDEF"
local=$( echo -n ${hexchars:$(( $RANDOM % 16 )):1} ; echo -n ${localoctet:$(( $RANDOM % 4 )):1} )
mac=$( for i in {1..10} ; do echo -n ${hexchars:$(( $RANDOM % 16 )):1} ; done | sed -e 's/\(..\)/:\1/g' )
echo $local$mac

Isso irá gerar todos os endereços MAC locais possíveis.

informação relacionada