[bind.py] Possibilité de déclarer des zones signé par opendnssec.

Ignore-this: 68a00379301354ac38bc7e1a6a2d370b

darcs-hash:20130110235501-3a55a-66368702a1203be2e123d99709ebdbf3d2cc430e.gz
This commit is contained in:
Valentin Samir 2013-01-11 00:55:01 +01:00
parent d05bebea62
commit 73bd82682e

View file

@ -6,7 +6,7 @@
Copyright (C) Frédéric Pauget Copyright (C) Frédéric Pauget
Licence : GPLv2 Licence : GPLv2
""" """
import time, sys import time, sys, re
sys.path.append('/usr/scripts/gestion') sys.path.append('/usr/scripts/gestion')
from socket import gethostname from socket import gethostname
from gen_confs import gen_config from gen_confs import gen_config
@ -40,6 +40,7 @@ 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
DNSSEC_DIR = '/etc/bind/signed/' # Avec un / à la fin
# Fichier de définition des zones pour le maître # Fichier de définition des zones pour le maître
DNS_CONF = DNS_DIR + 'zones_crans' DNS_CONF = DNS_DIR + 'zones_crans'
@ -50,8 +51,11 @@ la base LDAP
## En cas de modification de ces zones penser à regéner le fichier de ## En cas de modification de ces zones penser à regéner le fichier de
## zone des esclaves (sur le serveur principal de bcfg2 : python /usr/scripts/gestion/gen_confs/bind.py puis lancer bcfg2 sur les miroirs) ## zone des esclaves (sur le serveur principal de bcfg2 : python /usr/scripts/gestion/gen_confs/bind.py puis lancer bcfg2 sur les miroirs)
# Résolution directe # Résolution directe
zones_direct = [ 'crans.org', 'crans.ens-cachan.fr', 'wifi.crans.org', 'ferme.crans.org' , 'clubs.ens-cachan.fr', 'adm.crans.org' ] zones_direct = [ 'crans.org', 'crans.ens-cachan.fr', 'wifi.crans.org', 'ferme.crans.org' , 'clubs.ens-cachan.fr', 'adm.crans.org','crans.eu','wifi.crans.eu' ]
zones_dnssec = ['crans.eu','wifi.crans.eu','v6.crans.eu','wifi.v6.crans.eu']
zones_v4_to_v6 = { zones_v4_to_v6 = {
'wifi.crans.eu': 'wifi.v6.crans.eu',
'crans.eu': 'v6.crans.eu',
'crans.org': 'v6.crans.org', 'crans.org': 'v6.crans.org',
'wifi.crans.org': 'wifi.v6.crans.org', 'wifi.crans.org': 'wifi.v6.crans.org',
'adm.crans.org': 'adm.v6.crans.org', 'adm.crans.org': 'adm.v6.crans.org',
@ -60,6 +64,7 @@ la base LDAP
# Résolution inverse # Résolution inverse
zones_reverse = config.NETs["all"] + config.NETs["adm"] + config.NETs["personnel-ens"] zones_reverse = config.NETs["all"] + config.NETs["adm"] + config.NETs["personnel-ens"]
zones_v6_to_net = { zones_v6_to_net = {
'crans.eu': config.prefix["fil"][0],
'crans.org': config.prefix["fil"][0], 'crans.org': config.prefix["fil"][0],
'wifi.crans.org': config.prefix["wifi"][0], 'wifi.crans.org': config.prefix["wifi"][0],
'adm.crans.org': config.prefix["adm"][0], 'adm.crans.org': config.prefix["adm"][0],
@ -76,12 +81,15 @@ la base LDAP
### Liste des délégations de zone ### Liste des délégations de zone
# Pour les demandes de ces zones, le DNS dira d'aller voir les serveurs listés ici # Pour les demandes de ces zones, le DNS dira d'aller voir les serveurs listés ici
# Pour les noms des serveurs on met l'IP sans point ou le nom avec un point # Pour les noms des serveurs on met l'IP sans point ou le nom avec un point
DELEG = { 'tv.crans.org' : ['charybde.crans.org.' , 'freebox.crans.org.', 'sable.crans.org.' , 'mdr.crans.org.'] } DELEG = {
'tv.crans.org' : ['charybde.crans.org.' , 'freebox.crans.org.', 'sable.crans.org.' , 'mdr.crans.org.'] ,
}
### Serveurs de mail ### Serveurs de mail
# format : [ priorité serveur , .... ] # format : [ priorité serveur , .... ]
MXs = ['10 redisdead.crans.org', '20 ovh.crans.org', '20 freebox.crans.org'] MXs = ['10 redisdead.crans.org', '20 ovh.crans.org', '20 freebox.crans.org']
SRVs = ['_jabber._tcp.crans.org. 86400 IN SRV 5 0 5269 xmpp.crans.org.', SRVs = [
'_jabber._tcp.crans.org. 86400 IN SRV 5 0 5269 xmpp.crans.org.',
'_xmpp-server._tcp.crans.org. 86400 IN SRV 5 0 5269 xmpp.crans.org.', '_xmpp-server._tcp.crans.org. 86400 IN SRV 5 0 5269 xmpp.crans.org.',
'_xmpp-client._tcp.crans.org. 86400 IN SRV 5 0 5222 xmpp.crans.org.', '_xmpp-client._tcp.crans.org. 86400 IN SRV 5 0 5222 xmpp.crans.org.',
'_sip._udp.crans.org. 86400 IN SRV 5 0 5060 asterisk.crans.org.', '_sip._udp.crans.org. 86400 IN SRV 5 0 5060 asterisk.crans.org.',
@ -89,6 +97,12 @@ la base LDAP
'_sips._tcp.crans.org. 86400 IN SRV 5 0 5061 asterisk.crans.org.', '_sips._tcp.crans.org. 86400 IN SRV 5 0 5061 asterisk.crans.org.',
] ]
# DS à publier dans zone parentes : { parent : [ zone. TTL IN DS key_id algo_id 1 hash ] }
# ex : { 'crans.eu' : ['wifi.crans.eu. 86400 IN DS 33131 8 1 3B573B0E2712D8A8B1B0C3'] }
# /!\ Il faut faire attention au rollback des keys, il faudrait faire quelque chose d'automatique avec opendnssec
DS = {}
### Entète des fichiers de zone ### Entète des fichiers de zone
zone_entete=""" zone_entete="""
$ORIGIN %(zone)s. $ORIGIN %(zone)s.
@ -124,7 +138,12 @@ zone "%(NOM_zone)s" {
# Si =0, ralera seulement contre les machines ne pouvant être classées # Si =0, ralera seulement contre les machines ne pouvant être classées
verbose = 1 verbose = 1
hostname = short_name(gethostname())
if hostname == short_name(DNSs[0]):
restart_cmd = '/usr/sbin/ods-signer sign --all && /etc/init.d/bind9 reload'
else:
restart_cmd = '/etc/init.d/bind9 reload' restart_cmd = '/etc/init.d/bind9 reload'
######################################FIN PARTIE DE CONFIGURATION ######################################FIN PARTIE DE CONFIGURATION
def __str__(self) : def __str__(self) :
@ -184,8 +203,12 @@ zone "%(NOM_zone)s" {
# Ecriture # Ecriture
fd = self._open_conf(self.DNS_CONF_BCFG2,'//') fd = self._open_conf(self.DNS_CONF_BCFG2,'//')
for zone in zones : for zone in zones :
if zone in self.zones_dnssec:
path=self.DNSSEC_DIR + 'db.' + zone
else:
path=self.DNS_DIR + 'db.' + zone
fd.write(self.zone_template_slave % { 'NOM_zone' : zone, fd.write(self.zone_template_slave % { 'NOM_zone' : zone,
'FICHIER_zone' : self.DNS_DIR + 'db.' + zone, 'FICHIER_zone' : path,
'ip_master_DNS': self.ip_master_DNS}) 'ip_master_DNS': self.ip_master_DNS})
fd.close() fd.close()
@ -235,6 +258,12 @@ zone "%(NOM_zone)s" {
direct['crans.org'] += s + '\n' direct['crans.org'] += s + '\n'
direct['crans.org'] += '\n' direct['crans.org'] += '\n'
### Ajout d'eventuel champs DS pour les délégation dnssec
for zone,ds in self.DS:
for s in ds:
direct[zone] += s + '\n'
direct[zone] += '\n'
### Tri des machines ### Tri des machines
self.anim.iter=len(self.machines) self.anim.iter=len(self.machines)
for machine in self.machines : for machine in self.machines :
@ -349,9 +378,20 @@ zone "%(NOM_zone)s" {
for serv in self.DELEG[deleg]: for serv in self.DELEG[deleg]:
direct[zone] = direct[zone] + "%s\tIN\tNS\t%s\n" % ( nom, serv ) direct[zone] = direct[zone] + "%s\tIN\tNS\t%s\n" % ( nom, serv )
### aliasing pour crans.eu
direct['crans.eu']=re.sub('crans.org','crans.eu',direct['crans.org'])
direct['wifi.crans.eu']=re.sub('crans.org','crans.eu',direct['wifi.crans.org'])
direct[self.zones_v4_to_v6['crans.eu']]=re.sub('crans.org','crans.eu',direct[self.zones_v4_to_v6['crans.org']])
direct[self.zones_v4_to_v6['wifi.crans.eu']]=re.sub('crans.org','crans.eu',direct[self.zones_v4_to_v6['wifi.crans.org']])
### Ecriture des fichiers de zone et préparation du fichier de définition ### Ecriture des fichiers de zone et préparation du fichier de définition
f = '' f = ''
for zone, lignes in direct.items() + reverse.items() : for zone, lignes in direct.items() + reverse.items() :
if zone in self.zones_dnssec:
path = self.DNSSEC_DIR + 'db.' + zone
else:
path = self.DNS_DIR + 'db.' + zone
file = self.DNS_DIR + 'db.' + zone file = self.DNS_DIR + 'db.' + zone
fd = self._open_conf(file,';') fd = self._open_conf(file,';')
fd.write(self.zone_entete % \ fd.write(self.zone_entete % \
@ -361,10 +401,10 @@ zone "%(NOM_zone)s" {
fd.write(lignes) fd.write(lignes)
fd.close() fd.close()
if short_name(gethostname()) in map(short_name, dns.DNSs[1:]): if short_name(gethostname()) in map(short_name, dns.DNSs[1:]):
f += self.zone_template_slave % {'NOM_zone': zone, 'FICHIER_zone': file, f += self.zone_template_slave % {'NOM_zone': zone, 'FICHIER_zone': path,
'ip_master_DNS': self.ip_master_DNS} 'ip_master_DNS': self.ip_master_DNS}
else: else:
f += self.zone_template % { 'NOM_zone' : zone, 'FICHIER_zone' : file } f += self.zone_template % { 'NOM_zone' : zone, 'FICHIER_zone' : path }
### Ecriture fichier de définition ### Ecriture fichier de définition
fd = self._open_conf(self.DNS_CONF,'//') fd = self._open_conf(self.DNS_CONF,'//')