|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> WWW
—> DNS API
Динамический ip адрес и домен второго уровня. (Бесплатно, с обратной зоной)
Автор: allseen.
Введение
В данной статье предлагается способ организации полноценного домена второго уровня domen.tk в связке с Яндекс Почтой и DNS API для своего домашнего веб-сервера с Apache 2.2 на FreeBSD, имеющего динамический внешний ip адрес.
Немного теории
Пользователь Unix рано или поздно задается вопросом создания своего интернет-сервера:
для экспериментов с системой;
для тестирования/размещения веб-сайтов;
для организации доступа к своим сервисам от FTP до VoIP.
и многое другое.
Домашний сервер – это бюджетное решение, требующее от пользователя только затрат на компьютер и доступ в интернет. Доступ в интернет провайдерами может быть предоставлен по следующим технологиям:
NAT
Маршрутизация
Через прокси сервер
Подключение через прокси сервер сегодня не используется ни одним провайдером.
При маршрутизации устройству предоставляется адрес:
постоянный (динамический)
временный (статический)
Сам адрес в свою очередь может быть:
внешним (публичным, реальным, белым)
внутренним (приватным, не реальным, серым)
При подключение к сети через NAT пользователь получает внутренний адрес. В редких случаях при NAT может быть получен внешний адрес как соответствие внутреннему. Большинство крупных интернет провайдеров предлагают относительно качественный доступ к сети по выделенной линии с использованием именного маршрутизации и внешнего временного адреса. Для проверки пользователя и защиты информации часто пользователю требуется настройка соединения по виртуальному каналу (VPN, PPPOE), этот способ относится тоже к маршрутизации. Пользователи не обладающие внешними IP адресами, организовать доступ к своим серверам извне не смогут. Так же могут возникнуть проблемы, если провайдер блокирует порты.
Самым легким вариантом для организации доступа является наличие у пользователя статического внешнего IP адреса, но не все провайдеры предоставляют такую услугу для физлиц, а те кто предоставляет постоянный адрес делает это на платной основе – 130 рублей в месяц для Москвы. Деньги не большие, но это практически цена самого доступа в интернет. По причинам легкости и платности вариант со статикой рассмотрен не будет.
К серверу извне можно обратиться зная его внешний временный адрес, но, во первых его не удобно запоминать, во вторых адрес может смениться в любой момент и в третьих на одном адресе можно запустить тысячи веб-сайтов и простое обращение к адресу не откроет нужный сайт. Для удобства использования и расширения функционала есть доменное имя, т.е. буквенное обозначение присвоенное цифровому значению ip адреса.
Доменное имя может быть:
первого уровня .ru .com .tk (как правило, обозначает сокращение страны)
второго уровня domen.ru, domen.com, domen.tk
третьего уровня sub.domen.ru, sub.domen.com, sub.domen.tk
и т.д.
Внешний временный адрес можно легко привязать к домену третьего уровня sub.dyndns.org с помощью одной из множества служб DDNS:
DynDNS.org
Noip.com
Zoneedit
и других
Наиболее предпочтителен домен второго уровня вида domen.ru, т.к. легче запомнить и набрать в адресной строке, в рамках такого домена можно создать множество субдоменов третьего уровня вида sub.domen.ru, более того домен второго уровня более престижен.
У большинства служб DDNS есть возможность привязки адреса к домену второго уровня, но на платной основе. Отчасти решает проблему «многоуровневая» связка - динамический адрес регистрируется на dyndns и далее на zoneedit. В итоге получаем обычную переадресацию, т.е. при наборе адреса типа domen.tk происходит перенаправление на domen.dyndns.org.
Многоуровневая связка имеет ряд недостатков:
отсутствие обратной зоны
увеличенное время отклика от DNS сервера
зарубежный трафик
чем больше звеньев тем меньше надежность
обязательства, например DynDNS требует обязательного посещение пользователем личного кабинета в течение 30 дней
ограниченное количество записей (в DynDNS можно добавить всего один хост)
в некоторых случаях отсутствует единоличное право на свой домен, например на FreeDNS.Afraid.org любой может создать субдомен третьего уровня к вашему второго уровня.
по отзывам, имеющиеся бесплатные службы DDNS часто сбоят.
Возможно существуют службы (в том числе из перечисленных выше), которые лишены всех этих недостатков, но мне все их проверить не довелось, т.к. я сразу нашел и стал использовать, вот уже полтора года, ДНС от Яндекс Почты.
Используя Яндекс мы избавляемся от всех недостатков и получаем доступ к полноценному ДНС серверу, с возможностью бесплатного хранения почты.
Есть у Яндекса один минус, это более сложная настройка – необходимы манипуляции связанные с Яндекс API. Предложенные в данной статье разъяснения и скрипты превращают минус в плюс, открывая огромное количество скрытых возможностей.
От теории к практике
Алгоритм действий следующий:
1. Создание виртуального хоста на Apache
2. Регистрация доменного имени и редактирование зоны
3. Регистрация в Яндексе и подтверждение права на домен
4. Делегирование ДНС серверов
5. Получение токена
6. Узнаем свой адрес
7. Пишем скрипт
Подробнее о каждом пункте.
1. Создание виртуального хоста на Apache
Основная цель создания веб-сервера - возможность запуска большого количества сайтов. Для каждого нового сайта нужно добавить запись в файле /usr/local/etc/apache22/extra/httpd-vhosts.conf:
<VirtualHost *:80>
ServerAdmin user@mail.ru
DocumentRoot "/home/domen.tk/www/"
ServerName domen.tk
ServerAlias www.domen.tk
ErrorLog "/var/log/domen.tk-error_log"
CustomLog "/var/log/domen.tk-access_log" common
</VirtualHost>
| Инструкция VirtualHost *:80 позволяет принимать запросы на любой адрес присвоенный провайдером.
2. Регистрация домена
Регистратор – организация, предоставляющая доменные имена пользователям.
Самый известный российский регистратор NIC.ru, но все имена предоставляются им за плату. Есть один регистратор предоставляющей большинство доменных имен второго уровня в зоне .tk бесплатно – это Dot.tk.
tk – домен первого уровня островов Токелау (между Новой Зеландией и Гавайями)
Зарегистрироваться очень просто, либо создаем новую учетную запись, либо пользуемся уже имеющимися аккаунтами от GMAL, YAHOO или FaceBook.
После регистрации выбираем любое понравившееся имя
Красивые имена типа linux.tk и solaris.tk стоят 1000 USD за 2 года. А все остальные, не имеющие схожести с английскими словами – бесплатно, например lissyara.tk на момент написания статьи был свободен. Lissyara.tk можно зарегистрировать как бесплатно, так и платно за 6,95 евро. У бесплатного варианта есть обязательство: 25 посещений за 90 дней – вещь совершенно реальная для некоммерческих сайтов, у платного есть возможность продажи и переноса другому регистратору. Количество бесплатных доменов для одного пользователя не ограничено.
После добавления домена в панели управления выбираем ДНС от DotTK (Dot TK DNS Service)
Создаем запись типа А domen.tk со своим ip-адресом, на данный момент:
Свой ip адрес можно посмотреть в интернете, например тут http://pilo.tk/ip .
После сохранения настроек ДНС – необходимо убедиться что соответствие работает
$ host domen.tk
domen.tk has address 8.8.8.8
| Процедура обновления зоны может занять продолжительное время – до нескольких дней. В моем случае на нескольких доменах это заняло пять минут. В любом случае, не закончив этот шаг не следует приступать к следующему.
Если все в порядке необходимо убедиться, что наш веб-сервер отвечает. Для этого на веб-сервер загружаем любой контент (достаточно одного файла index.html) и заходим через адресную строку по адресу http://domen.tk если наш контент отображается, значит настройка ДНС от DotTk успешна и наш провайдер не блокирует 80 порт – это важно, т.к. без этого будет сложно доказать свои права на домен.
3. Регистрация на Яндексе
Процедуру регистрации на Яндексе не рассматриваем. Можно воспользоваться существующей записью от Яндекс почты.
Авторизуемся на Яндексе и переходим по адресу https://pdd.yandex.ru. Выбираем пункт «подключить домен», тип почты (корпоративная, личная) неважен – вводим наш домен @domen.tk и нажимаем подключить.
Далее нам необходимо подтвердить владение доменом. Это можно сделать тремя способами:
с помощью файла .html
с помощью CNAME записи
с помощью информации о почте владельца из базы WHOIS
Самый простой и надежный способ это первый. Второй способ может быть недоступен у одного из регистраторов. А третий способ может не сработать по причине непостоянства формата базы Whois. К тому же два последних способа требуют времени на обновление данных до нескольких дней.
Создаем на нашем веб-сервере в корне предложенный Яндексом файл .html и записываем в него информацию. После сохранения файла Яндекс автоматически по определенному таймайту (у меня моментально у кого-то несколько часов) проверит веб-сайт с нашим доменом на наличие файла – тем самым подтвердится право на обладание доменом. Не обращаем внимание на то, что Яндекс ругается на mx – запись:
4. Делегирование ДНС серверов
Переходим на сайт регистратора dot.tk для делегирования.
Входим в личный кабинет и в настройках домена (Domain panel) выбираем наш ДНС (Custom DNS). Вводим следующие записи, можно без ip-адресов:
dns1.yandex.net
dns2.yandex.net
| Сохраняем и ждем, процесс делегирования может занять несколько дней, опять же в моем случае это заняло пять минут. О том, что делегирование успешное мы узнаем в кабинете Яндекса в разделе мои домены:
5. Получение токена
Если наш ip-адрес сменится можно поменять записи ДНС через личный кабинет, что не удобно делать каждый раз. Можно автоматизировать процесс с помощью API DNS -специальных команд передающихся поверх протокола http, т.е. с помощью большого количества приложений, включая адресную строку браузера, можно поменять любое значение без редактора ДНС в личном кабинете Яндекса. Список этих команд можно посмотреть тут.
Для того, чтобы записи ДНС были защищены применяется специальный пароль называемый токеном (token). Прежде чем приступить к выполнению команд необходимо сгенерировать этот самый токен. Авторизуемся на Яндексе и в адресной строке вводим адрес (команду):
https://pddimp.yandex.ru/get_token.xml?domain_name=domen.tk
| где domen.tk – ваш домен
После ввода капчи и нажатия кнопки Get token (получить токен) имеем:
где token= ”34r04udcluf0948tf ” – и есть наш токен.
Если данная информация не отображается, необходимо посмотреть исходный код страницы.
Сохраняем наш токен. Токен нужно получить один раз для одного домена, при желании токен можно всегда поменять процедурой описанной выше.
Опробуем наш токен – введем в адресную строку браузера:
https://pddimp.yandex.ru/nsapi/get_domain_records.xml?
token=34r04udcluf0948tf &domain=domen.tk
| из данного кода убираем пробелы и символы новой строки
Получаем:
<page>
<domains>
<domain>
<name>domen.tk</name>
<response>
<record domain="domen.tk" priority="" ttl="21600"
subdomain="@" type="A" id="11749043">8.8.8.8</record>
<record domain="www.domen.tk" priority="" ttl="21600"
subdomain="www" type="A" id="11749044">8.8.8.8</record>
<record domain="mail.domen.tk" priority="" ttl="21600"
subdomain="mail" type="CNAME"
id="11748837">domain.mail.yandex.net.</record>
. . . . . . . . . . . . . .
</response>
<nsdelegated/>
</domain>
<error>ok</error>
</domains>
</page>
| В полученной информации ищем записи типа А для domen.tk и www.domen.tk нам нужны их id – это 11749043 и 11749044. У каждого домена и у каждого пользователя id будут другими.
У нас есть токен и у нас есть 2 id – этого достаточно чтобы c помощью команды DNS API edit_a_record заменять ip для нашего домена.
Можно попробовать поменять наш ip 8.8.8.8 на 9.9.9.9.
Вставим в адресную строку браузера:
https://pddimp.yandex.ru/nsapi/edit_a_record.xml?
token=34r04udcluf0948tf&domain=domen.tk
&record_id=11749043&content=9.9.9.9
| из данного кода убираем пробелы и символы новой строки
где,
token – наш секретный токен
domain – наш домен
record_id – id
content – наша переменная – ip адрес
На выходе получаем страницу:
<page>
<domains>
<domain>
<name>domen.tk</name>
</domain>
<error>ok</error>
</domains>
</page>
| если <error>ok</error> - значит команда выполнена успешно. Проверяем результат в кабинете Яндекса и убедившись в том, что запись изменена, возвращаем старый адрес.
Для полноценной работы необходимо менять две записи и для www.domen.tk тоже, но добавив еще константу subdomain=www:
https://pddimp.yandex.ru/nsapi/edit_a_record.xml?
token=34r04udcluf0948tf&domain=domen.tk&subdomain=www
&record_id=11749044&content=9.9.9.9
| из данного кода убираем пробелы и символы новой строки
Данный процесс можно автоматизировать написав скрипт и поместив его в cron либо создав демона.
Но, для начала нужно узнать свой ip-адрес.
6. Узнаем свой адрес
Наш сервер может быть подключен к интернету напрямую, либо через роутер в зависимости от этого и выбираем способ получения информации о своем ip-адресе:
с помощью ifconfig
с помощью SNMP
и с помощью сайтов-информаторов
Самый легкий способ это периодический заход на сайты “информаторы ” типа:
http://pilo.tk/ip
http://dns-ip.ru/home/simple
http://www.showmyip.com/simple
Почему эти сайты, а не популярные 2ip.ru или internet.yandex.ru? Открыв предложенные мной сайты вы поймете, что на них содержится только ваш ip, т.е. при написании скрипта вам не нужно очищать ненужную информацию и как следствие, каждый раз у нас будет уходить меньше трафика при обновлении информации. Данный способ подойдет для всех и кто подключен через роутер и напрямую. Но, есть и свои минусы, данный способ перестает работать если наш сайт «информатор» не работает, либо нет доступа к определенным сегментам сети интернет, либо некорректно работает ДНС сервер провайдера.
Команда в консоли покажет ваш адрес:
$ curl -s http://pilo.tk/ip/
8.8.8.8
| Способ с ifconfig самый правильный, достоверный и надежный, но он не работает если мы за роутером (NAT).
$ ifconfig eth0 | grep netmask |awk '{print $2}'
8.8.8.8
| Сетевой интерфейс eth0 – меняем на свой.
И компромиссный, но самый сложный в плане настройки вариант логирование по SNMP с нашего роутера. С одной стороны данный метод обладает большей надежностью по сравнению с сайтами-информаторами, а с другой ему не страшен NAT. Есть и недостатки не все роутеры поддерживают SNMP и почти у всех отличается формат вывода, к тому же данный способ потребует от пользователя дополнительной настройки роутера и серверной системы.
Большинство роутеров в своих настройка позволяют вести журнал событий (логирование) во внутреннею память самого устройства и на внешний источник (сервер) по протоколу SNMP. Логирование по SNMP нужно включить в настройках роутера, указав внутренний адрес сервера и уровень логирования (рекомендую ставить максимальный уровень). На сервере FreeBSD в /etc/rc.conf добавить:
syslogd_enable="YES"
syslogd_flags="-f /etc/syslog.conf"
| В /etc/syslog.conf добавить внутренний адрес роутера, а под ним указать файл куда сохранять логи:
+192.168.0.1
*.* /var/log/router.log
| И перезапустить систему логирования. Подробнее можно почитать тут.
Из-за разных форматов логирования нет единого стандарта команды для обработки информации из логов. Пример команды для получения своего адреса у роутеров DLINK:
$tail -40 /var/log/router.log | grep IP= | awk '{print $11}' \
| sed -e 's/IP=//'| sed -e 's/,//' | tail -1
8.8.8.8
| 7. Пишем скрипт
Для успешной работы скрипта необходимо наличие программы curl:
# cd /usr/ports/ftp/curl
# make install
| Далее сам скрипт:
#!/bin/sh
##############
# ПЕРЕМЕННЫЕ #
# ############
# переменные окружения
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH
# имя сетевого интерфейса
#NET=re0
# проверка ай-пи в секундах
TIME=100
# файл для логов
LOG=/var/log/ip.log
# имя нашего домена
DOMEN="domen.tk"
# токен
DOMEN_TOK=34r04udcluf0948tf
# ай-ди для домена domen.tk
DOMEN_ID=5080341
# ай-ди для субдомена www.domen.tk
WWW_ID=5105256
while :
do
# поиск ай-пи с помощью сайта-информатора
MYIP=`curl -s http://pilo.tk/ip/ 2>>$LOG`
# поиск ай-пи с помощью логов от маршрутизатора
#MYIP=`tail -40 /var/log/router.log | grep IP= | awk '{print $11}' \
#| sed -e 's/IP=//' | sed -e 's/,//' | tail -1 2>>$LOG`
# поиск ай-пи с помощью ifconfig
#ifconfig $NET | grep netmask |awk '{print $2} 2>>$LOG'
# ай-пи в днс яндекса
NSIP=`host domen.tk dns1.yandex.ru | grep has | awk '{print $4}' 2>>$LOG`
#############
# ПРОГРАММА #
# ###########
if [ $MYIP != $NSIP ]
then
# команда замены ай-пи в ДНС яндекса для domen.tk
curl -s "https://pddimp.yandex.ru/nsapi/edit_a_record.xml?token=$DOMEN_TOK\
&domain=$DOMEN&record_id=$DOMEN_ID&content=$MYIP" \
| grep "<error>"|replace ' ' "`date "+%Y%m%d %H:%M"` $MYIP" \
| sed -e :a -e 's/<[^>]*>/ /g;/</N;//ba' >>$LOG
# команда замены ай-пи в ДНС яндекса для субдомена www.domen.tk
curl -s "https://pddimp.yandex.ru/nsapi/edit_a_record.xml?token=$DOMEN_TOK\
&domain=$DOMEN&subdomain=www&record_id=$WWW_ID&content=$MYIP" \
| grep "<error>"|replace ' ' "`date "+%Y%m%d %H:%M"` $MYIP" \
| sed -e :a -e 's/<[^>]*>/ /g;/</N;//ba' >>$LOG
#else
#echo ok
fi
sleep $TIME
done
|
Скачать скрипт
|
файл
|
скачан
|
размер
|
размещён
|
примечание
|
|
260
|
1.6kb
|
2013-07-27
|
скрипт DNS API
|
|
Не забываем сделать скрипт исполняемым:
# chmod 710 /usr/local/etc/rc.d/ip.sh
| Скрипт делится на две части: переменные и программа. Переменные задаются пользователем. Окружение предназначено для FreeBSD, пользователи Linux легко могут адаптировать скрипт под свою систему.
В скрипте по умолчанию активирован (раскомментирован) способ определения ip-адреса с помощью сайта-информатора, другие способы активируются также раскомментированием нужного, и закомментированием ненужного параметра.
Скрипт помещенный в автозагрузку запускается при старте системы проверяя адрес на соответствие, в случае смены динамического адреса, приводит в порядок записи на ДНС сервере Яндекса, также помещает информацию в журнал /var/log/ip.log: дату и время изменения, новый ip-адрес, домен и статус выполнения, в случае успеха это «ок», в случае ошибки ее код, типа «bad token» (неверный токен) и т.д.
Скрипт обновляется через промежуток времени заданный переменной TIME. После while : двоеточие обязательно, т.к. это бесконечный цикл.
Данный скрипт легко модифицировать для обновления нескольких доменов. После получения новых токенов и id записей нужно создать новые переменные типа DOMEN1, DOMEN2….DOMEN1_TOK, DOMEN2_TOK … и соответствующие команды API . Необходимо соблюдать правила для переменных в шелле: запрещено начинать переменную с цифры (1DOMEN) и внутри переменной запрещены точки (DOMEN.TK). Есть еще правила, о которых лучше почитать в специализированной литературе.
Заключение
Данная статья является редакцией другой публикации, размещенной мной полтора года назад на форуме http://forum.lissyara.su/viewtopic.php?t=35711.
Желательно комментарии, вопросы и замечания оставлять по этой ссылке. Возможно, там найдутся ответы на большинство вопросов.
При написании данной редакции постарался учесть вопросы с форума. Было замечание, что при данном способе обновления динамического ip адрес, по неведомым причинам, перестал меняться – подтверждаю за полтора года у меня все тот же адрес – такой вот способ бесплатно получить статику.
В данной статье использовал как пример domen.tk, никакого отношения к нему не имею, по каким-то причинам доступ к нему ограничен Ростелекомом.
Ip адрес 8.8.8.8 тоже ко мне никакого отношения не имеет – это многими известный ДНС сервер от Гугла – часто им пользуюсь для проверки доменных имен, т.к. легко запомнить.
Пару слов про сам Яндекс - не являюсь сотрудником или поклонником данной компании, но факты вещь упрямая: за все это время служба ДНС работала без сбоев. Поменялся немного интерфейс в личном кабинете, поменялось пару ссылок внутри кабинета, но инструкции API остались прежними, в отличие от службы WHOIS, которая регулярно меняет формат своих данных. Есть еще бесплатная функция от Яндекса, которая будет полезна владельцу веб-сервера - это Яндекс.Метрика, позволяющая не только смотреть детальную статистику своего сайта (вплоть до движения мышки посетителя – вебвизор), но и бесплатно отправлять СМС на мобильный телефон в случае сбоев на веб-сервере – проверено работает оперативно.
Для кого была написана данная статья? Данная статья возможно содержит излишние подробности, кому-то может показаться скучной и давно пройденным материалом. Но, на просторах интернета не встречал аналогов. Была в одной статье попытка связать noip.com и ДНС Яндекса как многоуровневую систему, без использования API, и как результат баги и неполный функционал. Встречал много статей про привязку к Яндексу статики и ни слова про динамику. В силу уникальности материал будет полезен не только студентам и школьникам, но и всем кто хочет организовать домашний хостинг. Статья не является переводом зарубежного материала, не является пересказом, а является полностью моим трудом – поэтому желательно при копировании и размещении на своих ресурсах делать ссылочку на оригинал.
Что хотел получить от публикации? Web API является активно развивающимся направлением почти у всех социальных сетей и порталов таких как Яндекс, Google, Facebook, Mail.ru и многих других. Если кто-то заметил, что с помощью Web API той или иной системы можно получить доступ к бесплатным либо интересным сервисам, то жду ваши мысли и идеи.
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=35711.
размещено: 2013-07-27,
последнее обновление: 2013-11-10,
автор: allseen
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
|
Комментарии пользователей [9 шт.]