Lösung 1:
Ich verwende
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
Der Vorteil dieser Methode gegenüber einer völlig zufälligen Zahl besteht darin, dass es möglich ist, die MAC-Adresse basierend auf dem FQDN des Computers zuverlässig zu reproduzieren, was ich manchmal nützlich finde. Der 02
für das erste Oktett setzt nur das "lokal zugewiesene" Bit, was deutlich macht, dass es sich nicht um eine vom Anbieter bereitgestellte MAC-Adresse handelt, und garantiert, dass Sie nicht mit der MAC-Adresse einer echten Netzwerkkarte kollidieren.
Wenn Sie mehrere MAC-Adressen pro Host generieren müssen, habe ich den FQDN mit dem Namen der Bridge verkettet, mit der die Schnittstelle verbunden werden soll. Dies hat gute Arbeit geleistet, um die Dinge auf verschiedene NICs zu verteilen.
Lösung 2:
Die geposteten Skripte sind gut, aber ich möchte eine Warnung hinzufügen:Achte auf den Geburtstag (Paradoxon)!
Das ergibt sich aus der Tatsache, dass selbst bei nur 23 Personen die Chance bereits 50 % beträgt, dass 2 von ihnen am selben Tag Geburtstag haben.
Es hängt von Ihrem Szenario ab, wie Sie es verwenden, aber wenn Sie die MACS zufällig generieren, beträgt Ihre Wahrscheinlichkeit für einen Mac-Nummernkonflikt bei ca. 1 Million 40 %, bei 2 Millionen bereits 87 %!
Wenn Sie nur ein paar benötigen, ist dies in Ordnung, aber wenn Sie eine Serverfarm mit Hunderten von Servern unterhalten, von denen jeder Dutzende von virtuellen Maschinen hostet, oder wenn Sie die Macs als Index in einer Datenbank für die Buchhaltung verwenden und eindeutige Zeichen benötigen, seien Sie vorsichtig !
Lösung 3:
Diese Varianten funktionieren auch.
länger:
openssl rand -hex 6 | sed 's/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/'
oder kürzer:
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'
Der Lastverbrauch beider Varianten ist laut Schnellmessung mit der Zeit sehr ähnlich.
Lösung 4:
myserver% perl -e 'for ($i=0;$i<6;$i++){@m[$i]=int(rand(256));} printf "%X:%X:%X:%X:%X:%X\n",@m;'
55:C2:A5:FA:17:74
Ah, die alte Schweizer Kettensäge fährt wieder. Und in Version 0.2 stehle ich unverschämt Wombles hervorragenden Punkt, dass das erste Oktett 02 ist:
myserver% perl -e 'for ($i=0;$i<5;$i++){@m[$i]=int(rand(256));} printf "02:%X:%X:%X:%X:%X\n",@m;'
02:8E:94:A3:47:26
Lösung 5:
Ich weiß, dass dieser Beitrag alt ist, aber für zukünftige Besucher, wenn Sie eine kryptografisch sichere pseudozufällige MAC-Adresse wünschen, ohne auf 0x02 als OUI beschränkt zu sein, finden Sie hier einen schnellen, größtenteils plattformunabhängigen Generator:
$ printf '%02x' $((0x$(od /dev/urandom -N1 -t x1 -An | cut -c 2-) & 0xFE | 0x02)); od /dev/urandom -N5 -t x1 -An | sed 's/ /:/g'