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 Copyright (C) Frédéric Pauget
Licence : GPLv2 Licence : GPLv2
""" """
import time, sys
# TODO : sys.path.append('/usr/scripts/gestion')
# verif si SOA zamok.crans.org bon partout
# verif si liste NS identiques partout ok
# traitement warnings
import time, sre
from gen_confs import gen_config from gen_confs import gen_config
from iptools import AddrInNet, AddrInNets
class dns(gen_config) : class dns(gen_config) :
""" """
@ -34,14 +30,14 @@ la base LDAP
### Fichiers à écrire ### Fichiers à écrire
# Répertoire d'écriture des fichiers de zone # Répertoire d'écriture des fichiers de zone
DNS_DIR='/etc/bind/generated/' # Avec un / à la fin 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' DNS_CONF=DNS_DIR + 'zones_crans'
### Sur quelles zones on a autorité ? ### Sur quelles zones on a autorité ?
# Résolution directe # Résolution directe
zones_direct = [ 'crans.org' , 'crans.ens-cachan.fr', 'wifi.crans.org' , 'ferme.crans.org' ] 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) # Résolution inverse
zones_reverse = sre.compile('^138\.231\.1(3[6-9]|4[0-9]|5[01])') # 138.231.136.0 à 138.231.151.255 zones_reverse = [ '138.231.136.0/21', '138.231.148.0/22' ]
### Liste DNS ### Liste DNS
# Le premier est doit être le maitre # 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_template="""
zone "%(NOM_zone)s" { zone "%(NOM_zone)s" {
type master; type master;
file "%(FICHIER_zone)s"; 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é ### Verbosité
# Si =1 ralera (chaine warnings) si machines hors zone trouvée # Si =1 ralera (chaine warnings) si machines hors zone trouvée
# Si =0 ralera seulement contre les machines ne pouvant être classées # Si =0 ralera seulement contre les machines ne pouvant être classées
@ -83,6 +87,33 @@ zone "%(NOM_zone)s" {
def __str__(self) : def __str__(self) :
return "DNS" 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) : def _gen(self) :
### Génération du numéro de série ### 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 # 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 try : direct[zone] += ligne
except : direct[zone] = ligne except : direct[zone] = ligne
# Le reverse # Le reverse
if self.zones_reverse.match(machine.ip()) : if AddrInNets(machine.ip(), self.zones_reverse) :
base_ip = machine.ip().split('.') base_ip = machine.ip().split('.')
base_ip.reverse() base_ip.reverse()
zone = "%s.%s.%s.in-addr.arpa" % tuple(base_ip[1:]) zone = "%s.%s.%s.in-addr.arpa" % tuple(base_ip[1:])
@ -184,3 +215,13 @@ zone "%(NOM_zone)s" {
fd.close() fd.close()
return warnings 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()