Не так давно всеми любимый сервис dyndns.org "предложил" начать оплачивать услуги хостинга доменов.
This email is an reminder that Dyn's free hostname program will be ending on Wednesday, May 7thМол, "мы делаем наш сервис качественнее", переходите на VIP всего за N баксов, уж не помню сколько было, но пусть даже $1 - русские люди принципиально не платят за то, что раньше было халявой!
Подстава получилась довольно великая: на текущее DNS-имя (mex.homeip.net) у меня, разумеется, уже многое завязано и настроено, о нем знают друзья, коллеги. А теперь о нем придется забыть.
Ну и не очень то и надо, я всегда хотел организовать свой домен 2 уровня, который я полностью контролирую. Вот и повод нашелся.
Для начала я выбрал и купил домен на webnames.ru, в dns серверах у него выбрал "Задать самостоятельно" и прописал
ns1.he.netHE.net выбрал из комментов на хабре по какой-то теме DNS хостинга.
ns2.he.net
Само собой, там нужно сначала зарегиться, завести запись о своем домене на вкладке Zone Management, затем Edit, добавление корневой записи с опцией dynamic DNS и генерация ключа для обновления извне.
Даже если с этим DNS-хостингом что-то случится, профит в том, что можно выбрать другой, не меняя доменного имени. А если на планете вдруг кончатся Free DNS хостеры, ну придется купить постоянный IP у провайдера и настроить зону у регистратора, либо хостить ее самому у себя же.
На этом минимальная настройка у днс-хостера закончена.
Настройка обновления DynDNS на роутере
Полученный ключ будем использовать для авторизации вместо пароля, а имя домена - вместо имени пользователя. Так типа не раскрываются основные авторизационные данные аккаунта, более секьюрно будет.Итак
Server Address - dyn.dns.he.net
Host Name - mydomain.net
Username or Key - mydomain.net
Password or Key - наш ключ
Verify Password or Key - наш ключ еще раз
Все, Save
Но вообще-то обычный среднестатистический роутер у меня уже давно уволен за нестабильность и местами тупость, и только ради вайфая стоит. Функцию шлюза взял на себя домашний сервер под Debian. На нем в кроне на каждые 5 минут крутится особый скрипт, мониторящий и обновляющий значение нашего непостоянного IP для домена.
Мониторинг состояния интернета. Обновление DynDNS IP
Скрипт у меня работает давно и занимется не только обновлением IP, но и активным вмешательством в дело обеспечения стабильности инета. Так что в качестве бонуса дарю функционал мониторинга наличя интернета и переподключения при неполадках со связью.#!/bin/sh
# для разработчиков
# http://dyn.com/support/developers/api/perform-update/
reconnect () {
sudo poff dsl-provider
sleep 3
sudo pon dsl-provider
}
SELF_DIR=`dirname $0`
PING_HOST="8.8.8.8"
DDNS_SERVICE="ns1.he.net"
DDNS_HOSTNAME="mydomain.net"
DDNS_KEY="тут тот самый ключ"
DNS_TIMEOUT=`nslookup -timeout=5 -query=hinfo www.ru | grep "timed out"`
if [ "$DNS_TIMEOUT" != "" ] ; then
echo Nslookup timeout
reconnect;
exit 1
fi;
# пингуем кого нибудь, если ответа нет - реконнектим инет и выходим
PACKETS_RECEIVED=`ping $PING_HOST -c5 | grep -i loss | cut -d " " -f 4`
if [ "$PACKETS_RECEIVED" -lt "3" ] ; then
echo Packets received: $PACKETS_RECEIVED. reconnecting
reconnect;
exit 1
fi;
# теперь сравниваем адреса, реальный и из DynDNS
CURRENT_DNS_IP=`nslookup $DDNS_HOSTNAME $DDNS_SERVICE | tail -n2|head -n1 | sed 's/[Adres: ]//g'`
CURRENT_REAL_IP=`wget -q -O - http://wtfismyip.com/text`
CURRENT_IF_IP=`/sbin/ifconfig ppp0 | head -n2 | tail -n 1 | cut -f 12 -d " " | cut -d ":" -f 2`
if [ "$CURRENT_REAL_IP" = "" ] ; then
echo Empty real IP
exit 1;
fi;
# реальный IP равен IP из dyndns
if [ "$CURRENT_REAL_IP" = "$CURRENT_DNS_IP" ] ; then
# echo IP equals Current: $CURRENT_DNS_IP, real: $CURRENT_REAL_IP, if: $CURRENT_IF_IP
exit 0;
fi;
echo -n `date`:
# если IF IP не равен REAL IP - реконнект
if [ "$CURRENT_REAL_IP" != "$CURRENT_IF_IP" ] ; then
echo REAL IP $CURRENT_REAL_IP != IF IP $CURRENT_IF_IP
reconnect;
sleep 10
sh $0 # вызов самого себя
exit 3;
fi;
# не совпали, обновим dyndns и положим real ip в файлик
echo Address mismatch. Current: $CURRENT_DNS_IP, real: $CURRENT_REAL_IP
DYN_URL="http://$DDNS_HOSTNAME:$DDNS_KEY@dyn.dns.he.net/nic/update?hostname=$DDNS_HOSTNAME&myip=$CURRENT_REAL_IP"
echo -n $CURRENT_REAL_IP > $SELF_DIR/current_ip.txt
RESULT=`wget -qS "$DYN_URL" -O - 2>&1 | tail -n1`
CODE=`echo "$RESULT" | cut -d " " -f 1`
# смотрим код, если good, значит обновлен
if [ "$CODE" = "good" ] ; then
echo Updated with result $RESULT
exit 0
fi;
echo Code is $CODE
exit 2;
Комментариев нет:
Отправить комментарий