Встал вопрос о создании ДНС кластера на базе 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 сервера.
Автор: