Система автоматической генерации настроек DNS-сервера Bind
По службе приходится часто и много создавать зоны ДНС, добавлять или изменять в них записи. Вручную это довольно кропотливый и сложный процесс: ведь надо держать в голове синтаксис и не ошибаться в мелочах. Для таких вещей самое оно заставить работу выполнять компьютер.
IAdmin — это система создана для автоматической генерации конфигов Bind на хостинговом сервере и представляет собой базу iadmin в БД MySQL и скрипт, который на основании данных из базы генерирует конфигурационные файлы. Для настройки Bind используются таблицы dns_domains, dns_records, dns_subgmail. Основной скрипт, написанный на перле читает данные из БД iadmin и создаёт файлы конфигурации. Файлы зоны генерируются в дирректории /var/cache/bind/. Там же хранятся и прочие файлы зон, которые не обслуживаются системой iadmin. Этой же системой создаётся конфиг для secondary-DNS, который туда и переносится. До тех пор, пока скрипт не отработает, все изменения из БД НЕ материализуются.
Данные
Таблица dns_domains
Таблица состоит из следующих полей и является основной таблицей, для конфигурирования DNS-сервера:
- id — порядковый номер записи
- domainname — имя домена, зону которого будет поддерживать Bind
- www — Требуется ли поддомен www (1 — требуется)
- ftp — Требуется ли поддомен ftp (1 — требуется)
- mail — Требуются ли в зоне записи MX (1 — требуются)
- typemail — Определяет шаблон генерации MX-записей ('our' — Postfix будет обслуживать, 'gmail' — на домене активировано Google Apps). Если mail = 0 данное поле игнорируется. В дальнейшем возможны другие изменения
- secondaryfor — Для каких DNS-серверов (IP), наш сервер будет secondary (NULL — master)
- hosted_on — Запись A: IP адрес, где хостится сайт, с данным доменным именем
- enable — Активная ли зона (1 — активная). Иначе, не генерируется данная зона. Стоит обратить внимание, что если зону ответить enable = 0, это не выбросит её из обслуживания bind, но любые настройки через систему iadmin не будут окахывать никакого воздействи
- serial — Serial зоны. После любых изменений в этой таблице, или в dns_records, dns_subgmail, требуется увеличить значение. Строение год_месяц_день_правка — таким образом удобно видеть когда были изменения зоны.
- owner — писать NS-серверы англояцызные (1) или стандартные (0)
Например, для того, чтобы добавить на обслуживание англоязычную зону iadmin.vip, с почтой gmail и без ftp (хостинг 123.123.4.56 ), необходимо записать следующую строку в таблицу:
id |
domainname |
www |
ftp |
mail |
typemail |
secondaryfor |
hosted_on |
enable |
serial |
owner |
215 |
iadmin.vip |
1 |
0 |
1 |
gmail |
NULL |
123.123.4.56 |
1 |
2010082001 |
1 |
Данная запись позволит сгенерить файл зоны приблизительно следующего содержания:
$TTL 86400 iadmin.vip. IN SOA ns0.english.com. ns1.english.com. ( 2010082001 ; serial 10800 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; minimum IN NS ns0.english.com. IN NS ns1.english.com. IN A 123.123.4.56 ; IN MX 1 relay.iadmin.vip. ;relay IN A 77.88.99.11 IN MX 1 ASPMX.L.GOOGLE.COM. IN MX 5 ALT1.ASPMX.L.GOOGLE.COM. IN MX 5 ALT2.ASPMX.L.GOOGLE.COM. IN MX 10 ASPMX2.GOOGLEMAIL.COM. IN MX 10 ASPMX3.GOOGLEMAIL.COM. IN MX 10 ASPMX4.GOOGLEMAIL.COM. IN MX 10 ASPMX5.GOOGLEMAIL.COM. IN TXT "v=spf1 include:aspmx.googlemail.com ~all" mail IN CNAME ghs.google.com. calendar IN CNAME ghs.google.com. start IN CNAME ghs.google.com. docs IN CNAME ghs.google.com. _xmpp-server._tcp.iadmin.vip. IN SRV 5 0 5269 xmpp-server.l.google.com. _xmpp-server._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server1.l.google.com. _xmpp-server._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server2.l.google.com. _xmpp-server._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server3.l.google.com. _xmpp-server._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server4.l.google.com. _jabber._tcp.iadmin.vip. IN SRV 5 0 5269 xmpp-server.l.google.com. _jabber._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server1.l.google.com. _jabber._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server2.l.google.com. _jabber._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server3.l.google.com. _jabber._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server4.l.google.com. www IN CNAME iadmin.vip. ww IN CNAME iadmin.vip. wwww IN CNAME iadmin.vip.
Таблица dns_records
Таблица служит для добавления в зону произвольных записей и состоит из следующих полей:
- domainname — Имя доменной зоны, в которую добавляется запись
- rectype — какого типа добавляется запись (A, CNAME, MX, NS, и прочее)
- data — Данные, которые добавляются
- enabled — Принимает значение 1 — данная запись будет добавляться и 0 — запись деактивирована
- id — порядковый номер записи (автоматически)
Например, для того, чтобы добавить запись в которой доменная зона iadmin.vip будет иметь сторонние почтовые сервера (не наша почта и не gmail), а, скажем, relay.dc.ukrtel.net, необходимо записать следующую строку:
domainname |
rectype |
data |
enabled |
id |
.iadmin.vip |
MX |
10 relay.dc.ukrtel.net. |
1 |
680 |
Надо помнить, что после этого надо увеличить serial в dns_domains доменной зоны.
Таблица dns_subgmail
Таблица служит для упрощения написания зон, в которой есть несколько поддоменов, с использованием Google Apps и состоит из следующих полей:
- id — порядковый номер записи (автоматически)
- domainname — Имя доменной зоны, в которой используется поддомен subdomain
- subdomain — Поддомен на который также требуется Google Apps
- enable — Принимает значение 1 — данный поддомен будет добавляться и 0 — запись деактивирована
Например, для того, чтобы добавить запись в которой доменная зона iadmin.vip будет иметь ещё поддомен sync с обслуживанием Google Apps, необходимо записать следующую строку:
id | domainname | subdomain | enable |
56 | iadmin.vip | sync | 1 |
Тогда доменная зона будет выглядеть следующим образом:
$TTL 86400 iadmin.vip. IN SOA ns0.english.com. ns1.english.com. ( 2010082001 ; serial 10800 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; minimum IN NS ns0.english.com. IN NS ns1.english.com. IN A 77.88.99.11 ; IN MX 1 relay.iadmin.vip. ;relay IN A 123.123.4.56 IN MX 1 ASPMX.L.GOOGLE.COM. IN MX 5 ALT1.ASPMX.L.GOOGLE.COM. IN MX 5 ALT2.ASPMX.L.GOOGLE.COM. IN MX 10 ASPMX2.GOOGLEMAIL.COM. IN MX 10 ASPMX3.GOOGLEMAIL.COM. IN MX 10 ASPMX4.GOOGLEMAIL.COM. IN MX 10 ASPMX5.GOOGLEMAIL.COM. IN TXT "v=spf1 include:aspmx.googlemail.com ~all" mail IN CNAME ghs.google.com. calendar IN CNAME ghs.google.com. start IN CNAME ghs.google.com. docs IN CNAME ghs.google.com. _xmpp-server._tcp.iadmin.vip. IN SRV 5 0 5269 xmpp-server.l.google.com. _xmpp-server._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server1.l.google.com. _xmpp-server._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server2.l.google.com. _xmpp-server._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server3.l.google.com. _xmpp-server._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server4.l.google.com. _jabber._tcp.iadmin.vip. IN SRV 5 0 5269 xmpp-server.l.google.com. _jabber._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server1.l.google.com. _jabber._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server2.l.google.com. _jabber._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server3.l.google.com. _jabber._tcp.iadmin.vip. IN SRV 20 0 5269 xmpp-server4.l.google.com. www IN CNAME iadmin.vip. ww IN CNAME iadmin.vip. wwww IN CNAME iadmin.vip. sync IN MX 1 ASPMX.L.GOOGLE.COM. sync IN MX 5 ALT1.ASPMX.L.GOOGLE.COM. sync IN MX 5 ALT2.ASPMX.L.GOOGLE.COM. sync IN MX 10 ASPMX2.GOOGLEMAIL.COM. sync IN MX 10 ASPMX3.GOOGLEMAIL.COM. sync IN MX 10 ASPMX4.GOOGLEMAIL.COM. sync IN MX 10 ASPMX5.GOOGLEMAIL.COM. sync IN TXT "v=spf1 include:aspmx.googlemail.com ~all" mail.sync IN CNAME ghs.google.com. calendar.sync IN CNAME ghs.google.com. start.sync IN CNAME ghs.google.com. docs.sync IN CNAME ghs.google.com. _xmpp-server._tcp.sync.iadmin.vip. IN SRV 5 0 5269 xmpp-server.l.google.com. _xmpp-server._tcp.sync.iadmin.vip. IN SRV 20 0 5269 xmpp-server1.l.google.com. _xmpp-server._tcp.sync.iadmin.vip. IN SRV 20 0 5269 xmpp-server2.l.google.com. _xmpp-server._tcp.sync.iadmin.vip. IN SRV 20 0 5269 xmpp-server3.l.google.com. _xmpp-server._tcp.sync.iadmin.vip. IN SRV 20 0 5269 xmpp-server4.l.google.com. _jabber._tcp.sync.iadmin.vip. IN SRV 5 0 5269 xmpp-server.l.google.com. _jabber._tcp.sync.iadmin.vip. IN SRV 20 0 5269 xmpp-server1.l.google.com. _jabber._tcp.sync.iadmin.vip. IN SRV 20 0 5269 xmpp-server2.l.google.com. _jabber._tcp.sync.iadmin.vip. IN SRV 20 0 5269 xmpp-server3.l.google.com. _jabber._tcp.sync.iadmin.vip. IN SRV 20 0 5269 xmpp-server4.l.google.com.
Также, надо помнить, что после этого надо изменить serial в dns_domains доменной зоны.
Скрипт
Скрипт, на основании данных хранящихся в iadmin, пишет конфигурационные файлы для bind (Сейчас он на перле, в дальнейшем будет переписан скорее всего на python).
Исходные тексты размещены на github