如何在bash中生成有效的ULA?

问题描述 投票:0回答:3

https://en.wikipedia.org/wiki/Unique_local_address

https://www.rfc-editor.org/rfc/rfc4193#section-3.2.2

http://www.sixxs.net/tools/grh/ula/list/

我一直在寻找一个本地脚本来生成ULA;有许多在线生成器(以及一些坏的/损坏的);我想要一个本地脚本。

https://www.vultr.com/tools/mac-converter/

http://ben.akrin.com/?p=1347

ipv6
3个回答
0
投票

这应该在物理机上运行;不在模拟系统或虚拟环境上。根据需要调整 if 变量。

if=eth0
t="$(ntptime | grep "time " | head -n1 | awk '{print $2}')"
EUI_48="$(ip a s dev $if | grep "link/ether" | awk '{print $2}')"
EUI_64="$(ipv6calc --action prefixmac2ipv6 --in prefix+mac --out ipv6addr :: $EUI_48 | sed 's/^:://')"
conq="$(echo "$t $EUI_64" | tr -d ".: ")"
sha1="$(for x in $(echo "$conq" | sed 's/\(..\)/\1 /g') ; do printf "\x${x}" ; done | sha1sum | awk '{print $1}' | tail -c 11 | sed 's/\(..\)/\1 /g')"
ULA="$(echo $sha1 | awk '{print "fd" $1 ":" $2 $3 ":" $4 $5 "::/48"}')"
echo "$t $EUI_48 $EUI_64 $conq=> $ULA"

顺便说一句,ipv6calc 被设计为以这种方式生成链接本地地址:

ipv6calc --action prefixmac2ipv6 --in prefix+mac --out ipv6addr fe80:: $EUI_48

如果你不想安装 ipv6calc,这里有一个将 EUI-48 转换为 EUI-64 的函数:https://gist.github.com/mej/592da948323fc58455c1


0
投票

已经存在这个 github 存储库,其中包含生成 ULA 的 bash 脚本。它被编写为交互式运行并询问 mac 地址(并确认 ntp 查询)。


0
投票

只需使用内置的

printf
和特殊的 Bash 变量
$RANDOM
,您就可以轻松地在 bash 中生成有效的 ULA:

printf "fd%x:%x:%x:%x::/64\n" "$(( $RANDOM/256 ))" "$RANDOM" "$RANDOM" "$RANDOM" 

在我自己的机器上运行几次,会得到一堆新生成的(更重要的是,有效的)带有随机子网 ID 的 ULA 地址:

fd45:364c:99:6690::/64
fd19:59c8:7e73:30d7::/64
fd0c:4ebe:60ce:7a02::/64
...

如果您只想在每个站点使用一个 ULA 网络和多个子网 ID,请省略最后两个字节并根据需要手动分配子网 ID:

fd45:364c:99::/64
fd45:364c:99:1::/64
fd45:364c:99:2::/64

在使用 ULA 之前,请确保运行该命令几次,以确保您的

$RANDOM
给出随机值。如果不是,请启动一个新的 bash 会话,并确保您没有对随机变量做任何事情

© www.soinside.com 2019 - 2024. All rights reserved.