按需使用新 IPv6 隐私扩展?

按需使用新 IPv6 隐私扩展?

启用Privacy Extensionnet.ipv6.conf.eth0.use_tempaddr=2/etc/sysctl.confIPv6会在固定时间内为我提供一个新的 IP 地址,有没有办法按需获取新的 IPv6?即在需要时刷新新的 IPv6?

答案1

“活动”临时地址具有以下属性暂时的动态的但不是已弃用. 当它即将被弃用时(即:其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/64eth0

ip address change 2001:db8::1/64 dev eth0 preferred_lft 5

请注意,篡改此设置会删除动态的财产,这不会自然发生,并且可能比预期更快地触发创建额外的临时地址。


使用ipJSON 输出和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现在已弃用的地址以更快地完全消失。

相关内容