それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

openssl と sed でipv6 のULAプレフィックスを作る(IPv6アドレスのランダム生成)

ULAのPrefixを生成するなら

openssl rand -hex 5 | sed -r 's|^(.{2})(.{4})(.{4})|fd\1:\2:\3::/48|'

ローカルアドレスプレフィックスの場合は、

prefix に16のネットワーク・アドレスを付ける。まとめてランダム生成すると。

openssl rand -hex 7 | sed -r 's|^(.{2})(.{4})(.{4})(.{4})|fd\1:\2:\3:\4::/64|'

実行例

root@router01:~# openssl rand -hex 5 | sed -r 's|^(.{2})(.{4})(.{4})|fd\1:\2:\3::/48|'
fd8b:9230:0268::/48
root@router01:~# openssl rand -hex 7 | sed -r 's|^(.{2})(.{4})(.{4})(.{4})|fd\1:\2:\3:\4::/64|'
fd71:c054:8514:c035::/64

あとは、これに ::1 とか書いておけば、実験用なサンプルのv6アドレスをランダムに生成することができる。

たとえば、::1と書いておく。

root@router01:~# openssl rand -hex 7 | sed -r 's|^(.{2})(.{4})(.{4})(.{4})|fd\1:\2:\3:\4::1/64|'
fd8a:c6e2:e280:275d::1/64

フルランダムで、128ビットのすべてを作ってもいいけど、実験用にv6アドレスを作る分には、MACアドレスから生成したりインタフェース名も冗長だし可視性も低下するので、ランダムで/64くらいで、適当な実験をするには十分なのです。

アドレスを追加する例

ユニークローカルユニキャストアドレスを明示する

ADDR=$(openssl rand -hex 7 | sed -r 's|^(.{2})(.{4})(.{4})(.{4})|fd\1:\2:\3:\4::1/64|')
ip addr add $ADDR dev eth1
ip -6 addr show eth1

ユニークローカルユニキャストアドレス

fd00 ってなに?ユニークローカルユニキャストアドレスってfc00 じゃないの?という疑問も出てくると思うが。

fc00::/7 は 先頭7ビットが1111,110である

F C 0 0
1111 1100 0000 0000

先頭7ビット(1111,110 ) が固定で残りの全ては0/1のすべてを含む

1111,1100,000,....0 から 1111,1101,1111,111...1である。

すなわち FC00:00... から FDFF までである。

2023-04-21

実行例を追記

FC00 と fd12 などのプレフィックスについて追記。