转载注明来源: 本文连接 来自osnosn的博客,写于 2019-11-07.html
运营商提供ipv6地址。
路由器后有台linux机器,经过eui64方式自动配置ipv6地址。
可是,运营商会定时强制路由器重拨,致使ipv6的前缀(prefix)变化。
虽然linux会立刻自动配置新的ipv6地址。但旧的ipv6地址不会立刻消失。
旧ipv6须要等超时expired后才删除,有时要等2000多秒(30多分钟)。
这段时间主机会有两个ipv6地址。若是不能正确找出新的ipv6地址去更新ddns,则这段时间没法访问主机。linux
经过查看 ip addr show
发现每一个ip后面一行给出了expired时间。
新ip的expired时间老是比旧ip大。这样就能够找出最新的ipv6地址了。shell
如下是shell脚本,会显示出最新的ipv6地址。ui
ip addr show|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|grep 'ff:fe'|sort -nr|head -n1|cut -d' ' -f2
脚本执行步骤是,code
若是要把这个地址保存到变量,用来更新ddns。htm
ipv6=$(ip addr show|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|grep 'ff:fe'|sort -nr|head -n1|cut -d' ' -f2) echo "my ipv6 is:" $ipv6
---end---blog