Pull to refresh

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

API *
Sandbox
Встал вопрос о создании ДНС кластера на базе 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 сервера.
Tags:
Hubs:
Total votes 1: ↑1 and ↓0 +1
Views 1.7K
Comments Leave a comment