Динамический DNS

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Динамический DNS — технология, позволяющая информации на 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 провайдеров[править | править код]

  • 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

См. также[править | править код]

Примечания[править | править код]

Ссылки[править | править код]