[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
|
||||
Licence : GPLv2
|
||||
"""
|
||||
import time, sys
|
||||
import time, sys, re
|
||||
sys.path.append('/usr/scripts/gestion')
|
||||
from socket import gethostname
|
||||
from gen_confs import gen_config
|
||||
|
@ -40,6 +40,7 @@ la base LDAP
|
|||
### Fichiers à écrire
|
||||
# Répertoire d'écriture des fichiers de zone
|
||||
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
|
||||
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
|
||||
## 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
|
||||
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 = {
|
||||
'wifi.crans.eu': 'wifi.v6.crans.eu',
|
||||
'crans.eu': 'v6.crans.eu',
|
||||
'crans.org': 'v6.crans.org',
|
||||
'wifi.crans.org': 'wifi.v6.crans.org',
|
||||
'adm.crans.org': 'adm.v6.crans.org',
|
||||
|
@ -60,6 +64,7 @@ la base LDAP
|
|||
# Résolution inverse
|
||||
zones_reverse = config.NETs["all"] + config.NETs["adm"] + config.NETs["personnel-ens"]
|
||||
zones_v6_to_net = {
|
||||
'crans.eu': config.prefix["fil"][0],
|
||||
'crans.org': config.prefix["fil"][0],
|
||||
'wifi.crans.org': config.prefix["wifi"][0],
|
||||
'adm.crans.org': config.prefix["adm"][0],
|
||||
|
@ -76,18 +81,27 @@ la base LDAP
|
|||
### 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 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
|
||||
# format : [ priorité serveur , .... ]
|
||||
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-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._tcp.crans.org. 86400 IN SRV 5 0 5060 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
|
||||
zone_entete="""
|
||||
|
@ -124,7 +138,12 @@ zone "%(NOM_zone)s" {
|
|||
# Si =0, ralera seulement contre les machines ne pouvant être classées
|
||||
verbose = 1
|
||||
|
||||
restart_cmd = '/etc/init.d/bind9 reload'
|
||||
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'
|
||||
|
||||
######################################FIN PARTIE DE CONFIGURATION
|
||||
|
||||
def __str__(self) :
|
||||
|
@ -184,8 +203,12 @@ zone "%(NOM_zone)s" {
|
|||
# Ecriture
|
||||
fd = self._open_conf(self.DNS_CONF_BCFG2,'//')
|
||||
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,
|
||||
'FICHIER_zone' : self.DNS_DIR + 'db.' + zone,
|
||||
'FICHIER_zone' : path,
|
||||
'ip_master_DNS': self.ip_master_DNS})
|
||||
|
||||
fd.close()
|
||||
|
@ -235,6 +258,12 @@ zone "%(NOM_zone)s" {
|
|||
direct['crans.org'] += s + '\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
|
||||
self.anim.iter=len(self.machines)
|
||||
for machine in self.machines :
|
||||
|
@ -349,10 +378,21 @@ zone "%(NOM_zone)s" {
|
|||
for serv in self.DELEG[deleg]:
|
||||
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
|
||||
f = ''
|
||||
for zone, lignes in direct.items() + reverse.items() :
|
||||
file = self.DNS_DIR + 'db.' + zone
|
||||
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
|
||||
fd = self._open_conf(file,';')
|
||||
fd.write(self.zone_entete % \
|
||||
{ 'zone' : zone, 'serveur_autoritaire' : self.DNSs[0] , 'serial' : serial } )
|
||||
|
@ -361,10 +401,10 @@ zone "%(NOM_zone)s" {
|
|||
fd.write(lignes)
|
||||
fd.close()
|
||||
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}
|
||||
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
|
||||
fd = self._open_conf(self.DNS_CONF,'//')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue