Privacy Extension
(net.ipv6.conf.eth0.use_tempaddr=2
で/etc/sysctl.conf
)を有効にするとIPv6
、一定期間新しい IP アドレスが提供されますが、オンデマンドで新しい IPv6 を取得する方法はありますか? つまり、必要なときに新しい IPv6 を更新するのですか?
答え1
「アクティブ」な一時アドレスには次のような特性がある一時的そして動的だがしかし非推奨廃止予定になったとき(つまり、優先_lft値が 0 に下がると、カーネルによって新しい一時アドレスがインターフェースに追加されます。
インターフェースの現在の一時アドレスは、ここに表示される結果の一部になります。
ip -6 address show temporary dynamic
ただし、次のように表示される、まだ有効だが非推奨となっている古いアドレスの一部ではありません。
ip -6 address show temporary deprecated
新しい一時アドレスの作成をトリガーするには、そのプロパティをほぼ 0 に下げるだけですpreferred_lft
。試行錯誤の結果、preferred_lft
3 未満に設定するとこれは機能しません。作成をトリガーする前にカウントダウンが 0 に達し、その後は機能しなくなります (ただし、preferred_lft
後でトリガーを取得するために再度 3 以上に設定することはできます)。この特殊性に関するノブがあるかどうかはわかりません。5 秒は安全な値のように見えます。つまり、新しいアドレスは約 2 秒または 3 秒後に表示されます。
現在見つかった値がインターフェースの2001:db8::1/64であると仮定します。eth0:
ip address change 2001:db8::1/64 dev eth0 preferred_lft 5
これを改ざんすると、動的これは自然には発生しないプロパティであり、予想よりも早く追加の一時アドレスが後で作成される可能性があります。
ip
のJSON出力とjq
スクリプト化は可能ですが、ここではシェルにパイプしてすべての候補一時アドレスを一度に変更するコマンドを出力する方法を紹介します(通常、複数のアドレスを取得するにはマルチホームシステムが必要ですが、これを改ざんすると後で複数のアドレスが作成される可能性もあります)。一時的そして動的住所は非推奨それを候補として検討する:
ip -6 -p -j address show temporary dynamic | jq -j '.[] |
. as $i |
.addr_info[] as $a |
if $a.local == null // $a.deprecated == true then
empty
else
"ip -6 address change ",
$a.local, "/", $a.prefixlen,
" dev ", $i.ifname,
" preferred_lft 5\n"
end'
再び出力されます:
ip -6 address change 2001:db8::1/64 dev eth0 preferred_lft 5
valid_lft
廃止されたアドレスをより早く完全に消すために、削減することも検討してください。