Включение Privacy Extension
( net.ipv6.conf.eth0.use_tempaddr=2
в /etc/sysctl.conf
) для 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.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
чтобы устаревший адрес полностью исчез быстрее.