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
|
||||
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,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 "%(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é
|
||||
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue