Включение Privacy Extension
(net.ipv6.conf.eth0.use_tempaddr=2
в /etc/sysctl.conf
) для IPv6
дает мне новый IP-адрес на фиксированный период времени, есть ли способ получить новый IPv6 по запросу? т.е. обновить новый IPv6 при необходимости?
«Активный» временный адрес имеет свойства временный и динамичный но нет устарел. Когда он скоро станет устаревшим (например, его предпочтительный_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 на интерфейсе 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
чтобы устаревший адрес исчез полностью быстрее.