Gnration de la conf des DNS secondaires (manuel).

darcs-hash:20041108233631-41617-be0420f0bec33b96f90a9b70156e24c75b829158.gz
This commit is contained in:
pauget 2004-11-09 00:36:31 +01:00
parent 863e467145
commit f578715077

View file

@ -6,14 +6,10 @@
Copyright (C) Frédéric Pauget
Licence : GPLv2
"""
# TODO :
# verif si SOA zamok.crans.org bon partout
# verif si liste NS identiques partout ok
# traitement warnings
import time, sre
import time, sys
sys.path.append('/usr/scripts/gestion')
from gen_confs import gen_config
from iptools import AddrInNet, AddrInNets
class dns(gen_config) :
"""
@ -34,14 +30,14 @@ la base LDAP
### Fichiers à écrire
# Répertoire d'écriture des fichiers de zone
DNS_DIR='/etc/bind/generated/' # Avec un / à la fin
# Fichier de définition des zones
# Fichier de définition des zones pour le maître
DNS_CONF=DNS_DIR + 'zones_crans'
### Sur quelles zones on a autorité ?
# Résolution directe
zones_direct = [ 'crans.org' , 'crans.ens-cachan.fr', 'wifi.crans.org' , 'ferme.crans.org' ]
# Résolution inverse (regexp pour définir les débuts des IP correspondantes)
zones_reverse = sre.compile('^138\.231\.1(3[6-9]|4[0-9]|5[01])') # 138.231.136.0 à 138.231.151.255
# Résolution inverse
zones_reverse = [ '138.231.136.0/21', '138.231.148.0/22' ]
### Liste DNS
# Le premier est doit être le maitre
@ -64,14 +60,22 @@ $TTL 86400
)
"""
# Syntaxe utilisée dans le fichier DNS_CONF pour définir une zone
# Syntaxe utilisée dans le fichier DNS_CONF pour définir une zone sur le maître
zone_template="""
zone "%(NOM_zone)s" {
type master;
file "%(FICHIER_zone)s";
};
"""
# Syntaxe utilisée dans le fichier DNS_CONF pour définir une zone sur le maître
zone_template_slave="""
zone "%(NOM_zone)s" {
type slave;
file "%(FICHIER_zone)s";
masters { 138.231.136.6; };
};
"""
### Verbosité
# Si =1 ralera (chaine warnings) si machines hors zone trouvée
# Si =0 ralera seulement contre les machines ne pouvant être classées
@ -83,6 +87,33 @@ zone "%(NOM_zone)s" {
def __str__(self) :
return "DNS"
def gen_slave(self) :
""" Génération du fichier de config de zone pour les esclaves """
zones = self.zones_direct
# Ajout des zones reverse
for net in self.zones_reverse :
print net
n = map(int,net.split('/')[0].split('.')[:3])
print n
while 1 :
n[2] += 1
print n
if not AddrInNet("%d.%d.%d.1" % tuple(n),net):
break
else :
n.reverse()
zones.append("%d.%d.%d.in-addr.arpa" % tuple(n))
n.reverse()
# Ecriture
fd = self._open_conf(self.DNS_CONF,'//')
for zone in zones :
fd.write(self.zone_template_slave % { 'NOM_zone' : zone,
'FICHIER_zone' : self.DNS_DIR + 'db.' + zone })
fd.close()
def _gen(self) :
### Génération du numéro de série
# Le + 1000.... s'explique pas l'idée précédente et peu pratique d'avoir
@ -149,7 +180,7 @@ zone "%(NOM_zone)s" {
try : direct[zone] += ligne
except : direct[zone] = ligne
# Le reverse
if self.zones_reverse.match(machine.ip()) :
if AddrInNets(machine.ip(), self.zones_reverse) :
base_ip = machine.ip().split('.')
base_ip.reverse()
zone = "%s.%s.%s.in-addr.arpa" % tuple(base_ip[1:])
@ -184,3 +215,13 @@ zone "%(NOM_zone)s" {
fd.close()
return warnings
if __name__ == '__main__' :
from socket import gethostname
if gethostname().split(".")[0] == 'zamok' :
print "Ce serveur est maître !, utiliser generate."
else :
print "Reconfiguration de bind en esclave (penser à le relancer)."
c = dns()
c.gen_slave()