Статических dns серверов в динамические. Бесплатный аналог dyndns и no-ip используя Яндекс DNS

Подписаться
Вступай в сообщество «allcorp24.ru»!
ВКонтакте:

Статья более не актуальна. Яндекс всех поголовно переводит на Яндекс.Коннект. В API Коннекта на данный момент отсутствует возможность управлять DNS-записями. API pdd.yandex уже не работает.
Можно использовать api Telegram для получения динамических ip. Инструкция

Я давно пользовался услугами dyndns для подключения из вне к домашней файлопомойке-торрентокачалке на фряхе, у которой динамический ip от провайдера. Хотя уже давно у dyndns эта услуга платная для вновь зарегистрировавшихся пользователей, но я пользовался бесплатно, т.к зарегистрировался ещё до того как они стали за это просить денег. Но на днях мне пришло письмо что они не могут больше предоставлять эту услугу мне бесплатно и со следующего месяца я должен буду за неё платить. Меня это не устроило и я стал искать выход из текущего положения.

Т. к. домены у меня делегированы на Яндекс DNS я стал читать мануалы для их API и выход был найден. Расскажу о нём ниже.

Чтобы использовать яндекс api нам нужно получить токен. Получить его довольно просто, в браузере вводим.

Https://pddimp.yandex.ru/get_token.xml?domain_name=domen.ru

Где domen.ru - ваш домен делегированный на яндекс. Вводим капчу и в выводе ищем:

Token="XXXXXX"

В кавычках будет ваш токен. Копируем его куда-нибудь, он нам потребуется чуть позже.
Теперь нам нужно добавить к нашему домену сабдомен, который будет ссылаться на машину с динамическим ip. Переходим на https://pdd.yandex.ru , выбираем домен и кликаем «Редактор DNS» там добавляем А-запись для домена:

В поле «Хост» вводите сабдомен, а в поле «Значение записи» пишете любой ip(в последствии он будет меняться, когда будет изменятся ip вашей тачки).

Теперь нам нужно получить id нашей записи. Для этого в браузере вводим:

Https://pddimp.yandex.ru/nsapi/get_domain_records.xml?token=XXXXXX&domain=domen.ru

Где ХХХХХХ-ваш токен, а domen.ru - ваш домен делегированный на яндекс.

В выводе ищем строку с нашей записью myhome.domen.ru и в этой строке находим:

Id="1234567"

В кавычках id записи, так же копируем его куда-нибудь.

Теперь пишем скрипт на тачке на которой динамический ip. Скрипт будет проверять внешний ip тачки раз в пол часа и если он изменился, то будет изменять А-запись на Яндекс DNS.

# ee /usr/local/bin/dyndns.sh

#!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH DOMEN="domen.ru" # ваш домен делегированный на яндекс SUB=myhome # сабдомен TOKEN=XXXXXX # токен RECID=1234567 # id записи while true; do IP="curl -s http://ip..domen.ru dns1.yandex.ru | grep has | awk "{print $4}"` # замените myhome.domen.ru на ваш сабдомен if [ $IP != $YAIP ] then curl -s "https://pddimp.yandex.ru/nsapi/edit_a_record.xml?token=$TOKEN&domain=$DOMEN&subdomain=$SUB&record_id=$RECID&content=$IP&ttl=1800" fi sleep 1800; done;

Значения переменных измените в соответствии с комментариями.

Делаем скрипт исполняемым:

# chmod +x /usr/local/bin/dyndns.sh

И добавляем соответствующую запись в крон:

# crontab -e @reboot /usr/local/bin/dyndns.sh

Всё, теперь после перезагрузки скрипт будет автоматически запускаться. Перезагружаемся или запускаем скрипт вручную и проверяем на https://pdd.yandex.ru изменилось ли значение записи для нашего сабдомена.

P.S. Чтобы было совсем все бесплатно, можно не покупать домен а использовать бесплатный домен в зоне.tk. Получить его можно на сайте www.dot.tk

В разговорах об обеспечении безопасности подключения к интернету или доступа к заблокированному контенту в вашей географической области, вы, наверное, слышали о DNS. Несмотря на то, что все провайдеры поставляют свой DNS-сервер по умолчанию, вы можете использовать альтернативный. Служба DNS используется для определения IP-адресов сайтов по их домену. Всё очень просто - на самом деле в интернете не существует никаких буквенных адресов вроде сайт, все связи и сообщения между компьютерами осуществляются по IP-адресу. Вот для его определения по доменному имени и используются сервера DNS, в которых хранится огромная таблица соответствия доменных имён и IP-адресов.

Использование альтернативного DNS-сервера предоставляет несколько преимуществ:

  • Чем ближе вы находитесь к DNS-серверу, тем быстрее будет выполняться определение имён.
  • Если DNS провайдера не очень надёжны, альтернативный DNS улучшит стабильность.
  • Вы избавитесь от ограничений доступа к контенту на основе географического положения.

Если эти причины, или хотя бы одна из них заинтересовали вас, пришло время настроить DNS-сервер в своей системе. В этой статье мы поговорим о том, как настроить DNS-сервер в Linux, как узнать его скорость работы, а также рассмотрим лучшие DNS-серверы. Вы можете выбрать лучший в зависимости от ваших потребностей.

Поскольку сайт наш всё-таки о Linux, рассмотрим, как настроить DNS-серверы Linux. Настройки DNS-сервера в любом Linux-дистрибутиве находятся в файле /etc/resolv.conf. Адрес DNS-сервера указывается в следующем формате:

nameserver 192.168.137.1

Здесь 192.168.137.1 - это адрес DNS-сервера. Но настройка в этом файле будет работать только до перезагрузки, поскольку этот файл перегенерируется при каждой загрузке системы.

Если вы используете NetworkManager, можно настроить DNS-сервер там, в свойствах подключения. Откройте настройки сетевых подключений, нажмите в контекстном меню И зменить для нужного подключения, затем на вкладке IPv4 укажите нужный DNS-сервер:

Теперь настройки сохраняться даже после перезагрузки.

Протестировать скорость работы DNS-сервера можно с помощью утилиты nsloockup . Например:

time nslookup www.google.com 208.67.222.222

Server: 208.67.222.222
Address: 208.67.222.222#53
Non-authoritative answer:
Name: www.google.com
Address: 173.194.113.209
Name: www.google.com
Address: 173.194.113.212
Name: www.google.com
Address: 173.194.113.210
Name: www.google.com
Address: 173.194.113.211
Name: www.google.com
Address: 173.194.113.208
real 0m0.073s
user 0m0.012s
sys 0m0.004s

Первый параметр - адрес сайта, который будем измерять, второй - адрес DNS-сервера. Команда time замеряет время выполнения nslookup в миллисекундах. А теперь перейдём непосредственно к списку "хорошие DNS-серверы".

Лучшие DNS-серверы

1. Google Public DNS

Первый DNS сервер в нашем списке - сервер от Google - Google Public DNS. Он работает с декабря 2009 и его цель - сделать работу пользователей в интернете быстрее, безопаснее и удобнее. В настоящее время это крупнейшая государственная DNS-структура в мире. Для использования Google Public DNS достаточно использовать IP-адрес DNS сервера 8.8.8.8 или 8.8.4.4.

При переходе на Google Public DNS повышается безопасность и оптимизируется скорость работы, поскольку Google действительно использует Anycast-маршрутизацию для нахождения ближайшего сервера. Кроме того, он устойчив к атакам DNS Cache, а также DoS.

2. OpenDNS

Если вы ищете не просто замену обычному DNS, а расширенную версию, которая даст вам больше контроля, попробуйте OpenDNS. Как говорится в сообщении этой компании, вы сделаете ещё один шаг на пути к безопасности путем внедрения этой службы. Есть два варианта OpenDNS - домашний и корпоративный. Домашняя версия поставляется с родительским контролем, защитой от фишинга и улучшенной скоростью. Корпоративная версия OpenDNS имеет полную функциональность для защиты сети предприятия. Для домашнего использования вы можете получить OpenDNS бесплатно. Чтобы настроить DNS-серверы Linux просто установите следующие адреса DNS: 208.67.222.222 и 208.67.220.220. OpenDNS также поддерживает Anycast.

3. DNS.WATCH

DNS.WATCH - это минималистичная служба DNS, которая позволяет вам иметь быстрый доступ в интернет без цензуры. Поскольку эта служба построена по принципам свободы, вы можете быть уверены,что ваш запрос достигнет цели и не будет использовано никаких перенаправлений. Сервер работает быстро и стабильно. Если вы живете в стране с цензурой, это будет отличным решением. Сервера DNS-службы: 82.200.69.80 и 84.200.70.40.

4. Norton ConnectSafe

Norton ConnectSafe - ещё одна служба DNS, предназначенная для усиленной защиты вашего интернета. Следует отметить, что Norton занимается аспектами безопасности многих устройств в течение длительного времени. Поэтому вы можете быть уверены в качестве Norton ConnectSafe. Сервис предлагает три различных варианта защиты: защита от вредоносных программ, фишинга и жульничества, защита от порнографии и других угроз. Для каждого вида используются разные IP-адреса. Для защиты всей домашней сети достаточно просто настроить маршрутизатор.

5. Level3 DNS

Level3 DNS - это отличная служба DNS, если вы ищете надежный DNS-сервер с отличной производительностью. Хотя и Level3 не такой большой, как Google, у него впечатляющая инфраструктура. Вы можете быть уверенны, что скорость будет на высшем уровне. IP-адреса DNS сервера: 209.244.0.3 , 209.244.0.4 , 4.2.2.1, 4.2.2.2 , 4.2.2.3 и 4.2.2.4.

6. Comodo Secure DNS

Comodo Secure DNS - ещё одна служба, сочетающая в себе скорость, надёжность и безопасность. Comodo использует огромную сеть, которая включает в себя большое количество DNS-серверов. Скорость будет оптимизирована путём выбора сервера в зависимости от вашего местоположения. Кроме того, Comodo заботится о безопасности, поставляя список опасных сайтов, а служба DNS убедится, что вы не посещаете ни один из них. IP-адреса Comodo Secure DNS: 8.26.56.26 и 8.20.247.20.

7. OpenNIC DNS

Хотя OpenNIC DNS находится последним в списке, он будет отличным решением, если вам нужен свободный доступ в интернет без цензуры, налагаемой властями. У OpenNIC DNS очень большая инфраструктура сети, и поэтому, скорее всего, будет найден DNS-сервер, находящийся недалеко от вашего физического местоположения. Просто выберите нужный сервер из списка .

Выводы

Как видите, одни из этих серверов обеспечивают обычный DNS в обход запретов провайдера, другие же имеют дополнительные возможности - защиту от атак, фишинга и опасных программ. Все они - лучшие DNS-серверы, и вы можете выбрать один из них в зависимости от ваших потребностей.

Иногда необходимо прописать DNS для компьютера с динамическим IP адресом. Простым путем для этого являются сервисы по типу dyndns , описанные в недавнем топике . Иногда такой подход работает достаточно плохо.

Напрмер в моей ситуации, провайдер иногда меняет мой публичный IP адрес. Это иногда случается обычно раз в несколько месяцев. Кроме того, мой домашний компьютер перезагружается крайне редко. За это время сервис dyndns, которым я пользовался ранее успевал пару раз прислать мне оповещения о неактивности с целью отключить «неиспользуемый» аккаунт. Перейти на вручную прописываемую DNS зону также не получается, потому что иногда адрес все же меняется. Причем обычно об этом узнаешь когда нужен доступ к домашнему компьютеру здесь и сейчас.

Для реализации описываемого метода понадобится сервер в интернете с DNS сервером bind на нем. А так же доменная зона, субдомен которой мы будем выделять для нашего компьютера. Описывается вариант с подключением Linux-компьютера к Linux-серверу. Для использования других операционных систем понадобится почитать мануалы и модифицировать некоторые шаги.

Итак:
1. Имеем установленный сервер bind9 с доменом server.org
2. Создаем зону client.server.org.zone:

$ORIGIN .
$TTL 10 ; 10 seconds
client.server.net IN SOA ns1.server.net. hostmaster.server.net. (
18 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10 ; minimum (10 seconds)
$TTL 3600 ; 1 hour
NS ns1.server.net.
NS ns2.server.net.
MX 10 client.server.net.

Здесь сервера ns1.server.net и ns2.server.net - DNS сервера для нашей зоны, client.server.net - адрес нашего домашнего компьютера

3. генерим ключи на клиенте:
client# cd /etc/namedb/keys
client# dnssec-keygen -b 512 -a HMAC-MD5 -v 2 -n HOST client.server.net.

4. Создаем фаил с ключем на сервере:
server# cd /var/named/chroot/etc
server# vim keys.conf:

Key client.server.net. {
algorithm "HMAC-MD5";
secret "omr5O5so/tZB5XeGuBBf42rrRJRQZB8I9f+uIIxxei8qm7AVgNBprxtcU+FQMzBvU/Y+nyM2xbs/C8kF3eJQUA==";
};

В данном случае использован симметричный ключ, что небезопасно: если кто-то имеет доступ к фаилу с ключами на вашем сервере, он может воспользоваться вашим ключем для изменения данных вашей зоны. В таком случае можно использовать несимметричный ключ.

Выставляем права доступа к фаилу с ключами:
server# chmod 640 keys.conf
server# chown root:named keys.conf

5. добавляем нашу зону в named.conf:
include "/etc/keys.conf"
zone "client.server.net" {
type master;
file "zones/client.server.net";
allow-update{
key client.server.net;
};
};

Здесь прописан параметр, который позволяет обновлять данные зоны. Вообще, почитав мануалы, можно найти опции этого параметра, позволяющие обновлять только одну запись в зоне для данного ключа. Т.е можно иметь зону с прописанными в ней поддоменами client1, client2, etc. которые будут авторизоваться с ключами key1, key2, etc.

6. Перезапускаем DNS сервер:
server# /etc/init.d/named reload

7. Создаем на клиенте скрипт, который будет обновлять данные зоны:
#!/bin/bash
IFACE="wlan0"
TTL=3600
SERVER=ns1.example.com
HOSTNAME=foo.example.com
ZONE=example.com
KEYFILE=/root/ddns-keys/Kfoo.example.com.+157+12345.private

New_ip_address=`ifconfig $IFACE | grep "inet addr:" | awk "{print $2}" | awk -F ":" "{print $2}"`
new_ip_address=${new_ip_address/ /}

Nsupdate -v -k $KEYFILE << EOF
server $SERVER
zone $ZONE
update delete $HOSTNAME A
update add $HOSTNAME $TTL A $new_ip_address
send
EOF

В начале скрипта описаны соответствующие параметры: интерфейс, имена сервера и зоны, местоположение фаила с ключем.

8. Осталось только настроить автозапуск/автоматическую смену адреса при смене DNS.
Мы это сделаем при помощи скрипта для NetworkManager:
создадим фаил /etc/NetworkManager/dispatcher.d/20-dyndns.sh:
#!/bin/sh

Iface=$1
state=$2

If [ "x$state" == "xup" ] ; then
/etc/namedb/ddns-update
elif [ "x$state" == "xdown" ]; then
true
fi

Сделаем его исполняемым и принадлежащим пользователю root.

Запускаем-проверяем-пользуемся.

Upd: Если не работает - проверяем (устанавливаем) на сервере права named на записть в папку в которой лежит фаил client.server.org.zone
named будет создавать там фаил client.server.org.zone.jnl

Использованы следующие материалы.

Иногда необходимо иметь доступ к своей машине, или машине клиента, которые имеют динамический IP адрес. Для этих целей существует масса сервисов, но бесплатных становится все меньше и меньше. Вот для этого и предназначена данная статья. Если у вас есть под рукой сервер (VDS, VPS или дедик), из которого можно сделать ДНС сервер, то с помощью данной статьи вы сможете сделать для себя такой сервис и пользоваться им как вам удобно и сколько вам хочется. В ходе создания сервиса было перерыто множество страниц в интернете, зачастую противоречащих друг другу. Поэтому, ссылки на исходники указаны не будут. Это статья как бы компиляция всех сведений, нарытых в сети.

Начало работы

Для начала работы по созданию сервиса предполагается, что у вас настроен на сервере BIND , установлены пакет dnsutils и программа Curl . Если обнаружилось вдруг, что у вас этого нет, почитайте, что написано в этой статье . Для простоты сразу договоримся, что оперировать будем доменом dyndns.my и поддоменом с динамическим IP dhost . Полный адрес получится dhost.dyndns.my . В домене должна быть запись A ns с IP вашего сервера. Или не ns, тут кому как нравится, но в этом примере дело обстоит именно так. Ну и для полной ясности, и сервер, и клиент - компы с Ubuntu. Версия уже принципиального значения не имеет.

Он сказал, поехали!

Настройка клиентской части

Раздел идет впереди настройки сервера потому, что ключи авторизации необходимо генерировать на клиенте.

Создадим отдельный каталог в /etc .

sudo mkdir / etc/ ddns/

Перейдем в него.

cd / etc/ ddns/

Генерируем пару ключей для обмена информацией между клиентом и сервером.

sudo dnssec-keygen -b 512 -a HMAC-MD5 -v 2 -n HOST dyndns.my

В результате этой операции в каталоге появляются два файлика - Kdyndns.my.+157+48025.key и Kdyndns.my.+157+48025.private . Из первого файла нам будет необходим только набор символов после «157 ». Именно после пробела начинается тело ключа. Создаем скрипт обновления доменных зон.

sudo nano ddns.sh

Вставляем туда текст.

#!/bin/bash TTL =3600 SERVER =ns.dyndns.my HOSTNAME =dhost.dyndns.my ZONE =dyndns.my KEYFILE =Kdyndns.my.+157 +48025 .private new_ip_address =` curl http:// dyndns.my/ ip.php` #Этот файлик создадим позднее на сервере! cd / etc/ ddns nsupdate -v -k $KEYFILE << EOF server $SERVER zone $ZONE update delete $HOSTNAME A update add $HOSTNAME $TTL A $new_ip_address send EOF

Сохраняем. Затем даем права на исполнение.

sudo chmod +x ddns.sh sudo ln -s / etc/ ddns/ ddns.sh / usr/ sbin/ ddns_update

Настройка серверной части

Настройка сервера имен заключается в прописывании домена и установке разрешения на обновления записей A доменных имен с динамическими IP. Переходим в каталог bind.

cd / etc/ bind/ sudo nano dnskeys.conf

Вставляем туда текст и тело ключа, о котором упоминалось в предыдущем разделе.

Key "dyndns.my" { algorithm hmac-md5; secret "тут тело ключа" ; } ;

Добавляем в файл /etc/bind/named.conf строчку с указанием файла, где определен ключ.

Include "/etc/bind/dnskeys.conf" ;

Следующим шагом необходимо в файл /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем.

Zone "dyndns.my" { type master; allow-update { key dyndns.my;} ; file "/etc/bind/pri.dyndns.my" ; } ;

Необходимо будет создать и файл /etc/bind/pri.dyndns.my с различными записями для домена. Он обычный, с минимально необходимым набором записей для функционирования домена, потому и нет необходимости рассматривать его в данной статье. Рестартуем сервер имен для завершения и применения настроек.

sudo service bind9 restart

Теперь в каталог, предназначенный для веб страниц, помещаем очень простой скрипт на php.

sudo nano / var/ www/ ip.php

Вставляем туда код.

Если вы обратитесь к этому файлу через веб, к примеру, http://dyndns.my/ip.php , то, кроме своего IP адреса ничего не увидите. Что нам и требовалось. Клиент, с помощью curl, его и получает и обновляет информацию на сервере.

Вот и все телодвижения по настройке серверной части.

Настройка заключительная

Доделываем клиента.

sudo nano / etc/ crontab

Добавляем строчку.

*/ 15 * * * * root / usr/ sbin/ ddns_update

Это означает, что раз в 15 минут скрипт будет запускаться. На этом настройка клиентской части закончена. Можно подождать 15 минут и убедиться, что наш хости работает пингом со стороннего сервера. А можно и выполнить команду.

sudo ddns_update

Для чего, собственно, мы и делали симлинк в /usr/sbin. Если вы не получили в ответ выхлоп со словом REFUSED , значит вы все сделали правильно и можете быть счастливы.

Выводы

На выходе мы получили вполне себе работающий сервис динамических имен. Есть, конечно, и существенный недостаток. Используемый ключ подходит для изменения любого поддомена из прописанных. Т.е., он один для всех. Это открывает простор для хулиганства, если кто-то упрет ключ. Поскольку, сервис делался для себя, то особых проблем это не вызовет. Ибо надо быть не совсем здоровым психически, чтоб хулиганить самому у себя. Возможно есть и решение, позволяющее каждый поддомен авторизовать по своему ключу, но целью данной статьи это не ставилось, потому гугля сильно и не терзалась.

Большая просьба, при перепечатке данной статьи, указывать источник, в частности, этот ресурс.

← Вернуться

×
Вступай в сообщество «allcorp24.ru»!
ВКонтакте:
Я уже подписан на сообщество «allcorp24.ru»