diff --git a/gestion/config.py b/gestion/config.py index 51e9c1d7..c0b62872 100644 --- a/gestion/config.py +++ b/gestion/config.py @@ -520,6 +520,7 @@ NETs = { 'serveurs' : [ '138.231.136.0/24' ], 'personnel-ens': ['10.2.9.0/24' ], 'ens' : ['138.231.135.0/24'], 'all' : [ '138.231.136.0/21', '138.231.144.0/21' ], + 'multicast' : ['239.0.0.0/8'], } NETs_regexp = { 'all' : '^138\.231\.1(3[6789]|4[0123456789]|5[01])\.\d+$' } diff --git a/gestion/gen_confs/bind.py b/gestion/gen_confs/bind.py index e6b3536b..3e4fbbb7 100644 --- a/gestion/gen_confs/bind.py +++ b/gestion/gen_confs/bind.py @@ -25,6 +25,8 @@ def short_name(fullhostname): def netv4_to_arpa(net): addr, prefixlen = net.split('/') + if prefixlen == '8': + return ["%s.in-addr.arpa" % addr.split('.')[0]] if prefixlen == '16': return ["%s.in-addr.arpa" % '.'.join(reversed(addr.split('.')[0:2]))] zones=[] @@ -110,12 +112,14 @@ la base LDAP DNSs = ['sable.crans.org', 'freebox.crans.org', 'ovh.crans.org'] DNSs_private = [] ip_master_DNS = config.dns.master + + zone_multicast = 'tv.crans.org' ### 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' : [ 'freebox.crans.org.', 'sable.crans.org.' , 'mdr.crans.org.', 'ovh.crans.org.'] , + zone_multicast : [ 'mdr.crans.org.', 'freebox.crans.org.', 'sable.crans.org.' , 'ovh.crans.org.'] , } ### Serveurs de mail @@ -145,7 +149,7 @@ la base LDAP zone_entete=""" $ORIGIN %(zone)s. $TTL 3600 -@\tIN\tSOA sable.crans.org. root.crans.org. ( +@\tIN\tSOA %(serveur_autoritaire)s. root.crans.org. ( %(serial)i ; numero de serie 21600 ; refresh (s) 3600 ; retry (s) @@ -203,7 +207,52 @@ zone "%(NOM_zone)s" { elif n.version == 6: return ('.'.join(rev_dns_a[(128-n.prefixlen)/4:]), (128-n.prefixlen)/4) - + def gen_tv(self): + serial = time.time() + 1000000000 + zone_reverse=netv4_to_arpa(config.NETs['multicast'][0])[0] + sap=open('/tmp/chaines_recup_sap.txt').readlines() + + DNS='; DNS de la zone par ordre de priorité\n' + for d in self.DELEG[self.zone_multicast] : + DNS += '@\tIN\tNS %s\n' % d + DNS += '\n' + + lignes_d = '\n' + lignes_r = '\n' + lignes_d +='@\tIN\tA\t%s\n' % '138.231.136.243' + for line in sap: + [nom,ip]=line.split(':') + nom=re.sub('TNT([0-9]*) ','',nom) # on enlève les TNT## des noms + nom=re.sub(' +([^ ])','-\g<1>',nom) # on remplaces les espaces intérieur par un tiret + nom=re.sub('[ .():,"\'+<>]','',nom) # on enlève tous les caractères illégaux + nom=nom.lower() + try: + [ip1,ip2,ip3,ip4]=ip.strip().split('.') + lignes_r += '%s.%s.%s\tIN\tPTR\t%s.%s.\n' % (ip4,ip3,ip2,nom,self.zone_multicast) + lignes_d +='%s\tIN\tA\t%s' % (nom,ip) + except: + pass + # Écriture de la zone directe + file = self.DNS_DIR + 'db.' + self.zone_multicast + fd = self._open_conf(file,';') + fd.write(self.zone_entete % \ + { 'zone' : self.zone_multicast, 'serveur_autoritaire' : self.DELEG[self.zone_multicast][0][0:-1] , 'serial' : serial } ) + fd.write('\n') + fd.write(DNS) + fd.write(lignes_d) + fd.close() + + # Écriture du reverse + file = self.DNS_DIR + 'db.' + zone_reverse + fd = self._open_conf(file,';') + fd.write(self.zone_entete % \ + { 'zone' : zone_reverse, 'serveur_autoritaire' : self.DELEG[self.zone_multicast][0][0:-1] , 'serial' : serial } ) + fd.write('\n') + fd.write(DNS) + fd.write(lignes_r) + fd.close() + + def gen_slave(self) : """ Génération du fichier de config de zone pour les esclaves """ zones = self.zones_direct @@ -477,6 +526,13 @@ if __name__ == '__main__' : print "Ce serveur est également serveur maitre, mais la reconfiguration du DNS maitre se fait par generate." elif hostname == short_name(dns.DNSs[0]): print "Ce serveur est maître ! Utilisez generate." + elif hostname == short_name(dns.DELEG['tv.crans.org'][0][0:-1]): + c = dns() + c.gen_tv() + import subprocess + args=dns.restart_cmd.split() + p=subprocess.Popen(args,stdout=subprocess.PIPE,stderr=subprocess.PIPE) + p.communicate() elif hostname in map(lambda fullhostname : short_name(fullhostname),dns.DNSs[1:]+dns.DNSs_private): print "Ce serveur est esclave! Lancez ce script sur %s, puis lancez bcfg2 ici" % bcfg2_main else: