Gnration de la conf des DNS secondaires (manuel).
darcs-hash:20041108233631-41617-be0420f0bec33b96f90a9b70156e24c75b829158.gz
This commit is contained in:
parent
863e467145
commit
f578715077
1 changed files with 54 additions and 13 deletions
|
@ -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,12 +60,20 @@ $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é
|
||||||
|
@ -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()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue