Встал вопрос о создании ДНС кластера на базе DNSmanager. Часть серверов работает под управлением directadmin.
Небольшое отступление по логике работы dnsmanager:
— при создании реселлера со своими NS серверами создается и база с одноименным названием;
— все пользователи реселлера пишут домены в базу реселлера (имя только свой логин и пароль), как следствие, у каждого пользователя свои домены. Это нужно для того чтобы кто-то не добавил домен (который уже есть) на другом сервере (на сервере домен добавится, а в ДНС кластер не уйдет так как такой домен уже есть, но если все сервера используют один и тот же логин и пароль, то при удалении — домен удалится).
Исходя из этого возникает правило — каждый сервер должен иметь собственные логин и пароль.
Для импорта доменов при их создании, переименовании, удалении из директадмина в днс менеджер нужно:
1. На сервере с директадмином смотрим конфиг named.conf.
В options {
добавляем:
IP1; IP2; IP3; IP4; — список IP с которых можно забрать зоны.
Рекомендую добавлять как главный IP DNSmanager так и IP на котором будет крутится ДНС.
2. На сервере с директадмином смотрим в:
Файл zone.conf, там что то типа:
И при необходимости добаляем туда свои новые IP:
IP1; IP2; IP3; IP4; — список IP с которых можно забрать зоны.
Рекомендую добавлять как главный IP DNSmanager так и IP на котором будет крутится ДНС (IP реселлера).
3. На сервере с директадмином передергиваем named:
Freebsd:
Linux:
4. На сервере с директадмином пишем 2 скрипта.
Первый:
Туда вставляем
Или просто сразу вставляем значения:
Далее:
Второй скрипт:
Туда вставляем:
Или просто сразу вставляем значения:
Далее:
5. Оба скрипта готовы, проверяем что не ошиблись:
Cмотрим что в DNSmanager домен появился. Лучше всего делать это с доменом который есть на сервере и есть у него записи ДНС.
Если домен появился в DNSmanager и записи передались — то все нормально.
Eсли домен появился но записей нет выполняем на DNSmanager
Если получаем:
То неправильно настроена передача зон (смотри п. 1-2), или не перезагружен named после изменений.
Cмотрим логи и исправляем пока сервер не отдаст
Если все нормально, проверяем второй скрипт:
Проверяем что домен удален из 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 выполняется после переименования домена.
Правим его — добавляем:
После переименования старый домен будет удален из кластера, а новый добавлен.
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 выполняется после создания пользователя.
Правим его — добавляем:
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 сервера.
Небольшое отступление по логике работы 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 сервера.