У меня (как и у многих 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-адреса сервера пользователи долго не смогут попасть на наш сервер (из-за кеширования).

Итак, нам нужен 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-сервер

Устанавливаем BIND:

$ sudo apt-get install bind9

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

$ sudo nano /etc/bind/zones.my

с содержимым:

zone "domain.ru" {
	type master;
	file "/etc/bind/db.domain.ru";
};

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

$ nano /etc/bind/db.domain.ru

и пишем внутри:

;
; BIND data file for local loopback interface
;
$TTL	60
@	IN	SOA	domain.ru. admin.domain.ru. (
			1477015437	; Serial
			10800		; Refresh
			3600		; Retry
			604800		; Expire
			1800 )		; Negative Cache TTL

@	IN	NS	domain.ddns.net.
@	IN	NS	domain.ddnsking.com.
@	IN	NS	domain.myftp.biz.

@	IN	MX	10 mx.yandex.net.

@	IN	A	1.2.3.4

mail	IN	CNAME	domain.mail.yandex.net.
*	IN	CNAME	domain.ru.

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

include "/etc/bind/zones.my";

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

$ sudo service bind9 restart

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

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

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

nameserver1 = domain.ddns.net
nameserver2 = domain.ddnsking.com
nameserver3 = domain.myftp.biz

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

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

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

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

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

#!/bin/sh

# This script works via noip.com service + local Bind server

# Settings
ZONES_CONFIG=zones.my
IP_FILE=./current_ip.txt
DDNS_USER=user
DDNS_PASS=password
DDNS_HOST=domain.ddns.net
DDNS_HOSTS=domain.ddns.net,domain.ddnsking.com,domain.myftp.biz

# Start
DATE=$(date +"%Y-%m-%d %H:%M:%S")

# detect an external IP
IP=$(dig +short $DDNS_HOST)
if [ $? -ne 0 ] || [ -z $IP ] || [ $IP = "0.0.0.0" ] ; then
	echo "$DATE Can't detect a remote IP. Aborting."
	exit 1
fi

# verify IP changing
PREV_IP="(unknown)"
if [ -e $IP_FILE ] ; then
	PREV_IP=$(cat $IP_FILE)
fi

if [ $IP = $PREV_IP ] ; then
	echo "$DATE IP '$IP' has not changed"
else
	echo "$DATE IP has been changed from '$PREV_IP' to '$IP'"

	echo "$DATE IP will be updated on DDNS server"
	/usr/bin/curl -u $DDNS_USER:$DDNS_PASS "https://dynupdate.no-ip.com/nic/update?hostname=$DDNS_HOSTS&myip=$IP"
fi
echo $IP > $IP_FILE

# check BIND config
cd /etc/bind
if [ ! -e $ZONES_CONFIG ] ; then
        echo "$DATE File $ZONES_CONFIG not found!"
        exit 1
fi

# read the list of active zones
ZONE_FILES=$(grep file $ZONES_CONFIG | grep -v ^# | perl -ne '/file "(.+)"/ && print "$1\n"')
for ZONE_FILE in $ZONE_FILES; do
        echo "$DATE Process the zone config $ZONE_FILE"

	cat $ZONE_FILE | perl -ne "s/([\t ]+IN[\t ]+A[\t ]+)[\d\.]*/\${1}${IP}/; print \${_}" > $ZONE_FILE.tmp

	if [ $(diff -w $ZONE_FILE $ZONE_FILE.tmp | wc -l) -ne 0 ] ; then
		# update serial number
		STAMP=$(date +%s)
		cat $ZONE_FILE.tmp | perl -ne "s/\d+(?=.+Serial)/$STAMP/; print \${_}" > $ZONE_FILE

		# reload BIND
		service bind9 reload

		echo "$DATE Config $ZONE_FILE is updated"
	else
		# nothing to do
		rm $ZONE_FILE.tmp
		echo "$DATE Config $ZONE_FILE is NOT changed"
	fi
done

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

* * * * *	cd /home/root && ./update_bind_config.sh >> /var/log/update_bind_config.log

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

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

IP=$(perl -le 'use LWP::UserAgent; my $content=LWP::UserAgent->new->get("http://router")->decoded_content(); $content =~ q(<span id="wan_ipaddr">([\d\.]+)</span>); print $1')

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

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

Про необходимость настроить обращение к DDNS-сервису я уже писал, но еще не забывайте про необходимость настроить форвардинг портов на вашем роутере:
  • HTTP — TCP, 80-ый порт
  • DNS — TCP+UDP, 53 порт


Вывод


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

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

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

P.S. Если кому-то понравилась данная заметка, то я могу написать вторую часть, где расскажу как настроить работу с использованием DNS-хостинга Яндекса. Это позволит отказаться от собственного DNS-сервера, отказаться от DDNS-поддоменов, плюс чуть улучшит надежность работы (поскольку DNS-сервер никогда не будет менять свой IP). Именно такую схему я использую в настоящий момент.
Поделиться с друзьями
-->

Комментарии (91)


  1. fedorro
    24.10.2016 12:42
    +2

    > в настройках домена на DNS-сервере нам нужно обязательно прописать A-запись с реальным IP-адресом (а не ссылку на наш виртуальный домен).
    А я в настройках DNS как раз писал имя виртуального домена (толи в A, то ли CNAME, было давно, не помню), и всё работало. Т.е. выглядело примерно так: домен.ru — DNS регистратора — tra-la-la.dyndns.com — серый_ип. Не знаю должно было так работать, или нет, но проработало пару лет, потом белый адрес появился.


    1. raptor
      24.10.2016 12:50
      +2

      Абсолютно так сейчас и, к примеру, у меня работает. noip дает домен третьего уровня, роутер постоянно обновляет IP для него, а у DNS записи домена прописан CNAME для домена noip, и все прекрасно работает.


      1. spectreob
        24.10.2016 13:25
        -1

        Вы абсолютно правы, CNAME с доменом прописать можно. Я пару дней именно на такой схеме и поработал, но у нее есть глобальный недостаток — ваш domain.com не будет резолвится DNS-серверами в IP-адрес.

        То есть www.domain.com будет работать, тут проблем нет. А вот сам domain.com не будет, поскольку для него обязательно наличие A-записи с реальным IP-адресом. Редирект посредством DNS вы не настроите (на www версию), а web-редирект или rewrite rule опять-таки требуют чтобы посетители попадали на ваш domain.com, а они тут просто не попадают.

        Именно чтобы исправить этот недостаток, я и поднимал свой DNS-сервер (что не помогло), а потом в итоге добавил эту злосчастную A-запись.


        1. xxxTy3uKxxx
          24.10.2016 14:24

          Для домена .tk добавил CNAME на .ddns.net для domain.tk. И все работает. Сайт на малине, роутер через встроенный DDNS резолвит как надо.


          1. spectreob
            24.10.2016 14:31

            Уточните, пожалуйста, что вам выдает «nslookup domain.tk»? И что «host -a domain.tk»?

            Bind при попытке указать домен в A-запись (вместо IP) выдаст ошибку. То есть единственный вариант — это вообще не создавать A-запись.


            1. ivan386
              24.10.2016 15:52
              +1

              A-запись это это IPv4 в ней не должно быть имен. В вашем случае надо использовать только CNAME.

              DNS Записи


        1. Dromok
          24.10.2016 16:44

          Не понял смысла «А вот сам domain.com не будет, поскольку для него обязательно наличие A-записи». У меня несколько лет прекрасно работал домен через CNAME. Открывался как с www, так и без. Работало всё через динамические днс.


          1. miksir
            24.10.2016 19:09
            +1

            Если кратко, то

            If a CNAME RR is present at a node, no other data should be
            present; this ensures that the data for a canonical name and its aliases
            cannot be different. This rule also insures that a cached CNAME can be
            used without checking with an authoritative server for other RR types.

            RFC 1034 раздел 3.6.2

            А корень домена часто имеет MX запись.


            1. Dromok
              24.10.2016 19:12

              Ну так и оставить только CNAME. В контексте задачи не требовалось к доменам подключать почту.


              1. miksir
                24.10.2016 19:27
                +1

                Ну, почта для домена часто встречается ;) Но юмор даже в другом. NS — тоже запись.


                1. Dromok
                  24.10.2016 19:28

                  Это только для зоны COM такие требования? Я лично использовал динамические днс для RU и у меня сайт прекрасно работал через CNAME.


                  1. miksir
                    24.10.2016 19:41
                    +1

                    Для всех доменов, общий принцип. Другое дело, что это остается на совести конкретного DNS сервера. Например, потестил на bind — ругается "dns_master_load: /etc/bind/db.test.ru:13: test.ru: CNAME and other data". С другой стороны, если DNS сервер пропустит такое — то может и будет все работать. Возможно, у вас так и было, тут уже сложно гадать.


                1. merlin-vrn
                  24.10.2016 20:32

                  Более того, SOA — тоже запись. Не может существовать зона без SOA!


  1. ittakir
    24.10.2016 12:46
    +7

    Поздравляю, у вас белый IP, просто он не постоянный. А серый IP — это когда вы за NAT сидите, и извне к вам никто постучаться не может, только вы можете пойти наружу.


    1. Rast1234
      24.10.2016 17:07

      Это все-таки разные вещи. Если человек сидит за NAT в домашней сети, то достаточно пробросить порты на своем роутере. А вот если NAT на уровне провайдера — то да, печаль. Хотя я у одного провайдера видел галочку в личном кабинете типа «отключите мне свой NAT», а у другого — отдельную услугу «белый IP» за деньги.


      1. GennPen
        24.10.2016 17:28

        На домашнем роутере как правило включен по умолчанию UPnP, за которым проброс портов выполняется автоматически (если реализовано в программах). А вот на уровне провайдера UPnP, на сколько помнится не видел.


        1. ittakir
          24.10.2016 19:33

          > А вот на уровне провайдера UPnP, на сколько помнится не видел.

          А как вы это себе представляете? Есть IP адрес провайдера. На нем сидят несколько клиентов. Допустим, несколько из них запустили web сервер на 80 порту. На какого клиента перекидывать запрос, пришедший извне?


          1. GennPen
            25.10.2016 00:02

            Ну, можно например ограничить, только от 1024 порта и выше.


            1. ittakir
              25.10.2016 07:14

              Раскидать пользователей по портам не проблема. Но как сказать внешним посетителям, что им нужно заходить например на habrahabr.ru:12345


              1. spectreob
                25.10.2016 12:02

                Боюсь, что тут единственный вариант — это VPN-тунель. То есть ищем сервис который имеет статический IP и позволяющий пробивать к нему VPN-тунель. В комментариях тут подобные сервисы проскакивали, но я их не пробовал.

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


                1. merlin-vrn
                  25.10.2016 13:13

                  У вашего сервиса должно быть белых IP-адресов по числу клиентов. Порты 80 (и/или 443) с каждого адреса будут натиться через тоннель на соответствующего клиента.


  1. GennPen
    24.10.2016 12:52
    +10

    > Но не имеется ключевого — белого (статического) IP.

    Мне кажется, автор не полностью понимает чем отличаются между собой «белый» и «серый» IP адреса.


    1. spectreob
      24.10.2016 13:20

      Автор просто это забыл за давностью лет (9 лет назад ушел из админства). :) Спасибо за отзыв, поправил.


  1. aik
    24.10.2016 13:02
    +4

    «Белый» и «статический» — это разные характеристики IP-адреса.
    Белый/серый — оно же реальный/приватный — могут быть как статическими, так и динамическими.

    Так что поправьте заголовок и немного текст. У вас обычная задача доступа к серверу с динамическим реальным IP, она несложная. Вот если бы вы действительно с серым (приватным) адресом сайт подняли и сделали к нему доступ из интернета…


    1. spectreob
      24.10.2016 13:13

      Спасибо за отзыв, поправил терминологию: белый -> статический, серый -> динамический.


    1. spectreob
      24.10.2016 13:18

      У вас обычная задача доступа к серверу с динамическим реальным IP, она несложная. Вот если бы вы действительно с серым (приватным) адресом сайт подняли и сделали к нему доступ из интернета…

      Ни в коем случае не преувеличиваю сложность задачи. :) Просто на выходных появилась такая задача, гугл никаких готовых решений не выдал. Поэтому пришлось делать самому, ну и заодно отписал, что и как сделал.

      Рассматривал и вариант с VPN-тунелем, но опять-таки надо где-то иметь сервер с статическим IP.


      1. imm
        25.10.2016 10:57
        +1

        Ни в коем случае не преувеличиваю сложность задачи. :)

        С заголовком «Домашний хостинг сайтов за серым IP»? — ну да, ну да :)
        Сейчас он поправлен конечно, но мы помним.
        бинг пока ещё помнит, другие поисковики уже обновились)

        гугл никаких готовых решений не выдал

        Гугл и не мог выдать готовых решений — вы же искали как отдать наружу домен за серым IP

        Сот сейчас статья поправлена и ничем не отличается от тысяч таких же, и при запросе «Домашний хостинг сайтов за серым IP» будет отдана разве что кешированная страничка, вводящая в заблуждение пользователей

        Не удивляюсь, что громкие заголовки «делают день» многих, но удивительно, как подобные этой статьи выбираются из песочницы Хабра.


  1. awMinor
    24.10.2016 13:18
    +4

    Решение задачи интересное для динамического IP, но я в такой же ситуации арендовал VPS за 4 евро в месяц самую дешевую, 20гб места. Это выходит дешевле чем платить за электричество которое тратит всегда включенный компьютер дома, плюс избавляет от геморроя хардварной поддержки сервера. Ну из плюсов ещё можно считать, что даже отключения электричества мне не мешают. Ну и на сервере завел себе почту и owncloud с календарем и контактами. Так что аптайм стал очень важен для меня.


    1. spectreob
      24.10.2016 13:46
      -1

      Минимальный тарифный план который подходил мне (на тот момент было 3 домена, с кучей поддоменов, плюс пара MySQL баз, плюс почта) стоил 9$ в месяц.

      VPS — это получится некий промежуточный вариант — надо и самому с настройкой сервера возится, плюс платить за него каждый месяц.

      А про почту — я в итоге пришел к решению от Яндекса — http://pdd.yandex.ru


      1. awMinor
        24.10.2016 13:56
        +3

        Ну с настройкой сервера возится в любом случае как по мне, а VPS вышел дешевле чем электричество которое накручивает постоянно включенный сервер. Так что тут платить либо за электричество либо за сервер. А настройка как ни крути будет.


      1. tema_sun
        24.10.2016 21:17

        Минимальный дроплет от digitalocean с этим всем справится без проблем и стоит 5$ в месяц.


    1. aik
      24.10.2016 15:00

      Я «типа выделенный сервер» у scaleway за три евро арендую. :)
      Там, правда, довольно медленная дисковая подсистема (на vps у hetzner'a сильно быстрее было), но всё же своя железка без соседей (а производительности мне вполне хватает).


  1. xtala
    24.10.2016 13:33
    -1

    А аптайм влияет на ранжирование в поисковиках? Слышал, что влияет. Не могли бы вы в следующей статье хотя бы примерно накидать сравнение с удаленным хостингом по экономическим затратам (по электричеству, износу ж/д и т.п.). Как насчет юридической составляющей? Многие отказываются сейчас размещать сайты на серверах в России из-за последних неадекватных решений правительства. Какие юридические риски, размещения на домашнем сервере? Спасибо.


    1. spectreob
      24.10.2016 13:53
      +1

      Я не силен в SEO, но просто логически если мой сервер за 24 часа недоступен 2 минуты (ну пусть даже 5 минут) то вряд-ли именно в этот момент придет бот поисковика. Но даже если придет, неужели по одному отказу он сразу понизит рейтинг сайта?..

      Экономические затраты у меня такие: свой домашний сервер стоит уже 5 лет, на нем хранится всяко-разно. То есть я плачу за интернет (50-100Мбит), электричество и железо при любых раскладах. Под хостинг требуются смешные несколько сотен мегабайт места, я просто на SSD-диске это место выкроил (который вообще на 30Гб и предназначен для быстрого запуска Ubuntu).

      Про юридическую часть — как я писал в заметке, на этом хостинге живут мои личные сайты. Плюс домены у меня в зоне .org (а не .ru). В общем, в этом отношении я спокоен.


      1. muxa_ru
        24.10.2016 17:30

        tail -f access_log | grep «Googlebot»

        Если на сайте есть хотя бы страниц 500, то Вы удивитесь как часто к вам ходят поисковые роботы


      1. xtala
        25.10.2016 00:36

        А как у вас с посещаемостью? Сколько одновременно посетителей максимум принимали? При какой нагрузке ваш сервер может упасть? А хостинговый? Интересно просто стоит ли вообще овчинка выделки. Предполагаю, что для коммерческих проектов средней загруженности это вряд ли подойдет. Плюс еще надо учитывать риски взлома и что обслуживание домашнего сервера от и до лежит на одном человеке.


        1. spectreob
          25.10.2016 11:43

          Честно говоря, посещаемость в районе плинтуса :), как я писал выше, это домашняя страница + домен для красивой почты (просто редиректит на мое резюме) + ряд демонстрационных сайтов.

          Ну вот, просто ради интереса, сделал несколько тестов чтобы сравнить со своим прошлым хостингом. Использую стандартный ab из пакета Апача, делаю 1000 запросов, 100 параллельно (ab -n1000 -c100).

          Сравнивал из дома, так что не обессудьте, что у домашнего сервера будет в этом плане преимущество. Позже постараюсь повторить тест извне.

          Делаю 3 теста:
          1. CGI-скрипт (Apache + Perl)

          Сам скрипт:

          #!/usr/bin/perl
          
          print "Content-type: text/plain\n\n";
          print "Hello world!\n";
          


          NAS:
          Requests per second:    248.15 [#/sec] (mean)


          Проф. хостинг:
          Time per request:       196.557 [ms] (mean)


          2. PHP-скрипт (Apache)

          Сам скрипт:
          <? echo "Hello world" ?>
          


          NAS:
          Requests per second:    503.93 [#/sec] (mean)


          Проф. хостинг:
          Requests per second:    383.71 [#/sec] (mean)


          3. Дергаю статику (картинку)

          Картинка имеет размер 3Кб.

          NAS (Apache):
          Requests per second:    426.04 [#/sec] (mean)


          Проф. хостинг (nginx):
          Requests per second:    469.61 [#/sec] (mean)


          Итог
          Разумеется в реальной жизни проф. хостинг будет быстрее. Результаты выше объясняются исключительно тем, что домашний сервер находится ближе ко мне. С другой стороны, я не ожидал, что скорость будет примерно на одном уровне, думал порвут мой NAS как тузик грелку.


  1. reallord
    24.10.2016 13:48
    +1

    А что мешает использовать DNS от yandex?
    Там есть API, все изумительно работает и из под Linux и из под Windows.
    Была на хабре пара статей на этот счет.
    Даже для Microtik делали DNS апдейт при поднятии PPPoE сессии.


    1. spectreob
      24.10.2016 13:56

      Ничего не мешает, как я написал в постскриптуме если будут желающие, то я напишу вторую часть статьи именно про использование Яндекс DNS. Это по-сути уберет необходимость настраивать свой Bind, так-же можно полностью отказаться от DDNS-сервиса.

      Правда прямо сейчас от меня висит заявка в суппорт Яндекса из-за того, что они время от времени возвращают старую запись зоны (3-х дневной давности). Так что у варианта со своим DNS-сервером есть свои плюсы.


      1. BigD
        24.10.2016 19:06

        1. spectreob
          24.10.2016 19:13
          +1

          Спасибо за ссылку, но я тоже самое делаю сейчас скриптом (по API Яндекса). Это буквально 1 запрос который удобно Curl'ом выполнять.

          Единственное, что для этого надо почитать доки, найти токен, найти что такое record_id, потом подумать как обрабатывать ошибки. Это все вполне потянет на небольшую статью, с примерами и скриптом обновления.


          1. Zyamilon
            25.10.2016 23:24
            +1

            Почему бы не написать? Плюсы, минусы, подводные камни. Возможно, различные варианты скриптов.
            К тому же вдруг разбросанные в интернете гайды устарели.


    1. Smittyperm
      24.10.2016 18:16

      Кто заинтересуется этим способом, можно использовать этот скрипт для API Яндекса: https://github.com/populov/yandex-ddns-sh
      Например, на роутере с openWRT должен работать.


  1. marlikalmighty
    24.10.2016 13:58
    +2

    У вас нет двух долларов на хостинг?


  1. drevil
    24.10.2016 14:00
    +1

    мне кажется, при современных ценах на хостинг заниматься таким, как-то странно.
    как, впрочем, и сервер дома держать.
    Или, быть может, разработчики не могут позволить тратить 250р/мес на нормальный vps-хостинг?


    1. spectreob
      24.10.2016 14:03
      +2

      Еще раз повторюсь, что под мои требования нужно 9$ (а не 2 или 3). Но дело не только в деньгах, а в том, что каждый месяц мне приходило напоминание оплатить эти самые 9$, на что приходилось тратить некоторое время.

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


      1. powato
        24.10.2016 18:16

        fastvps? :)


      1. sumanai
        24.10.2016 18:23

        Ещё раз повторюсь, что под мои требования нужно 9$

        Это на хостингах. В VPS вас никто не будет ограничивать в числе доменов и баз данных, так что самого дешёвого VPS вам хватит за глаза.


    1. Smittyperm
      24.10.2016 18:33
      +1

      Совсем даже не странно.
      Хороший вариант использования: NAS с OwnCloud на пару терабайт.


  1. SLASH_CyberPunk
    24.10.2016 14:15
    +1

    Автор не знает отличий «серого» от «белого» IP…
    Автор не знает, как настраивать DynDNS'ы на большинствах роутерах…
    Автор не знает, как работает DNS и поэтому лепит велосипед…

    И да, экономические издержки спорны, домашний сервер — это не только его покупка, но и содержание, причем не только по администрированию, но и бесперебойному обеспечению электричеством… Я уж молчу про шум и охлаждение…


    1. spectreob
      24.10.2016 14:19
      +2

      И да, экономические издержки спорны, домашний сервер — это не только его покупка, но и содержание, причем не только по администрированию, но и бесперебойному обеспечению электричеством… Я уж молчу про шум и охлаждение…

      Автор уже 5 лет имеет свой сервер и покупать его надобности никакой нет. Поэтому все комментарии про расходы на покупку, содержание и шум идут мимо.

      Могу провести такую аналогию — у меня в гараже стоит своя машина, так зачем мне ездить на такси?


      1. SLASH_CyberPunk
        24.10.2016 14:33

        Только покупка, без содержания, сервера окупается не раньше, чем через 3 года в сравнении с полноценным дедиком. Если сравнивать какие-нибудь VPS и включить условия по содержанию домашнего сервера, то окупаемость вырастает в разы.
        Нравится кататься на своей машине, катайтесь, но как предложение «экономный вариант хостинга своих сайтов» не надо рассказывать…


        1. spectreob
          24.10.2016 14:38
          +3

          Уж простите, но вы явно писатель, а не читатель.

          Покупать сервер только для того, чтобы хостить на нем сайты дома — это бред. Я без понятия почему эту очевидную вещь еще должен доказывать.

          В то же время, у кучи людей дома есть какой-нибудь Rapsberry (лично у меня есть odroid c1) или linux сервер на Ubuntu или FreeNAS. Почему бы его не задействовать?..


          1. mpakep
            24.10.2016 17:52

            У меня телевизор постоянно подключен к сети. :)
            Задумываюсь о его использовании в качестве сервера для хранения сайтов.


            1. sumanai
              24.10.2016 18:23
              -1

              Нужно будет рутовать ))


    1. Zyamilon
      25.10.2016 23:33
      +1

      И да, экономические издержки спорны, домашний сервер — это не только его покупка, но и содержание, причем не только по администрированию, но и бесперебойному обеспечению электричеством… Я уж молчу про шум и охлаждение…

      Покупка зачастую не требуется — домашний сервер собирается из старого железа после апгрейда основного компьютера.
      Делать это исключительно для хостинга сайтов — да, бред. Но давайте не будет забывать, что домашний сервер может выполнять функции и NAS, торренто-качалки, htpc, git-хранилища, локального DNS, бэкапов. И вот в таком случае появляется вопрос — а может есть альтернативы хостингу, если проект не критичен и ходит на него 2,5 человека?
      Опять же, его можно использовать в целях (само)обучения.


      1. spectreob
        26.10.2016 18:24

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


  1. VecH
    24.10.2016 14:15
    +2

    http://dns.he.net/ — Hurricane Electric Free DNS
    Предоставляет DynDNS с бесплатное регистрацией и со всеми необходимыми записями + IPv6 тунели
    пользуюсь уже более 3 лет, никаких нареканий, 1 раз были проблемы менее 8 часов (обновляли что то)


    1. themiron
      24.10.2016 18:48

      стоит добавить, что поддерживается до 50 зон, включая возможность прописать обратные.
      апишка совместима dyndns клиентом, либо пользоваться простенькими скриптами.
      либо — использовать мощный ddns прокси https://www.dnsomatic.com/, который умеет многое, в т.ч. dns.he.net


  1. merlin-vrn
    24.10.2016 14:23
    +1

    Боже, парсинг и редактирование зон руками. По крону! Это же кошмар!

    Всему учить надо, никто маны не читает. Есть TSIG, есть nsupdate. На DNS-сервере ТОЛЬКО dns-сервер и всё, никаких апачей, кронов и связанных с ними костылей!


  1. mozg1986
    24.10.2016 14:56

    Если DNS хостится на руцентре (nic.ru), там можно удаленно обновлять записи. В глубинах сайта можно найти API для разработчиков, а в простейшем случае нужно отправить правильно составленный GET запрос с нужного ip, и этот ip автоматом подставится в перечисленные в запросе dns-записи.


  1. vitstr
    24.10.2016 15:25

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

    А зря, имхо. Выше уже писали про dns.he.net. Решает все проблемы, можно добавить в консольный клиент ddns, так же присутствует во многих программных роутерах тиа PF[OPN]Sense. Только wildcard не поддерживает, приходится руками прописывать.


  1. allXunder
    24.10.2016 15:54

    А почему не арендовать NAT VPS? Цены стартуют от ~250 р. в год, а с сервера на него поднимать тоннель.


  1. alexus230
    24.10.2016 15:54

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


    А вот и нет. У freedns есть возможность добавить домен как приватный и ежели кто-то захочет создать поддомен в вашем домене user.ru, то ему придётся отправить запрос вам. А вы уже решаете — разрешать или нет.


    1. spectreob
      24.10.2016 15:57

      Почитайте, пожалуйста, внимательно — http://freedns.afraid.org/queue/explanation.php:

      This area is only used if you own domain(s) in the system, of which there are 3 possibilities, based on FreeDNS being a shared DNS system.

      1). Shared: Public — If you add your domain as public, this queue will not be used at all, others will be permitted to create subdomains off your domain without involving you.

      2). Shared: Private — If you add your domain as private, this is the area you will screen your domains of which you decide to keep, or deny. While domains are in the queue they will function. By choosing this, you agree to only deny those that you deem offensive, or slanderous.

      3). Non-Shared: Invisible / Stealth — If you add your domain as stealth (premium members only), your domain will not be available for anyone else but you to use, and this queue will not be used at all. (Becoming a premium member can be done at any time, easily).


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

      Да и формулировка меня смущает «Выбирая это, вы согласны отвергать только те домены, которые сочтете оскорбительными или клеветническими».

      Чтобы такого не было — платите деньги за 3-ий вариант.


  1. vshemarov
    24.10.2016 15:58

    [offtop]
    Кроме экономической стороны вопроса (о чем не раз упоминали выше) у таких вот «кухонных» серверов есть еще один аспект — безопасность. Лично для меня это все равно, как если б вход в подъезд проходил через мою квартиру. Поэтому я не советовал бы такое пробовать тем, кто не достаточно хорошо продвинут в системном администрировании именно с этой точки зрения.
    [/offtop]


  1. XolodIT
    24.10.2016 16:04

    >Но в то же время эти сайты жалко бросать, а потому приходится каждый месяц на них тратить вполне реальные деньги чтобы покупать хостинг.

    не знаю, что у вас за машина в качестве сервера и работает ли она 24\7, но у меня по стоимости получилось сравнимо или дороже дешевых впс\докер хостингов из-за электричества.


  1. ilay
    24.10.2016 16:12

    А если сервак подключен к интернету напрямую, то скрипт обновления IP можно повесить на события DHCP.


  1. alexkuzko
    24.10.2016 16:25

    А я бы посоветовал амазон route53, тут и хостинг днс зоны, и дополнительные плюшки, и апи есть. Можно health check настроить и при падении домашнего канала/сайта временно менять зону на сайт заглушку (вариантов масса)


  1. AVX
    24.10.2016 16:34

    Вот только когда вдруг провайдер сделает Вам вместо белого IP серый, или (если бы был) сменит статический (!) ранее заказанный и оплаченный адрес, а потом будет ещё всякие штуки вытворять — всё это быстро надоест. Я так пользовался (ростелеком) с 2007 по 2009г, а потом прикинул, и решил что пусть лучше на хостинге крутится. Особенно когда со временем начинают забивать канал всякие личности или боты, приходится как-то отбиваться; надо следить за обновлениями (пропустил критичное — опа, и хакнули), да и много всего прочего (бэкапы, мониторинг, и т.п.). Возможно, на каком-то количестве сайтов это будет выгоднее, но пока есть дешёвые тарифы (особенно для статики) — пусть лучше на хостинге. Ещё немаловажно — ЭЛЕКТРОЭНЕРГИЯ.
    Если же на этих сайтах нет трафика — то зачем они в интернете? Сделайте их доступными локально, включил комп — пользуешься. А раз уж трафик есть — можно и монетизировать, а тут уж и на хостинг хватит.


  1. Casufi
    24.10.2016 17:49
    +1

    Heroku, Openshift имеют бесплатные планы и позволяют привязывать домены первого уровня, правда почту я не пробовал на них хостить.


    1. Erelecano
      25.10.2016 03:28
      +1

      Первого уровня?
      Иметь деньги на свой домен ПЕРВОГО уровня и при этом использовать бесплатные планы на хероках?
      Да вы — миллиардер-оригинал.


      1. ValdikSS
        25.10.2016 13:56

        Иногда домены первого уровня можно получить, просто находясь в нужное время в нужном месте.
        http://ai/
        http://offshore.ai/vince/


        1. Erelecano
          25.10.2016 14:01

          Коллега, ну вы же понимаете, что это — единственное исключение.


      1. Casufi
        26.10.2016 17:50

        Второго уровня. Я ошибся.


        1. Casufi
          26.10.2016 17:57

          Хотя если говорить именно о привязке домена, то я говорил о возможности привязать свой домен любого уровня, а не только третьего уровня в домене .rhcloud.com


  1. MaxFrodo
    24.10.2016 18:18
    +1

    Хорошо когда дома есть бесплатное электричество, иначе не вижу смысла при современных ценах на хостинг.


  1. vasilekx
    24.10.2016 19:14

    Заметка очень понравилась, жду «DNS-хостинг Яндекса».


  1. berezuev
    24.10.2016 19:19

    Vscale.io, VPS сервера с SSD от 200 рублей + pdd.yandex.ru (чтобы не поднимать свой DNS и почту).
    Не реклама, а просто личный опыт, т.к. сам пользуюсь ими уже порядка года. Под личные нужды минимального тарифа хватает «с головой». Под небольшой проект с реальными пользователями можно взять 2-3 сервера в разных местах и разнести сайт (почту, или любое другое приложение) по ним (на случай, если важен аптайм).


  1. movis08
    24.10.2016 19:29

    Жду продолжения!


  1. SlavikF
    24.10.2016 22:50

    У Гугла есть DynDNS, в том случае, если домен вы купили с помощью их сёрвиса:
    https://support.google.com/domains/answer/6147083?hl=en


  1. deemru
    25.10.2016 00:27

    Тоже в итоге перешёл на pdd.yandex.ru — Яндекс надёжен и разрешает 90 секунд TTL.


    Написал для этих целей генератор и сервер DDNS-ссылок — secq.ru/ddns (код на GitHub)


    Достаточно после смены IP-адреса зайти по сгенерированной ссылке и получить 200 OK.


    Для Mikrotik-ов, например: tool fetch url=$ddnsLINK keep-result=no


  1. w_boba
    25.10.2016 00:27

    Я довольно долгое время использовал dnspark, Они позволяют хостинг доменов второго уровня на динамических IP бесплатно. Можно заводить A-record без CNAME.


  1. Erelecano
    25.10.2016 03:32

    pdd.yandex, cloudflare и далее по списку, все дают через API возможность реализовать свой DynDNS(а тот же CF поддерживает клиенты разные dyndns'ные)
    И не нужно делать костыли.


    1. spectreob
      25.10.2016 12:08
      -2

      Вы с одной стороны правы (используя PDD можно упростить настройку), но с другой стороны это ведь только часть работы. Вам все равно придется думать как обновлять IP через API, про настройку роутера (тот-же форвардинг портов), про правильную настройку записей в DNS (время жизни и прочее).
      Я просто хотел дать готовую инструкцию для тех, кто хочет сделать именно так (с DDNS и своим DNS).
      Для тех кто хочет сделать иначе (через тот-же Яндекс ПДД), я постараюсь написать отдельную инструкцию, по тому-же принципу — вот вам 5 шагов и радуемся.


      1. Erelecano
        25.10.2016 13:34

        Показываю фокус.
        https://support.cloudflare.com/hc/en-us/articles/200168816-Does-CloudFlare-work-with-Dynamic-DNS-Can-I-update-my-DNS-records-remotely-
        https://www.cloudflare.com/technical-resources/#ddclient

        Вот собственно и все. ddclient висит себе, когда адрес меняется сообщает его ДНСу. Нет двухметровых простыней ваших костылей, нет подпорок велосипеду и прочего.
        Все работает само.


  1. iit
    25.10.2016 11:45

    Какой смысл делать все это вручную, если даже старый D-Link может автоматом все это настроить прямо из веб-панели? потом просто пробросить порт на 80 порт своего устройства.
    Когда-то я так создал свою файлопомойку. Но теперь я разочаровался в этом подходе.

    Первое — это то что канал связи узкий, динамический белый IP тоже надо поискать, домашние постоянно будут норовить вырубить из сети устройство на котором висит сайт, DDOS сложит такой сайт даже не парясь — просто забьют ваш и так ограниченный канал для которого 1,5 пользователя уже DDOS, со светом бывают перебои.

    Раньше, когда хостинг был проблемой — то да такой подход имел место, я так диплом сдавал лет шесть назад.

    Но блин теперь когда интернет пестрит возможностями для того чтобы разместить свой проект где угодно.
    Куча хостеров дают лимитированные бесплатные или почти бесплатные VDS, даже тот же самый Amazone, для типовых проектов есть шаред хостинги, для OpenSource тоже есть варианты.

    Так что у меня закономерный вопрос — зачем это сейчас?

    Даже такой нищеброд как я может позволить себе аренду сервачка виртуализации у того же hetzner чтобы держать там несколько сайтиков, owncloud, gitlab, vpn и еще пару полезных вещей.


    1. spectreob
      25.10.2016 11:53

      Какой смысл делать все это вручную, если даже старый D-Link может автоматом все это настроить прямо из веб-панели? потом просто пробросить порт на 80 порт своего устройства.

      Извиняюсь, что именно позволяет делать старый D-Link? Если что, у меня был D-Link T500 (с родной и кастомной прошивками), но не могу догадаться как он поможет мне хостить сайты.

      Первое — это то что канал связи узкий

      ADSL да, Ethernet (или оптоволокно) нет.

      Куча хостеров дают лимитированные бесплатные или почти бесплатные VDS, даже тот же самый Amazone, для типовых проектов есть шаред хостинги, для OpenSource тоже есть варианты.

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


      1. iit
        27.10.2016 15:09

        Извиняюсь, что именно позволяет делать старый D-Link? Если что, у меня был D-Link T500 (с родной и кастомной прошивками), но не могу догадаться как он поможет мне хостить сайты.


        У большиснтва роутеров серии D-link есть вкладва DDNS — которая позволяет автоматом привязать домен к роутеру, что и делает в ручную автор статьи. Точную модель роутера я не скажу, так как я отдал его уже года 2 назад.

        ADSL да, Ethernet (или оптоволокно) нет.


        Хорошо — тут вы меня уделали, у меня до сих про ADSL

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


        Берем AWS micro инстанс — он будет стоить первый год почти ничего
        Мелкомягкие тоже дают облако попробовать https://azure.microsoft.com/en-us/free/?b=16.43
        OpenShift дает машины пока у них preview https://www.openshift.com/devpreview/register.html

        Стоит ввести free vds в гугл — увидим кучу ресурсов, которые их предоставляют.


  1. Remp
    27.10.2016 10:18

    Зачем нужны NS-записи для зоны domain.ru, в виде DDNS-доменов?

    @ IN NS domain.ddns.net.
    @ IN NS domain.ddnsking.com.
    @ IN NS domain.myftp.biz.


    1. spectreob
      27.10.2016 10:26

      Они указывают на ваш собственный DNS-сервер который занимается обслуживанием запросов посетителей сайта.

      То есть обработка запроса выглядит примерно так:

      • Некий человек открыл свой браузер и ввел там имя forums.domain.ru
      • Данный запрос будет обрабатываться с конца, то есть сначала будет произведен поиск DNS-сервера который обрабатывает .ru домены
      • Потом будет найден DNS-сервер который обрабатывает domain.ru домен (это как раз и будет наш собственный сервер)
      • И вот уже на наш DNS-сервер придет запрос, мол «что за forums.domain.ru»?