# Сторонние службы DNS

По умолчанию Plesk играет роль первичного DNS-сервера для размещенных в нем сайтов. Но, как вариант, вы можете использовать для разрешения конфликтов имен доменов, размещенных в Plesk, сторонние DNS-службы, например, Amazon Route 53 (http://aws.amazon.com/route53/), DynECT (http://dyn.com/dns/dynect-managed-dns/) или Godaddy Premium DNS (http://www.godaddy.com/domains/dns-hosting.aspx). Использование таких служб дает некоторые преимущества:

- Сокращение нагрузки на ваш сервер Plesk.
- Повышение надежности DNS-хостинга.

Если вы планируете использовать внешнюю стороннюю DNS-службу, вы можете настроить в Plesk использование этой службы вместо собственного сервера DNS. Это не будет заметно для владельцев сайтов: с их точки зрения Plesk останется первичным DNS-сервером для их доменов.

Чтобы Plesk начал автоматически передавать зоны DNS сторонней службе DNS, вам надо написать интеграционный скрипт.

## Интеграционный скрипт для DNS

Интеграционный скрипт – это скрипт (написанный на любом языке, поддерживаемом вашим сервером), который передает изменения, выполненные для зон DNS в интерфейсе Plesk, выбранной сторонней DNS-службе. Этот скрипт должен взаимодействовать с внешней службой с помощью средств API этой службы.

После того как вы зарегистрируете скрипт в Plesk, последний будет передавать скрипту информацию о любом изменении в зонах DNS, например, о добавлении или удалении записей ресурсов или целых зон.

Этот скрипт должен отвечать следующим требованиям:

- Он должен быть способен обрабатывать входные параметры, перечисленные в таблице ниже.
- Если действия скрипта завершены успешно, он должен возвращать `errorcode0`.
- Если вы хотите, чтобы ваш скрипт записывал информацию о своем выполнении в файлы журнала Plesk, отправьте эту информацию в потоки скрипта `stdout` и `sterr`.

Пример скрипта для интеграции Plesk с Amazon Route 53 доступен на нашей странице GitHub.

Обратите внимание, что для использования этого скрипта вам надо выполнить два следующих шага:

- Скачайте библиотеку для работы с Amazon Web Services на PHP `aws.phar` с http://aws.amazon.com/sdkforphp/ и поместите ее в ту же папку, где находится скрипт.
- Укажите свои учетные данные Amazon в строках скрипта 23 и 24:

    'client' => array(
        'key' => '<key>',
        'secret' => '<secret>',
    ),

# Входные параметры интеграционного скрипта

Примечание

Все параметры имеют тип `string`.

Параметр |  |  | Описание | Пример
--- | --- | --- | --- | ---
command |  |  | Операция, которую необходимо выполнить для указанной зоны (`create`, `update`, или `delete`) или для обратной записи (PTR) (`createPTRs` или `deletePTRs`). | `create`
`zone` |  |  | Информация о зоне, для которой выполняется операция. Указывается в случае, если `command` – `create`, `update` или `delete`. |
| `name` |  | Имя зоны. | `d10.tld.`
| `displayName` |  | Имя зоны без конверсии IDN в ASCII. | `d10.tld.`
| `soa` |  | Информация о ресурсной записи SOA в зоне. Указывается, если `command` – `create` или `update`. |
|  | `email` | Контактный адрес электронной почты | `domainowner@samplemail.com`
|  | `status` | Всегда `0`. | `0`
|  | `type` | Тип сервера DNS. Всегда `master`. | `master`
|  | `ttl` | Количество времени в секундах, в течение которого другие DNS-серверы должны хранить запись в кэше. | `86400`
|  | `refresh` | Время в секундах, показывающее, как часто вторичный сервер имен посылает запрос первичному серверу имен, чтобы получить информацию о возможных изменениях, которые были внесены в файл доменной зоны. | `10800`
|  | `retry` | Время (в секундах) ожидания вторичного сервера перед повторной попыткой получить файл зоны в случае ошибки. | `3600`
|  | `expire` | Определяет интервал времени, по истечении которого вторичный сервер прекращает отвечать на запросы, после того как прошел интервал времени обновления, во время которого не удалось обновить файл зоны. | `604800`
|  | `minimum` | Период времени, в течение которого вторичный сервер должен хранить в кэше отрицательный ответ. | `10800`
|  | `serial` | Число, которое определяет состояние зоны. Plesk использует временную метку Unix момента отправки запроса. | `1363228965`
|  | `serial_format` | Всегда `"UNIXTIMESTAMP"` |
|  | `rr` |  | Информация о ресурсных записях в указанной зоне. Указывается, если `command` – `create` или `update`.
| `хост` |  | Имя хоста сервера в зоне. | `www.d10.tld.`
| `displayHost` |  | Имя хоста сервера без конверсии IDN в ASCII. | `www.d10.tld.`
| `type` |  | Тип записи. | `CNAME`
| `opt` |  | Часть `value` без IP-адреса или имени хоста. |
| `value` |  | Значение (IP-адрес или имя хоста) ресурса, который доступен для указанного `host`. | `d10.tld.`
| `displayValue` |  | Значение (IP-адрес или имя хоста) ресурса, который доступен для указанного `host` без конверсии из IDN в ASCII. | `d10.tld.`
`ptr` |  |  | Информация об обратных записях (PTR). Указывается, если `command` –`createPTRs` или `deletePTRs`. |
| `ip_address` |  | IP-адрес обратной записи. Может быть IPv4 или IPv6 адресом. | `10.52.59.29`
| `hostname` |  | Имя хоста обратной записи. | `d10.tld`

# Интеграция Plesk со сторонними службами DNS

Чтобы включить интеграцию Plesk со сторонними службами DNS:

1. Поместите свой интеграционный скрипт в папку расширения `/plib/scripts/`

   Например: `/plib/scripts/route53.php`

2. Удостоверьтесь в том, что ваш скрипт может быть успешно запущен из командной строки

   В Linux: `/usr/local/psa/bin/extension --exec <extension_id> <script_name>`

   В Windows: `<plesk_dir>\bin\extension.exe --exec <extension_id> <script_name>`

   Например: `/usr/local/psa/bin/extension --exec route53 route53.php`

3. Настройте скрипт `post-install.php`, чтобы зарегистрировать персональный DNS-сервер

   В Linux: `plesk bin server_dns --enable-custom-backend <script_execution>`

   В Windows: `<plesk_dir>\bin\server_dns.exe --enable-custom-backend <script_execution>`

   Например:

       $script = '/usr/local/psa/bin/extension --exec route53 route53.php';
       $result = pm_ApiCli::call('server_dns', ['--enable-custom-backend', $script]);

Чтобы выключить интеграцию Plesk со сторонней службой DNS и восстановить настройки по умолчанию

Настройте скрипт `pre-uninstall.php`, чтобы отключить персональный DNS-сервер

В Linux: `plesk bin server_dns -—disable-custom-backend`

В Windows: `<plesk_dir>\bin\server_dns.exe ---disable-custom-backend`

Например: `$result = pm_ApiCli::call('server_dns', ['--disable-custom-backend']);`

Вы можете найти полный пример такой интеграции на github: https://github.com/plesk/ext-route53

## Комментарии

# Проверка успешной синхронизации зон DNS

При наличии интеграции DNS Plesk со сторонней службой DNS зоны DNS доменов также синхронизируются с этой службой. Успешная синхронизация зоны DNS какого-либо домена означает следующее:

1. Зона DNS для этого домена создается внешней службой.
2. Все записи DNS домена корректно копируются во внешнюю службу.
3. В интерфейсе расширения этот домен отмечен как синхронизированный с внешней службой.
4. Пользователь получает сообщение о том, что зона DNS для указанного домена успешно синхронизирована с внешней службой.
5. Если какая-либо запись DNS не поддерживается внешней службой, пользователь видит сообщение об этом в интерфейсе расширения.
6. Если вся зона DNS не может быть синхронизирована, пользователь видит соответствующее сообщение в интерфейсе расширения.

Особенности синхронизации для разных поддерживаемых типов доменов

Plesk поддерживает большое количество разных типов доменов. Для некоторых из них справедливы дополнительные важные соображения.

Примечание

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

Тип домена | Особенности
--- | ---
Подписка | —
Дополнительный домен | —
Субдомен | Синхронизация возможна только для субдоменов со своей собственной зоной DNS. Субдомены с родительскими зонами DNS не могут быть синхронизированы.
Псевдоним домена | Зона DNS псевдонима домена может быть синхронизирована или не синхронизирована с зоной DNS основного домена. Результат синхронизации зоны DNS псевдонима домена с внешней службой не должен от этого зависеть.
Домен без хостинга | —
Перенаправление | —
Домен на IPv6 | Добавьте IPv6-адрес (если он отсутствует) в разделе Инструменты и настройки > IP-адреса, и используйте его для создания подписки, чтобы проверить синхронизацию такого домена.
IDN-домен | Удостоверьтесь в том, что имя домена отображается в интерфейсе расширения в национальной кодировке.

Домены, недоступные для синхронизации

Согласно политике Plesk, зоны DNS следующих доменов не могут быть синхронизированы с внешней службой:

- домены с отключенной зоной DNS
- домены со вторичной зоной DNS
- отключенные домены
- приостановленные домены

Учет ограничений службы

Если у внешней службы DNS есть какие-либо ограничения на использование ресурсов, расширение не должно разрешать пользователям выполнять ресурсоемкие действия при достижении соответствующего ограничения. В интерфейсе расширения должно отображаться соответствующее сообщение.

# Проверка операций с синхронизированными зонами DNS

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

Выберите домен, зона DNS которого синхронизирована с внешней службой DNS, и проверьте следующее.

Операции с зоной DNS

1. Переключение зоны DNS из режима Первичный в режим Вторичный исключает возможность синхронизации. Если зона DNS домена уже синхронизирована с внешней службой, переключение режима из Первичный во Вторичный ничего не меняет, записи зоны DNS остаются на внешнем сервере без изменений. Если зона DNS домена еще не была синхронизирована, переключение в режим Вторичный делает ее синхронизацию невозможной.
2. Применение шаблона DNS должно быть отражено корректно. Когда пользователь применяет шаблон DNS к активной зоне DNS, записи DNS должны быть соответственно обновлены на внешнем сервере.
3. Сброс настроек DNS должен быть отражен корректно. Когда пользователь изменяет настройки DNS на настройки по умолчанию для активной зоны DNS, ее записи DNS должны быть соответственно обновлены на внешнем сервере.

Операции с записями DNS

1. Добавление записи DNS любого типа в Plesk ведет к добавлению записи на внешнем сервере. Это должно работать для всех типов записей DNS.
2. Редактирование записи DNS в Plesk ведет к изменению соответствующей записи на внешнем сервере.
3. Удаление записи DNS из Plesk ведет к удалению соответствующей записи на внешнем сервере.

Операции с доменом

Удостоверьтесь в том, что изменения в настройках хостинга домена правильно отражены во внешних записях DNS.

1. Изменение имени домена. Когда имя домена изменяется, вы можете либо соответственно обновить записи DNS на внешнем сервере, либо полностью удалить их. Это изменение должно быть правильно отражено в интерфейсе расширения Plesk.

2. Изменение IP-адреса домена в Plesk приводит к обновлению IP-адреса в записях DNS на внешнем сервере.

3. Отключение синхронизированного домена НЕ приводит к удалению его записей DNS с внешнего сервера.

   Примечание

   Если домен был отключен до синхронизации с внешним сервером DNS, он вообще не может быть синхронизирован.

4. Приостановка синхронизированного домена НЕ приводит к удалению его записей DNS с внешнего сервера.

   Примечание

   Если домен был приостановлен до синхронизации с внешним сервером DNS, он вообще не может быть синхронизирован.

5. Удаление домена из Plesk должно приводить к удалению всех его записей DNS с внешнего сервера.