Купили только домен, а он не открывается: как направить его на свой сервер
Эдгар Косулин 7 мин чтения
Серия «Домен без сюрпризов» · часть 8 из 8
Содержание
Клиент купил у нас домен и больше ничего: сайт у него уже работал на своём VPS. DNS-серверы при
заказе он оставил наши, ns1.siteko.net и ns2.siteko.net, и пришёл в поддержку с короткой
просьбой: «Помогите добавить A-запись». Домен к тому моменту не открывался совсем. Браузер не
показывал ошибку сайта, он просто не находил сервер.
Случай не редкий: у нас каждый четвёртый заказ состоит только из домена. Ниже разбираем, почему такой домен мёртв, пока у DNS-серверов нет его зоны, куда вписывать A-запись, как за минуту найти, на каком шаге затык, и где в этой истории ошиблись мы сами.
Домен, DNS и сервер: три разных места
Чтобы домен открывал сайт, должны сработать три вещи, и обычно они находятся в разных местах.
Регистратор хранит в реестре, какие DNS-серверы отвечают за домен (NS-записи). Об адресе сайта он больше ничего не знает.
DNS-серверы из этого списка хранят зону домена: записи о том, что example.com - это такой-то IP,
а почта живёт там-то. A-запись вписывают сюда.
Сервер по этому IP должен принять соединение на портах 80 и 443 и узнать в запросе ваш домен.
Регистрация домена сама зону не создаёт. Её заводят там, где стоят DNS-серверы: у регистратора это часто происходит само, у хостинга обычно при добавлении сайта, в отдельном DNS-сервисе при добавлении домена в панель. Если NS указаны, а зону никто не завёл, домен есть в реестре, но для интернета его нет. Чем домен отличается от хостинга вообще, мы разбирали в статье «Что такое домен простыми словами».
Почему домен не открывается даже ошибкой
С доменом нашего клиента было именно так. В реестре записаны наши DNS-серверы. Резолвер провайдера
или публичный DNS идёт к ns1.siteko.net за адресом, а тот отвечает REFUSED, то есть «этот
домен я не обслуживаю». Зоны не было. У нас она появлялась, только когда домен добавляли сайтом
на хостинг, а хостинга клиент не заказывал.
Получив отказ от всех DNS-серверов домена, резолвер отвечает SERVFAIL: найти адрес не удалось.
Google, Cloudflare и Яндекс отвечали именно так. Браузер в этом случае пишет, что не может найти
сервер, как при опечатке в адресе. Вместе с сайтом не работает всё остальное, что держится на DNS:
письма на домен не дойдут, а подтвердить его в Яндекс Вебмастере или другом сервисе через
TXT-запись не получится.
Ждать здесь бесполезно. Когда говорят «DNS распространяется», имеют в виду, что записи уже есть, а резолверы ещё держат старый ответ в кэше. Когда записей нет, распространяться нечему.
Как проверить свой домен за минуту
Понадобятся whois, dig и curl. В Linux и macOS они обычно есть или ставятся одним пакетом, в
Windows их проще запустить в WSL.
Шаг 1. Какие DNS-серверы записаны в реестре
whois example.com | grep -iE "name server|nserver"
Это первоисточник: здесь видно, куда домен делегирован прямо сейчас, без кэша резолверов. Если в ответе серверы регистратора, записи правят у регистратора. Если серверы хостинга или DNS-сервиса, то у них.
Шаг 2. Есть ли на этих серверах зона
Спрашиваем один из них напрямую, мимо резолверов (подставьте сервер из шага 1):
dig @ns1.siteko.net example.com A
Смотрим на status в заголовке ответа:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 41377
REFUSED: сервер о домене не знает, зоны нет. Её нужно завести, сама она не появится;NOERRORи IP в секцииANSWER: зона есть, и видно, какой адрес она отдаёт;NOERRORбезANSWER: зона есть, а A-записи для этого имени нет;NXDOMAIN: зона есть, а такого имени в ней нет. Так бывает сwww, если для него забыли запись.
Шаг 3. Что видит интернет
dig @8.8.8.8 example.com A
dig @77.88.8.8 example.com A
Это Google и Яндекс. Если сервер из шага 2 уже отдаёт правильный адрес, а резолвер ещё старый, это
кэш, и он истечёт сам. Если резолвер отвечает SERVFAIL, а сервер из шага 2 отвечает REFUSED,
кэш ни при чём: зоны нет.
Шаг 4. Отвечает ли сам сервер
curl -I -m 10 http://example.com
curl -I -m 10 https://example.com
curl сам найдёт адрес через DNS и покажет, что ответил сервер. Есть код ответа (200, 301):
сервер работает, дальше проверяйте, тот ли это сайт. Через 10 секунд ничего: сервер не слушает
порт или его закрывает файрвол. Ошибка сертификата: сервер отвечает, но сертификата для этого
домена у него нет.
Куда вписать A-запись
Туда, где стоят DNS-серверы из шага 1. Запись в DNS-редакторе регистратора ничего не изменит, если домен делегирован на серверы хостинга. Эту путаницу и другие причины подробно разбирает статья «Домен подключён, а сайт не открывается: DNS без мистики».
Для сайта на своём сервере обычно хватает двух записей: A для @ (сам домен) и A для www на тот
же IP. Вместо второй можно сделать CNAME www на сам домен. AAAA с IPv6-адресом добавляйте, только
если сервер действительно принимает сайт по IPv6, иначе часть посетителей будет приходить туда, где
их не ждут.
Можно и перенести DNS туда, где вам удобнее, например к провайдеру VPS: указать у регистратора его DNS-серверы и вести зону там. Тогда все записи, включая почтовые, живут у нового сервиса, и завести зону на нём стоит до того, как вы смените NS.
Сколько ждать
Зависит от того, что меняли.
Зоны не было, и её завели. Ждать почти не нужно. После того как у нашего клиента появилась зона, Google, Cloudflare, Яндекс и Quad9 отдали его адрес практически сразу. Отдельные провайдеры могут догонять дольше.
Запись была, и вы сменили адрес. Старый ответ живёт в кэшах в пределах TTL записи, хотя часть DNS-серверов держит ответы дольше, чем просит TTL.
Вы сменили DNS-серверы у регистратора. Это самый долгий случай: резолверы могут до двух суток ходить к прежним серверам. Поэтому зону на новых серверах заводят до смены NS, а не после.
Где ошиблись мы
Пока домен клиента был мёртв, кабинет показывал ему «DNS обновляется» и обещал письмо, когда DNS обновится. Обновиться было нечему.
Наша проверка спрашивала публичные резолверы, видят ли они домен. Ответ SERVFAIL она считала
признаком «ещё не распространилось», через 48 часов молча останавливалась, а статус так и оставался
«обновляется». Когда мы стали разбираться, нашлось 29 активных доменов на наших DNS-серверах без
зоны, из них 25 старых, перешедших из прежней системы. И это при том, что каждый четвёртый заказ у
нас только домен: 15 из 65.
Записи этому клиенту оператор завёл вручную, через полчаса после обращения. Остальное переделали в тот же день, 28 октября:
- проверка смотрит то, чего нет в кэше резолверов: какие DNS-серверы записаны в реестре и есть ли зона на наших серверах;
- вместо вечного «обновляется» у такого домена статус «Не подключён» и кнопки: подключить хостинг, настроить DNS-записи или указать свои DNS-серверы;
- на странице домена в кабинете появилась вкладка «DNS-записи»;
- домен на наших DNS-серверах без зоны получает страницу-заглушку с HTTPS, чтобы адрес хотя бы открывался.
Заглушку мы включили 28 октября в 17:24 по Москве, и сразу её получили 27 доменов.
Как это устроено на Siteko. Если домен на наших DNS-серверах, а сайт в другом месте, откройте домен в кабинете, вкладку «DNS-записи». Там можно завести A, AAAA, CNAME, MX и TXT. Первая запись создаёт зону, а A-запись для
@сразу ставит тот же адрес и дляwww. Пока своих записей нет, на домене страница-заглушка Siteko с сертификатом Let's Encrypt. Она уходит сама, когда вы заводите запись для@илиwww, указываете другие DNS-серверы или добавляете домен сайтом на наш хостинг; в последнем случае зона переезжает в хостинг вместе с вашими записями. У записей заглушки TTL 5 минут, так что переход на ваш сервер занимает минуты. При заказе домена мы теперь спрашиваем, где будет сайт: на нашем хостинге, в другом сервисе (тогда домен регистрируется сразу на его DNS-серверах) или пока не решили.
DNS заработал, а сайт всё равно не открывается
У нашего клиента после появления зоны домен стал вести на его сервер, но сайт не открылся. По http сервер не отвечал, по https отдавал ошибку сертификата. Это уже третье место из трёх, сам VPS:
- веб-сервер должен слушать порты 80 и 443, а файрвол сервера и провайдера должен их пропускать;
- в настройках веб-сервера должен быть сайт с вашим доменом и с
www; - сертификат должен быть выпущен на оба имени.
Сертификат Let's Encrypt проще выпускать, когда DNS уже ведёт на сервер: при обычной проверке центр сертификации заходит на ваш домен по порту 80 и ищет там проверочный файл. Поэтому порядок такой: DNS, потом веб-сервер на 80-м порту, потом сертификат. Как это сделать на своём сервере, разобрано в статьях «Поднимаем свой сайт на VPS за вечер» и «Настраиваем домен и SSL так, чтобы браузер перестал ругаться».
Если всё же пишете в поддержку, приложите вывод четырёх команд из раздела о проверке. По ним сразу видно, в каком из трёх мест затык: в реестре, в зоне или на сервере.
Серия
Домен без сюрпризов
- 1. Домены .RU и .РФ через Госуслуги: что нужно сделать владельцу сайта
- 2. Кому принадлежит ваш домен и как это проверить
- 3. Смена администратора доменного имени и перенос домена к другому регистратору
- 4. Что такое домен, доменное имя и зона простыми словами
- 5. Поддомены: когда полезны, а когда создают проблемы
- 6. Чей домен: что означают .ru, .su, .com, .io и другие зоны
- 7. Как не потерять домен: продление, уведомления и статусы
- 8. Купили только домен, а он не открывается: как направить его на свой сервер