Включение Расширения конфиденциальности
( net.ipv6.conf.eth0.use_tempaddr = 2
в /etc/sysctl.conf
) для IPv6
дает мне новый IP-адрес на фиксированный период времени. Есть ли способ получить новый IPv6 по запросу? т.е. при необходимости обновить новый IPv6?
"Активный" временный адрес имеет свойства temporary и dynamic, но не deprecated. чтобы стать устаревшим (т. е. его значение preferred_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
Обратите внимание, что изменение этого значения удаляет свойство dynamic, которое имело бы не произошло естественным образом и может привести к более позднему созданию дополнительных временных адресов раньше, чем ожидалось.
С выводом JSON ip
и 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
для более быстрого исчезновения устаревшего адреса.