Networking
按需使用隱私擴展的新 IPv6?
啟用
Privacy Extension
(net.ipv6.conf.eth0.use_tempaddr=2
in/etc/sysctl.conf
) 為IPv6
我提供了一個固定時間段的新 IP 地址,有沒有辦法按需獲取新的 IPv6?即在需要時刷新新的 IPv6?
“活動”臨時地址具有臨時和動態屬性,但未棄用。當它即將被棄用時(即:它的preferred_lft值下降到0),核心將一個新的臨時地址添加到介面。
介面的目前臨時地址,將是此處顯示的結果的一部分:
ip -6 address show temporary dynamic
但不是舊地址的一部分,它們仍然有效但已棄用,如下所示:
ip -6 address show temporary deprecated
您只需將其
preferred_lft
屬性降低到接近零即可觸發新臨時地址的創建。從反複試驗來看,如果設置低於 3,這將不起作用preferred_lft
:在觸發創建之前倒計時達到 0,然後它就不再起作用(但仍然可以preferred_lft
稍後再次設置為 >=3 以獲取觸發器)。我不知道是否有任何關於這種特殊性的旋鈕。5 秒看起來是一個安全值,這意味著新地址將在大約 2 或 3 秒後出現。假設目前在介面eth0上找到的值為 2001:db8::1/64 :
ip address change 2001:db8::1/64 dev eth0 preferred_lft 5
請注意,對此進行篡改會刪除動態屬性,這不會自然發生,並且可能會比預期更快地觸發稍後創建其他臨時地址。
使用
ip
的 JSON 輸出和jq
一些可編寫腳本是可能的,這就是我輸出的命令,準備通過管道傳輸到 shell 以一次更改所有候選臨時地址(通常需要一個多宿主系統來獲取多個但篡改這也可能會在以後創建多個)。它驗證臨時和動態地址不被棄用以將其視為候選地址: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
讓現在已棄用的地址更快地完全消失。