每当我的(全球可路由的)IPv6 前缀发生变化时,我如何执行脚本或程序?
如果(目前)没有简单的方法可以做到这一点,那么指向相应 Posix 系统调用的指针对我来说完全没问题。然后我可以自己编写一些 C 代码。但目前我对这个问题有点迷茫。
背景:我的 ISP(消费者合同)只为我提供了一个全球可路由的 IPv6 前缀,有效期约为一天。这样做有一些很好的理由(使网络迁移成为可能),但我的 ISP(与我的旧 ISP 不同)在旧前缀的有效期到期后不会简单地将其重新分配给我,而是为我提供一个全新的前缀。现在,我想在发生这种情况时使用我的新前缀更新一些外部 DNS。
答案1
例如,您可以嗅探到您的 MAC 的 SLAAC 或 DHCP6 数据包,让 iptables 将 SLAAC 或 DHCP6 的特定字节记录到 syslog 并运行日志监视程序。没有 posix 调用来直接获取本地地址,尽管存在解决办法对于 Linux,这个 netlink 代码应该让您等待来自内核的更新消息并执行您需要的任何必要步骤。
答案2
这是我的解决方案....简单但有效...只需将此或类似的内容放入/etc/cron.hourly:
#!/bin/bash
#
ADDRSTORE=/var/local/lib/dyndns/myoldipv6address
MYV6=`ip -6 address show scope global -deprecated | grep inet6 | cut -d/ -f1 | sed -e 's/ *inet6 //'`
MYOLDV6=`cat $ADDRSTORE`
if [ $MYV6 != $MYOLDV6 ]; then
# do change-action here
echo $MYV6 >$ADDRSTORE
fi