Выполнить скрипт при смене префикса ipv6

699
MBober

Как я могу выполнить скрипт или программу, когда мой префикс IPv6 (с возможностью маршрутизации по всему миру) меняется?

Если нет (в настоящее время) простого способа сделать это, указатель на соответствующие системные вызовы Posix был бы для меня вполне нормальным. Тогда я мог бы сам написать немного кода. Но в настоящее время я немного запутался в этом вопросе.

Предыстория: мой ISP (потребительский контракт) дает мне только префикс IPv6 с возможностью маршрутизации по всему миру со сроком службы около дня. Есть несколько веских причин для этого (сделать возможным перемещение по сети), но мой провайдер (в отличие от моего старого) не просто переназначает мне мой старый префикс после истечения срока его службы, но дает мне совершенно новый. Теперь я хочу обновить некоторые внешние DNS с моим новым префиксом, когда это произойдет.

3
Как вы сейчас настраиваете IPv6? Может быть, там есть полезный крючок. a CVn 9 лет назад 0

2 ответа на вопрос

2
Andrew Domaszek

You could sniff for SLAAC or DHCP6 packets to your MAC, for example, have iptables log particular bytes of SLAAC or DHCP6 to syslog and run a log watcher. There is no posix call to directly get local address, though workarounds exist. For linux, this netlink code should let you wait for an update message from the kernel and perform whatever necessary steps you need.

Для прослушивания пакетов требуются права суперпользователя, верно? Я не думаю, что это должно быть необходимо. Код netlink выглядит многообещающе. Я дам ему попробовать. Благодарю. MBober 9 лет назад 0
Да, это так. В моем примере iptables работает в ядре (с привилегиями), но системный журнал должен быть доступен для чтения всем. Я не могу гарантировать, что конкретный код netlink не требует CAP_NET_ADMIN, так как я не пробовал, но разумно не должен. Andrew Domaszek 9 лет назад 0
@MBober Нет, перехват пакетов не требует привилегий root. Однако это * требует * возможности `CAP_NET_ADMIN`, которую вам дают привилегии root. [Возможности (7)] (http://man7.org/linux/man-pages/man7/capabilities.7.html). a CVn 9 лет назад 1
0
Wolfgang Tremmel

вот мое решение .... просто, но работает ... просто поместите это или что-то вроде этого в /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 

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