...

суббота, 20 декабря 2014 г.

IPv6, miredo, dynamic DNS AAAA


Захотелось странного — чтоб мои IPv6-enabled (miredo) хосты еще и динамически обновляемую DNS запись имели. Поизучав вопрос выяснил, что многие распространённые dyndns сервисы или не предоставляют возможность регистрации AAAA (IPv6 эквивалент записи типа A для IPv4), или не предоставляют её бесплатно, или имеют мутные настройки динамического обновления неизвестного уровня безопасности (или вовсе http/plaintext). Перепробовал с десяток сервисов и решил остановиться на freedns.afraid.org

Плюсы:



  • Человеко-понятная админка (без всяких «купить AAAA за $0 USD»)

  • Бесплатно дают AAAA

  • Безопасное (https) обновление

  • URL-based обновление (не приходится испытывать сомнений о конфиге для агентов типа ddclient)




Из особенностей — однострочный скрипт для обновления AAAA пришлось написать самому. Получилось такое:


cat /etc/cron.d/freedns-watcher



PATH=/sbin:/usr/sbin:/bin:/usr/bin

* * * * * root ipv6=$(ip a |grep -s -i -o '2001\:[a-f0-9\.:]*') && [ "$(nslookup -query=AAAA myhost.mooo.com ns1.afraid.org |grep -s -i -o '2001\:[a-f0-9\.:]*')" != "$ipv6" ] && curl -m 30 http://ift.tt/1zMekPa 2>/dev/null |grep Updated && date >> /var/log/freedns.log &> /dev/null




Скрипт хоть и однострочный но всё же немного длинноватый получился, поэтому прокомментирую что тут зачем:

* * * * *


5 звёздочек — информация для cron «запускать это каждую минуту»

root


сами решайте под какой учёткой запускать

ipv6=$(ip a |grep -s -i -o '2001\:[a-f0-9\.:]*')


Достаем из выхлопа ip teredo-адрес, работает примерно так:


ip a |grep -s -i -o '2001\:[a-f0-9\.:]*'
2001:0:52ab:53b:2ab4:555e:23d0:1dc9


Если адрес найден — помещаем его в переменную $ipv6, если не найден — присвоение фейлится и дальнейших трудов по обновлению записи AAAA не производится (ведь типичная причина отсутствия teredo адреса — отсутствие подключения (IPv4) к Интернету, да и обновлять собственно особо не на что)

[ "$(nslookup -query=AAAA myhost.mooo.com ns1.afraid.org |grep -s -i -o '2001\:[a-f0-9\.:]*')" != "$ipv6" ]


Опрашиваем сервер ns1.afraid.org на предмет «какой там нынче IP адрес у вас записан для моего AAAA?» и сравниваем с тем, что нам сконфигурил на данный момент miredo. Если совпадает — ни чего делать не надо, выполнение скрипта прерывается. Почему указан их DNS сервер вместо системного? Что бы минимизировать задержку нотификации нашего скрипта об изменение записи. На других DNS серверах изменение будет с большой задержкой. Можно было бы ни чего не проверять а тупо долбить ежеминутно по указанному URL, но по-моему это хамство. С другой стороны отправка DNS запросов о вашем AAAA это в каком-то смысле палево, поэтому данная часть скрипта может считаться опциональной.

curl -m 30 http://ift.tt/1zMekPa 2>/dev/null |grep Updated



date >> /var/log/freedns.log


пишем в лог дату успешного обновления AAAA

&> /dev/null


cron, не беспокойся пожалуйста и не присылай нам письмо каждую минуту по поводу запуска этого скрипта

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Want something else to read? How about 'Grievous Censorship' By The Guardian: Israel, Gaza And The Termination Of Nafeez Ahmed's Blog


Комментариев нет:

Отправить комментарий