[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:
parent
d05bebea62
commit
73bd82682e
1 changed files with 49 additions and 9 deletions
|
@ -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,'//')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue