Модуль добавления доменов из Directadmin в DNSmanager

в 8:11, , рубрики: api, directadmin, dnsmanager, tutorial, днс, ит-инфраструктура, хостинг

Встал вопрос о создании ДНС кластера на базе DNSmanager. Часть серверов работает под управлением directadmin.Небольшое отступление по логике работы dnsmanager:- при создании реселлера со своими NS серверами создается и база с одноименным названием;- все пользователи реселлера пишут домены в базу реселлера (имя только свой логин и пароль), как следствие, у каждого пользователя свои домены. Это нужно для того чтобы кто-то не добавил домен (который уже есть) на другом сервере (на сервере домен добавится, а в ДНС кластер не уйдет так как такой домен уже есть, но если все сервера используют один и тот же логин и пароль, то при удалении — домен удалится).Исходя из этого возникает правило — каждый сервер должен иметь собственные логи и пароль.Для импорта доменов при их создании, переименовании, удалении из директадмина в днс менеджер нужно:1. На сервере с директадмином смотрим конфиг named.conf.В options {добавляем:

allow-transfer { IP1; IP2; IP3; IP4; };
notify yes;
also-notify { IP1; IP2; IP3; IP4; };
allow-recursion { localnets; };

IP1; IP2; IP3; IP4; — список IP с которых можно забрать зоны.Рекомендую добавлять как главный IP DNSmanager так и IP на котором будет крутится ДНС.2. На сервере с директадмином смотрим в:

cd /usr/local/directadmin/data/templates/custom

Файл zone.conf, там что то типа:

zone "|DOMAIN|" { type master; allow-transfer { IP1; }; notify yes; file "|PATH|/|DOMAIN|.db"; };

И при необходимости добаляем туда свои новые IP:

zone "|DOMAIN|" { type master; allow-transfer { IP1; IP2; IP3; IP4; }; notify yes; file "|PATH|/|DOMAIN|.db"; };

IP1; IP2; IP3; IP4; — список IP с которых можно забрать зоны.Рекомендую добавлять как главный IP DNSmanager так и IP на котором будет крутится ДНС (IP реселлера).3. На сервере с директадмином передергиваем named: Freebsd:

/etc/rc.d/named/restart

Linux:

/etc/init.d/named restart

4. На сервере с директадмином пишем 2 скрипта.Первый:

cd /usr/local/etc
mkdir dadnstodnsmanager
cd dadnstodnsmanager
touch add-domain.sh
mcedit add-domain.sh

Туда вставляем

#!/bin/sh

DNSMGRIP="IP_DNSmanager"
USERDNS="Имя_Пользователя"
PASSUSERDNS="Пароль_Пользователя"
MASTERIP="IP_Мастера_(Главный_IP_Сервера)"

/usr/local/bin/curl --insecure https://${DNSMGRIP}:1500/dnsmgr?authinfo=${USERDNS}:${PASSUSERDNS}&out=xml&func=domain.edit&dtype=slave&master=${MASTERIP}&name=$1&sok=ok >/dev/null 2>&1

Или просто сразу вставляем значения:

#!/bin/sh
/usr/local/bin/curl --insecure https://IP:1500/dnsmgr?authinfo=Пользователь:Пароль&out=xml&func=domain.edit&dtype=slave&master=Мастер_IP&name=$1&sok=ok

Далее:

chmod +x /usr/local/etc/dadnstodnsmanager/add-domain.sh

Второй скрипт:

cd /usr/local/etc
mkdir dadnstodnsmanager
cd dadnstodnsmanager
touch delete-domain.sh
mcedit delete-domain.sh

Туда вставляем:

#!/bin/sh

DNSMGRIP="IP_DNSmanager"
USERDNS="Имя_Пользователя"
PASSUSERDNS="Пароль_Пользователя"
MASTERIP="IP_Мастера_(Главный_IP_Сервера)"

/usr/local/bin/curl --insecure https://${DNSMGRIP}:1500/dnsmgr?authinfo=${USERDNS}:${PASSUSERDNS}&elid=$1&func=domain.delete >/dev/null 2>&1

Или просто сразу вставляем значения:

#!/bin/sh
/usr/local/bin/curl --insecure https://IP:1500/dnsmgr?authinfo=Пользователь:Пароль&elid=$1&func=domain.delete >/dev/null 2>&1

Далее:

chmod +x /usr/local/etc/dadnstodnsmanager/delete-domain.sh

5. Оба скрипта готовы, проверяем что не ошиблись:

cd /usr/local/etc/dadnstodnsmanager/
./add-domain.sh testmeserver1.com

Cмотрим что в DNSmanager домен появился. Лучше всего делать это с доменом который есть на сервере и есть у него записи ДНС.Если домен появился в DNSmanager и записи передались — то все нормально.Eсли домен появился но записей нет выполняем на DNSmanager

dig @IP_MASTER_Сервера testmeserver1.com axfr

Если получаем:

; <<>> DiG V.V.V <<>> @IP_MASTER_Сервера testmeserver1.com axfr
 ; (1 server found)
 ;; global options: +cmd
 ; Transfer failed.

То неправильно настроена передача зон (смотри п. 1-2), или не перезагружен named после изменений.Cмотрим логи и исправляем пока сервер не отдаст

#dig @IP_MASTER_Сервера testmeserver1.com axfr

 ; <<>> DiG V.V.V <<>> @IP_MASTER_Сервера testmeserver1.com axfr
 ; (1 server found)
 ;; global options: +cmd
 testmeserver1.com.      14400   IN      SOA     ns1.mydnsserver.com. hostmaster.testmeserver1.com. 2013111400 14400 3600 1209600 86400
 testmeserver1.com.      14400   IN      MX      10 mail.testmeserver1.com.
 testmeserver1.com.      14400   IN      TXT     "v=spf1 a mx ip4:IP_MASTER_Сервера ~all"
 testmeserver1.com.      14400   IN      A       IP_Домена
 testmeserver1.com.      14400   IN      NS      ns1.mydnsserver.com.
 testmeserver1.com.      14400   IN      NS      ns2.mydnsserver.com.
 testmeserver1.com.      14400   IN      NS      ns3.mydnsserver.com.
 ftp.testmeserver1.com.  14400   IN      A       IP_Домена
 localhost.testmeserver1.com. 14400 IN   AAAA    ::1
 localhost.testmeserver1.com. 14400 IN   A       127.0.0.1
 mail.testmeserver1.com. 14400   IN      A       IP_Домена
 pop.testmeserver1.com.  14400   IN      A       IP_Домена
 smtp.testmeserver1.com. 14400   IN      A       IP_Домена
 www.testmeserver1.com.  14400   IN      A       IP_Домена
 testmeserver1.com.      14400   IN      SOA     ns1.mydnsserver.com. hostmaster.testmeserver1.com. 2013111400 14400 3600 1209600 86400
 ;; Query time: 1 msec
 ;; SERVER: IP_MASTER_Сервера#53(IP_MASTER_Сервера)
 ;; WHEN: Fri Nov XX XX:XX:XX XXXX
 ;; XFR size: 15 records (messages 1, bytes 424)

Если все нормально, проверяем второй скрипт:

cd /usr/local/etc/dadnstodnsmanager/
./delete-domain.sh testmeserver1.com

Проверяем что домен удален из DNSmanager.6. В директадмине есть набор дополнительных скриптов, выполняемых до или после определенных событий.Лежат они в:/usr/local/directadmin/scripts/customНас интересуют: domain_change_post.sh domain_create_post.sh domain_destroy_post.sh domain_pointer_create_post.sh domain_pointer_destroy_post.sh subdomain_create_post.sh subdomain_destroy_post.sh user_create_post.shЕсли их нет, то нужно создать.Пойдем по очереди: domain_change_post.sh выполняется после переименования домена.Правим его — добавляем:

/usr/local/etc/dadnstodnsmanager/delete-domain.sh.sh $domain
/usr/local/etc/dadnstodnsmanager/add-domain.sh $newdomain

После переименования старый домен будет удален из кластера, а новый добавлен. domain_create_post.sh выполняется после создания домена.Правим его — добавляем:

/usr/local/etc/dadnstodnsmanager/add-domain.sh $domain

domain_destroy_post.sh выполняется после удаления домена.Правим его — добавляем:

/usr/local/etc/dadnstodnsmanager/delete-domain.sh $domain

domain_pointer_create_post.sh выполняется после создания доменного указателя домена.Правим его — добавляем:

/usr/local/etc/dadnstodnsmanager/add-domain.sh $from

domain_pointer_destroy_post.sh выполняется после создания доменного указателя домена.Правим его — добавляем:

/usr/local/etc/dadnstodnsmanager/delete-domain.sh $from

subdomain_create_post.sh выполняется после создания поддомена.Правим его — добавляем:

/usr/sbin/rndc reload $domain

subdomain_destroy_post.sh выполняется после удаления поддомена.Правим его — добавляем:

/usr/sbin/rndc reload $domain

user_create_post.sh выполняется после создания пользователя.Правим его — добавляем:

/usr/local/etc/dadnstodnsmanager/add-domain.sh $from

7. Выполняем проверку. 7.1 Создали пользователя с доменом. 7.2 Зашли под пользователем и создали поддомен. 7.3 Зашли под пользователем и создали доменный указатель. 7.4 Зашли под пользователем и создали еще домен2. 7.5 Зашли под пользователем и переименовали домен2. 7.6 Зашли под пользователем и удалили поддомен. 7.7 Зашли под пользователем и удалили доменный указатель. 7.8 Зашли под пользователем и удалили домен2. 7.9 Удалили пользователя. После каждого пункта проверяем что передается в dnsmanager.Если все тесты прошли успешно можно вводить в эксплуатацию.Если планируется использовать только один dnsmanager (на мастере), то на остальные НС сервера можно просто настроить репликацию базы данных и поднять на них pds, тогда при изменении домена, или его записей, хостинговый сервер отправит изменения на мастер сервер, а оттуда изменения передадутся на slave сервера.

Автор:

Источник

Поделиться

* - обязательные к заполнению поля