diff --git a/gestion/config.py b/gestion/config.py index 50c27cee..51e9c1d7 100644 --- a/gestion/config.py +++ b/gestion/config.py @@ -131,6 +131,7 @@ sshkey_size = { 'dsa':1024, } + ## Impression class impression: """Cette classe contient toutes les variables @@ -652,6 +653,38 @@ accueil_route = { } + + +## gestion du dns +class dns: + parent='138.231.176.4' # ariane pour la zone parente + master='10.231.136.9' + slaves=[ + '10.231.136.8', # ovh + '10.231.136.14', # titanic aka freebox + ] + + master_tv='10.231.136.243' + slaves_tv=slaves + [master] + + secours_relay='10.231.136.14'; + + # résolution directe + 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 signée par opendnssec sur le serveur master + zones_dnssec = ['crans.eu','wifi.crans.eu','v6.crans.eu','wifi.v6.crans.eu'] + # Zones alias pour les enregistrements A AAAA CNAME TXT et SSHFP + zone_alias = { + 'crans.org' : ['crans.eu'], + 'wifi.crans.org' : ['wifi.crans.eu'], + } + + # Résolution inverse + zones_reverse = NETs["all"] + NETs["adm"] + NETs["personnel-ens"] + zones_reverse_v6 = prefix['fil'] + prefix['wifi'] + prefix ['adm'] + prefix['personnel-ens'] # à modifier aussi dans bind.py + + recursiv = ['138.231.136.98', '138.231.136.247'] # charybde et gordon + ####################### ## Mail de bienvenue ## ####################### diff --git a/gestion/gen_confs/bind.py b/gestion/gen_confs/bind.py index fdab05e8..e6b3536b 100644 --- a/gestion/gen_confs/bind.py +++ b/gestion/gen_confs/bind.py @@ -21,6 +21,36 @@ import ldap_crans def short_name(fullhostname): return fullhostname.split(".")[0] + + +def netv4_to_arpa(net): + addr, prefixlen = net.split('/') + if prefixlen == '16': + return ["%s.in-addr.arpa" % '.'.join(reversed(addr.split('.')[0:2]))] + zones=[] + n = map(int,net.split('/')[0].split('.')[:3]) + while 1 : + try: + innet = AddrInNet("%d.%d.%d.1" % tuple(n),net) + except ValueError: + break + else: + if not innet: + break + else : + n.reverse() + zones.append("%d.%d.%d.in-addr.arpa" % tuple(n)) + n.reverse() + n[2] += 1 + return zones + +def netv6_to_arpa(net): + n = netaddr.IPNetwork(net) + network_reverse = netaddr.IPAddress(n.first).reverse_dns + zone = network_reverse.split('.')[(128-n.prefixlen)/4:-1] + return '.'.join(zone) + + class dns(gen_config) : """ Génération des fichiers de configuration de bind9 : @@ -51,14 +81,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','crans.eu','wifi.crans.eu' ] - # Zones signée par opendnssec sur le serveur maitre - zones_dnssec = ['crans.eu','wifi.crans.eu','v6.crans.eu','wifi.v6.crans.eu'] + zones_direct = config.dns.zones_direct + # Zones signée par opendnssec sur le serveur maitre + zones_dnssec = config.dns.zones_dnssec # Zones alias pour les enregistrement A AAAA CNAME TXT et SSHFP - zone_alias = { - 'crans.org' : ['crans.eu'], - 'wifi.crans.org' : ['wifi.crans.eu'], - } + zone_alias = config.dns.zone_alias zones_v4_to_v6 = { 'wifi.crans.eu': 'wifi.v6.crans.eu', 'crans.eu': 'v6.crans.eu', @@ -68,7 +95,7 @@ la base LDAP 'ferme.crans.org': 'ferme.v6.crans.org', } # Résolution inverse - zones_reverse = config.NETs["all"] + config.NETs["adm"] + config.NETs["personnel-ens"] + zones_reverse = config.dns.zones_reverse zones_v6_to_net = { 'crans.eu': config.prefix["fil"][0], 'crans.org': config.prefix["fil"][0], @@ -81,8 +108,8 @@ la base LDAP ### Liste DNS # Le premier doit être le maitre DNSs = ['sable.crans.org', 'freebox.crans.org', 'ovh.crans.org'] - DNSs_private = ['vert.adm.crans.org'] - ip_master_DNS = "10.231.136.9" + DNSs_private = [] + ip_master_DNS = config.dns.master ### Liste des délégations de zone # Pour les demandes de ces zones, le DNS dira d'aller voir les serveurs listés ici @@ -175,7 +202,7 @@ zone "%(NOM_zone)s" { return ('.'.join(rev_dns_a[1:]), 1) elif n.version == 6: return ('.'.join(rev_dns_a[(128-n.prefixlen)/4:]), (128-n.prefixlen)/4) - + def gen_slave(self) : """ Génération du fichier de config de zone pour les esclaves """ @@ -185,31 +212,11 @@ zone "%(NOM_zone)s" { # Ajout des zones reverse for net in self.zones_reverse: # IPv4 reverse - addr, prefixlen = net.split('/') - if prefixlen == '16': - zones.append("%s.in-addr.arpa" % '.'.join(reversed(addr.split('.')[0:2]))) - continue - n = map(int,net.split('/')[0].split('.')[:3]) - while 1 : - try: - innet = AddrInNet("%d.%d.%d.1" % tuple(n),net) - except ValueError: - break - else: - if not innet: - break - else : - n.reverse() - zones.append("%d.%d.%d.in-addr.arpa" % tuple(n)) - n.reverse() - n[2] += 1 + zones.extend(netv4_to_arpa(net)) for net in set(self.zones_v6_to_net.values()): # IPv6 reverse - n = netaddr.IPNetwork(net) - network_reverse = netaddr.IPAddress(n.first).reverse_dns - zone = network_reverse.split('.')[(128-n.prefixlen)/4:-1] - zones.append('.'.join(zone)) + zones.append(netv6_to_arpa(net)) # Ecriture fd = self._open_conf(self.DNS_CONF_BCFG2,'//')