Pull to refresh

Как не потерять почту когда умирают ДЦ или о надежности DNS

Reading time 3 min
Views 5.6K
Многие недавно пострадали от одновременного падения тысяч серверов сначала в пожаре на hosting.ua, а затем при отключении на McHost. Зацепило и меня. Денег на умерших сайтах я не зарабатывал, однако почта постоянно нужна для деловой переписки. Несмотря на то, что почта у меня перенесена на Google (или как вариант на Yandex), ни одно письмо не могло до меня дойти, т.к. вместе с серверами умерли и Name-сервера, и отправители просто не могли прочитать MX-запись для моего домена. Итого, 26 часов я просидел без почты объясняя всем людям, с которыми я работаю, что им нужно дублировать все письма на другой ящик — достаточно унизительно и не профессионально.

Как же заставить почту работать даже если все сервера хостера лежат?

Итак, мы будем заниматься надежностью DNS. В принципе тут никакой мистики нет — DNS изначально был задуман надежным, именно по этому при регистрации доменов в некоторых зонах вам будет необходимо указывать 2 NS-сервера.

О терминологии


Не вдаваясь в тонкости, дабы всем было понятно:
DNS — Domain Name System — позволяет по символьному имени сайта получить его IP или значения специальных записей. Именно через DNS почтовые сервера узнают, на какой сервер присылать почту для этого домена (это указывается в MX-записях).
NS — Name Server. Сервер, отвечающий на запросы по данному домену. NS бывают Primary — именно на нем лежат файлы конфигурации(Master), описывающие какие данные отдавать, и Secondary(обычно Slave) — они регулярно копируют информацию с Primary, и служат «резервной копией». Secondary серверов может быть несколько. Когда оба(все) сервера работают — нагрузка распределяется равномерно на всех.
AXFR — вид запроса к DNS серверу, при котором он отдает все, что знает по запрошенному домену. Так называемый «Трансфер зоны». Через этот запрос Secondary NS получает всю информацию с Primary NS по нужному домену. Обычно AXFR запросы разрешены только для небольшой группы IP, чтобы не показывать посторонним лицам лишнюю информацию (например существование «секретных» поддоменов).

Как все часто сделано:


Допустим у нас есть сайт xyz.ru, NS сервера используются зачастую от провайдера (и Primary и Secondary). Иногда Primary и Secondary вообще работают на одном сервере, просто на разных IP. Соответственно на этих NS серверах и находятся MX записи, которые используются каждый раз, когда к вам нужно отправить почту, даже если почта используется от Google или Yandex.

В один прекрасный момент весь ДЦ сгорает, или монтер рубильником вырубает 70 Гбит оптоволокна, сайты само собой падают, к ним теперь нет доступа извне. Однако почта, которую обрабатывают серверы Гугла/Яндекса также не будет работать, т.к. отправители не будут знать, на какой сервер отсылать для вас почту. Такие проблемы могут возникнуть даже если соединение оборвется на каких-нибудь 5 минут. Конечно, сервер-отправитель положит письмо в очередь, и будет еще пытаться послать позже, но это может стоить вам многочасовой задержки получения письма.

Как хостеры могут сделать это правильно?


По идее, они должны NS-сервера держать в разных, не связанных друг с другом ДЦ. На практике лишних денег тратить никому не хочется, и оба сервера зачастую ставят в своём-же ДЦ, ибо так «дешевле». Кроме того, если оба NS сервера принадлежат одной компании, все-равно остаются некоторые риски (например: маски-шоу с выносом всех серверов из всех ДЦ), и предложенный ниже способ все равно имеет смысл.

Что можно сделать самому?


Использовать независимый Secondary сервер. Например, на xname.org. Там вы бесплатно можете сделать Secondary/Slave сервер (записи копируются с вашего основного NS, для этого ваш основной NS должен разрешить AXFR запросы с 195.234.42.1, 87.98.164.164 and 88.191.64.64). В случае падения вашего сервера или всего датацентра почта все равно будет исправно ходить, т.к. MX записи будут получаться с Secondary сервера. Если AXFR разрешить не удается, можно сделать Master-сервер, и руками скопировать DNS-записи.

Update: Xname — не единственный вариант, некоторые говорят что он глючен. Есть как другие бесплатные хостеры DNS, так и платные, от 1 доллара в год от nic.ua.

Еще немного хитрости


Вам вероятно захочется показать пользователям заглушку, или развернуть сайт из бэкапа на другом сервере. Однако, поскольку ваш Primary DNS лежит, поменять там что-либо не получится, и придется переводить домен на новые NS-сервера, что может занять больше времени (+еще столько-же когда будете все возвращать). Для решения этой проблемы можно поступить наоборот: Primary DNS делать на XName.org, а на вашем сервере запустить bind9 как Secondary DNS сервер. В этом случае если упадет XName.org — все будет нормально работать из кеша вашего личного Secondary NS, а если упадет ДЦ — на XName.org вы сможете быстро перенаправить пользователей на новый сервер.

Надеюсь, эта статья поможет вам подготовится к следующему эпическому падению серверов, а может и к ядерной войне.
PS. И делайте бэкапы каждый день в физически отдаленном месте, сегодня это случилось с нами, завтра — с Вами.

По результатам мини-исследования около половины хостеров держат и Primary и Secondary NS сервера в одном месте, и при проблемах с ДЦ они упадут одновременно оба.

Замечания/комментарии/ошибки — приветствуются.
Tags:
Hubs:
+42
Comments 79
Comments Comments 79

Articles