Динамический DNS (DDNS) — технология, позволяющая информации на DNS-сервере обновляться в реальном времени и по желанию в автоматическом режиме. Она применяется для назначения постоянного доменного имени устройству (компьютеру, сетевому накопителю) с динамическим и статическим IP-адресом. Это может быть IP-адрес, назначенный вручную, полученный по DHCP или по IPCP в PPP-соединениях, например при удалённом доступе через модем. Другие машины в Интернете могут устанавливать соединение с этой машиной по доменному имени и даже не знать, что IP-адрес изменился.
Время жизни (TTL) (см. RFC 1034) для динамической записи делается очень маленьким (не более двух-трёх минут), иначе другие DNS-серверы поместят её в свой кэш, а когда она изменится, их клиенты долго будут получать устаревшую информацию.
Динамический DNS также часто применяется в локальных сетях, где клиенты получают IP-адрес по DHCP, а потом регистрируют свои имена в локальном DNS-сервере.
Протокол для обновления DNS описан в RFC 2136 и реализован, например, утилитой nsupdate. Для безопасной аутентификации клиента можно использовать технологию TSIG (RFC 2845), в которой используется заранее известный ключ. Минус этой технологии в том, что ключ должен быть установлен на каждом клиенте и на сервере. Кроме того требуется установить nsupdate, что расточительно для маленькой памяти роутеров.
Для обновления обычно используются специальные программы-клиенты, которые для обновления данных могут использовать и запросы HTTP GET
которую можно выполнить с помощью программы wget которая всегда уже есть установленная на роутере. Большинство DDNS провайдеров имеют API такой же, как у первого провайдера DynDNS (Dyn.com), поэтому этот протокол часто называют DynDNS2. Необходимо зарегистрироваться в сервисе динамического DNS и получить свои имя пользователя и пароль. Далее простейший запрос на обновление записи можно выполнить командой:
wget -O - http://{username}:{password}@members.dyndns.org/nic/update?hostname={yourhostname}&myip={ipaddress}
Часто такую команду добавляют в crontab, чтобы она периодически выполнялась. Большинство роутеров имеют GUI настройку, где можно указать все эти опции и роутер сам будет обновлять её, когда поменялся IP.
Microsoft для своего Active Directory (которому динамическая DNS необходима, так как контроллеры домена регистрируют в DNS свои SRV-записи, чтобы другие машины могли их найти) использует другой способ, основанный на Kerberos‐аутентификации и не требующий ручного распространения ключей. Это называется GSS-TSIG, но является лишь предложением стандарта[1] и поддерживается только в ОС Windows NT версий 5.0 и выше.
BIND (очень популярный DNS-сервер для UNIX‐подобных ОС, таких как GNU/Linux, FreeBSD) поддерживает TSIG (RFC 2845), а по GSS-TSIG работать не может, однако версии от 8.2.2 поддерживают SRV-запись, что обеспечивает совместимость с Windows NT.
Провайдеры
править- DynDNS первый и наиболее поддерживаемый всеми роутерами, только один домен бесплатный
- No-IP только один домен бесплатный
- Duck DNS бесплатный, популярный, работает уже продолжительное время
- nsupdate.info с открытым исходным кодом и бесплатный
- Free DNS бесплатный, работает уже продолжительное время
Некоторые DNS хостинги тоже поддерживают DNS для обычных доменов:
Этот список провайдеров DDNS не исчерпывающий.
Клиенты DDNS
править- DDNS client для роутеров c OpenWrt
- In-a-Dyn зависит от библиотеки GnuTLS
- ddupdate использует Python
- ddclient использует Perl
- DynDNS Simply Client для Windows. Старый но всё ещё работает
ПО для DDNS провайдеров
править- nsupdate.info написан на Python и Django, принимает запросы по DynDNS2 протоколу и далее вызывает nsupdate для сконфигурированного DNS сервера. Может также форвардить по DynDNS2 на другой сервер.
- dprandzioch/docker-ddns Написан на Go, принимает запросы по DynDNS2 протоколу и далее вызывает nsupdate для сконфигурированного DNS сервера (BIND)
- olimpo88/PyDDNS UI для dprandzioch/docker-ddns написанный на Python и Django
- ddserver Написан на Python, является pipe-backend для PowerDNS
- node-ddns Написан на NodeJS, самостоятельный DNS сервер с базовой поддержкой DynDNS2
- hoedlmoser/ddnss Написан на PHP, вызывает nsupdate
- dyndns53 для AWS Lambda
- duckdns-mirror Написан на Java, исходный код DuckDNS
- GnuDip отдельный протокол, старый и малопопулярный. Поддерживается роутерами Huawei.
- x1angli/pyDDNS обновляет локальный файл /etc/hosts
См. также
править- KadNode распределённый DNS поверх DHT
- Tor#Анонимные скрытые службы Tor onion сервис позволяет получить домен и не требует публичного IP
- Альтернативные корневые серверы DNS
- mDNS и DNS-SD альтернативный механизм DNS для локальной сети
Примечания
править- ↑ Описание GSS-TSIG Архивная копия от 16 июня 2013 на Wayback Machine // ietf.org
Ссылки
править- Список сервисов динамических DNS // DMOZ (англ.)
- Список бесплатных DNS-сервисов (рус.) // Хабрахабр, 23.11.2013
- Список сервисов динамических DNS Архивная копия от 6 ноября 2015 на Wayback Machine (англ.)