ローカル MAC アドレス ジェネレーター

ローカル MAC アドレス ジェネレーター

最近スクリプトをコピーしましたからユーザー deltaray仮想マシンのランダムなローカル MAC アドレスを生成します。このスクリプトは、MAC アドレスを生成するための最も簡単で効果的な bash スクリプトなので気に入っています。

しかし、利用可能なすべてのプライベートMACアドレスには、4つの異なるOUIオクテットがあります。使用目的についてですが、私の質問は次のとおりです。

プライベート MAC アドレスの最初のオクテット セットをランダム化し、別の 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

ここで、x2、x6、xA、xE の「x」はランダム化されます。

静的プライベート MAC アドレス用に deltaray のスクリプトを変更しましたが、単一のソリューションではなく、徹底的に最善のソリューションを実現したいと考えています。

私の改造:

#!/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

ありがとう

私の質問に対する回答を下記に示します。

答え1

VM MAC アドレスがランダム (実際には疑似ランダム) である必要がある理由はありますか? 重複する前に、一連の数字の最大期間を保証する方法について質問しているようです。単純な増分が最も明白ですが、許容される最小/最大範囲の最大期間を持つ CRC が存在します。ただし、シーケンシャルでは問題はないと思うので、CRC は不要です。

最大期間の場合、ラップするときに VM がまだ存在するかどうかだけを気にする必要があります。VM の有効期間が原因で、これが発生する可能性がある場合は、実行中の VM の履歴を保持し、履歴に当たらなくなるまで別の選択肢を選択する必要があります。実行中の VM よりも広い範囲を利用できると仮定すると、重複は発生しません。ただし、履歴が必要になる可能性は低いです (単純な増分のように、最大​​期間のシーケンスを使用する場合)。使用可能なスペースに対する VM の有効期間と数について推測しています。

このアルゴリズムで自分で作成したもの以外に、衝突を心配する必要のある他の MAC アドレスは存在しないと仮定します。これは正しくない可能性があります。

答え2

私はそれを考え出した。

#!/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

これにより、すべての可能なローカル MAC アドレスが生成されます。

関連情報