啟用Privacy Extension
( net.ipv6.conf.eth0.use_tempaddr=2
in /etc/sysctl.conf
) for 會IPv6
在固定的時間內為我提供一個新的 IP 位址,有沒有辦法按需取得新的 IPv6?即在需要時刷新新的 IPv6?
答案1
「活動」臨時地址具有屬性暫時的和動態的但不是已棄用。當它即將被棄用時(即:它的首選_lft值下降到 0),核心將一個新的臨時位址加入介面。
介面的目前臨時位址將成為此處顯示的結果的一部分:
ip -6 address show temporary dynamic
但不屬於舊地址的一部分,舊地址仍然有效,但已棄用,顯示如下:
ip -6 address show temporary deprecated
您只需將其preferred_lft
屬性降低到接近零即可觸發新臨時地址的建立。經過反覆試驗,如果preferred_lft
設定低於 3,則不會起作用:在觸發建立之前倒數達到 0,然後就不再起作用(但preferred_lft
稍後仍然可以再次設定為 >= 3 來觸發)。我不知道這個特性是否有任何旋鈕。 5 秒看起來是一個安全值,這表示新地址將在大約 2 或 3 秒後出現。
假設介面上目前找到的值為 2001:db8::1/64乙太網路0:
ip address change 2001:db8::1/64 dev eth0 preferred_lft 5
請注意,篡改此操作會刪除動態的屬性,這不會自然發生,並且可能會比預期更快地觸發稍後創建額外的臨時地址。
Withip
的 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
以使現已棄用的地址更快地完全消失。