По запросу новый IPv6 с использованием расширения конфиденциальности?

Включение Расширения конфиденциальности ( net.ipv6.conf.eth0.use_tempaddr = 2 в /etc/sysctl.conf ) для IPv6 дает мне новый IP-адрес на фиксированный период времени. Есть ли способ получить новый IPv6 по запросу? т.е. при необходимости обновить новый IPv6?

3
задан 23 August 2020 в 08:46
1 ответ

"Активный" временный адрес имеет свойства 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 для более быстрого исчезновения устаревшего адреса.

2
ответ дан 23 August 2020 в 16:06

Теги

Похожие вопросы