Ddns свой сервер linux

Динамический днс своими руками

Содержание

Введение

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

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

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

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

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

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

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

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

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

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

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

Создаем символическую ссылку в каталог /usr/sbin, чтобы не добавлять в пути скрипт обновления зон. Это не обязательно, будет просто не лишним для того, чтобы из консоли набирать команду без путей.

Раз добавили, то в /etc/crontab будем использовать его.

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

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

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

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

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

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

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

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

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

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

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

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

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

Выводы

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

Читайте также:  Windows 10 как изменить громкость звука

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

Источник

What is DDNS

DDNS — Dynamic DNS

DDNS is a service that can be used to automatically update DNS records if client PCs get their IP settings from a DHCP Server. These updates are usually performed by the DHCP Server. DDNS is handy if you have a DNS Server in your local network that should be able to resolve the names of your local PCs. This information should not be forwarded to outside your network, unless you use public IP addresses.

In this example configuration I use private IP addresses and therefore configure the DNS Server to not forward this information to a public DNS Server. Although, in case your set up requires it to forward this information, I’ll describe also this case at the appropriate point.

You should already have a working DHCP and DNS server set up before following the below instructions. You can find information on how to do that at DHCP_Server and Bind9.

How to set up DDNS

Generate a key for verification

We have to create a key, that will be used to secure the exchange of information between DHCP and DNS server. Only our DHCP server should be allowed to perform DNS record updates, not just anyone.

Generate the key

This will create two files, Kdhcp_updater.*.key and Kdhcp_updater.*.private. Copy the key from the *.private file (the line with the key should look similar to this one:

Everything after «Key: « is the actual key.

Create the file ddns.key

Now create a new file (ddns.key) with the following content (don’t forget to replace with your key):

in my case it would look like this:

Copy the key into the correct locations

Copy this file to /etc/bind/ and /etc/dhcp and adjust the file permissions as follows:

or in two lines:

DNS Server Configuration

Configure zones to be updated

The DNS server must be configured to allow updates for each zone that the DHCP server will be updating. In our example the clients in the example.org domain will be assigned addresses on the 192.168.2.0/24 subnet. We will need a key declaration for our key, and two zone declarations — one for the forward lookup zone and one for the reverse lookup zone. To do so add the following to the file /etc/bind/named.conf.local:

The option notify no stops named (the DNS daemon) from forwarding information about the local network to external DNS servers. This is only useful if you use private addresses in your network. In case you use public addresses, you want your DNS to forward that information to public DNS servers. To configure this, just delete the line notify no;.

Create the zone files

Then you have to create two zone files, one for the forward lookup zone (db.example.org) and one for the reverse lookup zone (db.192.168.2). These are the zones you defined previously in the file /etc/bind/named.conf.local.

You can copy the sample file db.empty and then just add your changes.

The following listing shows the contents of db.empty, which is (after the previous step) the same as db.example.org and db.192.168.2.

So let’s first edit db.example.org. It should afterwards look like this:

and then db.192.168.2:

The trailing dot is important, because it makes the name a FQDN (Fully Qualified Domain Name). In this case the nameserver’s IP address is 192.168.2.1 and it’s name is ns. Adjust the files according to your network’s configuration.

Finally we need to create links from /var/cache/bind to the actual zone files in /etc/bind. This is because /etc/bind is not writeable for bind, but /var/cache/bind is.

Be careful about the permissions of the directory that contains these links. The user/group bind should be able to write to it. If the permissions are like in the following listing, it should be ok.

DHCP Server Configuration

Additionally you have to configure your DHCP server to update these zones. To do so, you need to edit the file /etc/dhcp/dhcpd.conf. This file consists of different sections. In the global section, which is everything that is not inside a Subnet-, or group block, you have to add the following:

option domain-name

This options specifies the domain name, which is also used for DDNS.

ddns-update-style

This option should always be interim. The only other option is adhoc, but that one is outdated .

Читайте также:  Аналог openserver для linux

client-updates

If you use the option allow client-updates, the clients are allowed to register their name at the DNS server by themselves. We don’t want this, so I added ignore client-updates (which is already the default option), just to show this explicitly.

update-static-leases

By default the DHCP-Server doesn’t update the DNS entries of static leases. If you want it to update them, you need to set this option to on. It can be that this causes some problems, that’s why the manpage of dhcpd.conf doesn’t recommend the use of it. If you experience problems, turn it off, but then you have to configure these hosts statically not only for DHCP, but also for DNS.

You have to add the following lines for the zones that shall be updated by your DHCP server.

The primary statement specifies the IP address of the name server whose zone information is to be updated. In this case DHCP and DNS server are running on the same machine, that’s why we put 127.0.0.1 there. If that’s not the case, you have to put the IP address of the machine that the DNS server is running on there. The zone descriptions have to end with a period.

The complete dhcpd.conf file after the previous steps and with a basic configuration for the subnet 192.168.2.0/24:

Restart the servers

Test it

Now that everything is set up it’s time to test it.

The easiest way to do so, is to connect a PC to your network and then check /var/log/syslog at the server. You can do so by issuing the following command:

If everything works fine, you should find something similar to the following lines in this command’s output:

If not, you might want to do your on research on the Internet and if you find a solution, you might want to add information about it to this document.

Another way to test it

Go to your client computers and enable them to take an IP from a DHCP server. With the following command check if your client computer name is updated in DNS. It will resolve your name with the newly allocated IP.

Good Luck with your newly created Dynamic DNS Server.

See also

See Bind9 and DHCP_Server for more information on DNS and DHCP.

Julien Valroff wrote a great article about a DDNS setup similar to services like DynDNS.org or Zonedit.com. You can find it here.

Here are some external resources which will allow you to study the DDNS methods in detail:

Источник

Домашний хостинг сайтов с динамическим IP

У меня (как и у многих web-разработчиков) имеется с десяток сайтов которые необходимо где-то размещать (хостить).

Сайты практически не приносят прибыли, поскольку это какие-то старые работы (по разным причинам не пошедшие в продакшн), домашняя страница, сайт заведенный красивой почты и тому подобное. Но в то же время эти сайты жалко бросать, а потому приходится каждый месяц на них тратить вполне реальные деньги чтобы покупать хостинг. Деньги, прямо скажем небольшие, но тем не менее их жалко, поскольку отдачи от сайтов никакой нет.

В то-же время в наличии имеется:

  • Домашний сервер на Ubuntu
  • Быстрый ethernet-интернет от МТС

Но не имеется ключевого — статического IP. Если бы он был, то все было-бы намного проще и данную статью я бы точно не писал. А выдавать статический IP мой МТС абсолютно не желает (если только я не подключусь как бизнес-клиент).

Разумеется есть всем известные Dynamic DNS сервисы вроде noip.com, но они успешно решают лишь задачу удаленного доступа к нашему серверу (по SSH или FTP), но для хостинга совершенно нам не подходят, поскольку в настройках домена на DNS-сервере нам нужно обязательно прописать A-запись с реальным IP-адресом (а не ссылку на наш виртуальный домен).

Что делать?

Я не буду останавливаться на том, как настроить linux сервер (и тем более как его выбрать), поскольку предполагаю, что он у вас уже есть. Также я не буду подробно расписывать настройки nginx и Apache, поскольку опять-таки предполагаю, что вы с этим справитесь самостоятельно.

Первое с чем у меня возникли проблемы — это как перенаправить посетителей с моих доменов (у меня есть 2 домена) на мой домашний сервер. То есть чтобы клиент который набрал domain.com попал ровно на мой домашний сервер с учетом того, что на нем каждый день меняется IP-адрес.

Для решения нам нужно настроить DNS-сервер, а именно следующие записи: SOA, NS, MX, A, CNAME. Важно чтобы мы имели возможность настройкой TTL (time to live), поскольку время жизни наших записей должно быть очень небольшим, буквально 60-120 секунд. В противном случае при смене IP-адреса сервера пользователи долго не смогут попасть на наш сервер (из-за кеширования).

Читайте также:  Запуск приложения через пароль windows

Итак, нам нужен DNS сервер, варианты решения:

  1. Используем сервисы которые предоставляют нам DNS-хостинг
  2. Используем собственный DNS-сервер в связке с DDNS-доменом

Рассмотрим оба варианта.

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

Для этого есть ряд бесплатных сервисов, из которых самым популярным является freedns.afraid.org. На таких сервисах можно добавить свой домен(ы) и получить возможность через API обновлять у них A-запись при помощи небольшого скрипта.

Выглядит вполне неплохо, но подвох в том, что эти сервисы оставляют за собой право довешивать к вашему домену поддомены третьего уровня. То есть вы зарегистрировали у них user.ru, а они спокойно довешают свои сайты вида hello.user.ru, shop.user.ru и так далее. Разумеется от этого можно отказаться, но… за деньги. Платить деньги за такие сервисы смысла я не вижу, поскольку за сравнимые деньги вы можете купить полноценный хостинг на каком-нибудь провайдере без всяких плясок вокруг DNS настроек.

Остальные сервисы рассматривать не будем, а сосредоточимся на втором варианте.

Используем собственный DNS-сервер в связке с DDNS-доменом

Для этого варианта у нас, во-первых, должен быть DDNS-домен (который обновляется при смене IP), например, domain.ddns.net, а во-вторых, придется установить и настроить BIND на нашем сервере.

Всего необходимо сделать ровно 5 шагов. Везде под словами «domain» или «domain.ru» подразумевается ваше имя домена (короткое или полное).

1. Настроить 2 или 3 DDNS-поддомена

Почему 2 или 3? Потому, что ряд регистрантов не разрешит вам использовать домен только с одним NS-сервером. Самое обидно, что не все про это скажут — ваш домен просто не будет работать, но вы не будете понимать почему.

Тут все просто — идем на noip.com, там регистрируем аккаунт и добавляем 3 бесплатных поддомена (больше 3 не даст).

2. Настраиваем собственный DNS-сервер

Создаем зоны (по одной зоне на каждый наш домен):

и собственно файл с настройками зоны:

Примечание: обращаю внимание, что TTL устанавливаем равным 60 секунд. В файле /etc/bind/named.conf.local добавляем подключение нашей зоны:

Все, рестартуем BIND:

И глянем /var/log/syslog чтобы там не было сообщений об ошибках

3. Настроить наш домен(ы)

Идем в панель управления регистратора и там в настройках нашего домена в качестве NS-серверов указываем созданные DDNS-поддомены:

После этого возможно придется подождать несколько часов (или даже сутки) пока настройки среплицируются между всеми серверами.

4. Настроить периодическое обновление IP-адресов

Мой роутер поддерживает обновление IP-адреса на одном домене, но мне нужно это делать сразу для 3-х доменов. Плюс нам надо обновлять IP-адрес в конфиге BIND’а, поэтому напишем скрипт который будет делать:

  1. Определять наш внешний IP-адрес
  2. Проверять изменился ли IP адрес, если не изменился, то ничего делать не надо
  3. Обновлять IP-адрес у всех DDNS-поддоменов через API сервиса noip.com
  4. Прописывать новый IP адрес в конфиг BIND’а
  5. Перезапускать BIND

Сам скрипт пусть будет на шелле:

Скрипт нужно запускать под рутом (чтобы ему хватило прав обновлять конфиги BIND’а и рестартовать его). Добавляем в crontab рута его запуск каждую минуту:

Пару слов про определение текущего IP-адреса. В скрипте выше это делается через резолвинг DDNS-поддомена domain.ddns.net. То есть сначала наш роутер его туда прописывает, а потом мы читаем. Это не очень хороший вариант, поскольку мы завязываемся на роутер и можем потерять несколько минут пока на DDNS-поддомене обновится IP-адрес на актуальный. Все это время наш сервер будет недоступен.

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

В данном варианте мы загружаем главную страницу роутера (через http), дальше регэкспом находим на ней текущий IP-адрес. Разумеется, этот вариант подходит далеко не всем, но на DD-WRT прошивках работает.

5. Настройка роутера

Про необходимость настроить обращение к DDNS-сервису я уже писал, но еще не забывайте про необходимость настроить форвардинг портов на вашем роутере:

  • HTTP — TCP, 80-ый порт
  • DNS — TCP+UDP, 53 порт

Вывод

Итак, что я получил в итоге:

  • Мои сайты живут на домашнем сервере, за который я никому не плачу;
  • Мои домены резолвятся через мой собственный DNS-сервер, время жизни записей 1 минута, то есть обновление происходит очень быстро;
  • В качестве NS-записей указаны не реальные IP-адреса (которые у меня часто меняются), а DDNS-поддомены;
  • Актуальность записей в DDNS-поддоменах и в конфиге моего DNS-сервера обеспечивается автоматически, без какого-либо вмешательства со моей стороны.

По моим замерам, когда МТС (мой провайдер) обновляет мне IP-адрес, то мои сайты начинают работать спустя где-то 2 минуты. Это вполне приемлемо для меня.

Источник

Оцените статью