Pull to refresh

Система автоматической генерации настроек DNS-сервера Bind

Reading time 5 min
Views 7.5K
По службе приходится часто и много создавать зоны ДНС, добавлять или изменять в них записи. Вручную это довольно кропотливый и сложный процесс: ведь надо держать в голове синтаксис и не ошибаться в мелочах. Для таких вещей самое оно заставить работу выполнять компьютер.

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
Tags:
Hubs:
+15
Comments 29
Comments Comments 29

Articles