crans_bcfg2/Python/etc/network/interfaces
2014-09-01 00:43:30 +02:00

208 lines
6 KiB
Python

# -*- coding: utf-8; mode: python -*-
include("ip")
include("arpwatch")
info["owner"] = "root"
info["group"] = "root"
info["perms"] = 0644
import config.dns
header("""
Les modifications locales sont a mettre dans le fichier /etc/network/interfaces.local
Voir http://wiki.crans.org/CransTechnique/Bcfg2/... pour plus d'explications.
""")
configured_ifaces=[]
def dev(interface, mode, additionnals=[]):
"""Generation de la conf d'une interface:
- additionnals contient des lignes a mettre en plus a la definition"""
configured_ifaces.append(interface)
if mode == "pub":
print """auto %(interface)s
iface %(interface)s inet static
address %(ip)s
network 138.231.136.0
netmask 255.255.248.0
broadcast 138.231.143.255
mtu 1496
gateway 138.231.136.4
dns-nameservers %(nameservers)s
dns-search crans.org""" % { 'interface': interface, 'ip': pubip(), 'nameservers': ' '.join(config.dns.recursiv['fil']) }
for line in additionnals:
print " ", line
print
pub6(interface)
elif mode == "wifi":
print """auto %(interface)s
iface %(interface)s inet static
address %(ip)s
network 138.231.144.0
netmask 255.255.248.0
broadcast 138.231.151.255
mtu 1496
dns-nameservers %(nameservers)s
dns-search wifi.crans.org""" % { 'interface': interface, 'ip': wifiip(), 'nameservers': ' '.join(config.dns.recursiv['wifi']) }
for line in additionnals:
print " ", line
print
elif mode == "adm":
print """auto %(interface)s
iface %(interface)s inet static
address %(ip)s
network 10.231.136.0
netmask 255.255.255.0
broadcast 10.231.136.255
mtu 1496
dns-nameservers %(nameservers)s
dns-search adm.crans.org""" % { 'interface': interface, 'ip': admip(), 'nameservers': ' '.join(config.dns.recursiv['adm']) }
for line in additionnals:
print " ", line
print
adm6(interface)
elif mode == "radin":
print """auto %(interface)s
iface %(interface)s inet static
address %(ip)s
network 10.42.0.0
netmask 255.255.0.0
broadcast 10.42.255.255
mtu 1496""" % { 'interface': interface, 'ip': radinip() }
print
radin6(interface)
elif mode == "accueil":
print """auto %(interface)s
iface %(interface)s inet static
address %(ip)s
network 10.51.0.0
netmask 255.255.0.0
broadcast 10.51.255.255
mtu 1496""" % { 'interface': interface, 'ip': accueilip() }
elif mode == "ens":
print """auto %(interface)s
iface %(interface)s inet static
address %(ip)s
network 10.2.9.0
netmask 255.255.255.0
broadcast 10.2.9.255
mtu 1496""" % { 'interface': interface, 'ip': appt_ens_ip() }
elif mode == "isolement":
print """auto %(interface)s
iface %(interface)s inet static
address %(ip)s
network 10.52.0.0
netmask 255.255.0.0
broadcast 10.52.255.255
mtu 1496""" % { 'interface': interface, 'ip': isolementip() }
elif mode == "manuel":
print """auto %(interface)s
iface %(interface)s inet static""" % { 'interface': interface }
elif mode == "vide":
try:
iface, vlan = interface.split('.')
except ValueError:
vlan = None
if vlan:
print """auto %(interface)s
iface %(interface)s inet manual
pre-up vconfig add %(iface)s %(vlan)s
post-down vconfig rem %(iface)s.%(vlan)s
up ip l set %(interface)s up
down ip l set %(interface)s down""" % { 'interface': interface, 'iface':iface,'vlan':vlan }
else:
print """auto %(interface)s
iface %(interface)s inet manual
up ip l set %(interface)s up
down ip l set %(interface)s down""" % { 'interface': interface }
else:
raise NotImplementedError, "Mode de reseau inconnu : %s" % mode
if mode != "pub" and mode != "adm" and mode != "wifi" :
for line in additionnals:
print " ", line
print
# Definitions communes
print """auto lo
iface lo inet loopback
"""
# Pour arpwatch, on surveille nos réseaux
def otherlisteners():
print "#Interfaces d'ecoute restantes pour arpwatch "
for vlan in watched_vlans:
if vlan == 1:
iface = 'eth0'
else:
iface = 'eth0.%d' % vlan
if not iface in configured_ifaces:
dev(iface,'vide')
def pubip6(If):
if len(If_Mac[If].split(':'))<4: alt = ':'
else: alt = ''
return "2a01:240:fe3d:4:" + alt + If_Mac[If]
def admip6(If):
if len(If_Mac[If].split(':'))<4: alt = ':'
else: alt = ''
return "2a01:240:fe3d:c804:" + alt + If_Mac[If]
def radinip6(If):
if len(If_Mac[If].split(':'))<4: alt = ':'
else: alt = ''
return "2001:470:c8b9:a4:" + alt + If_Mac[If]
def pub6(interface, mode = 'serveur'):
""" fonction permettant d'ajouter une adressse ipv6 a l'interface donnee en argument.
Le mode permet de faire la distinction entre les simples serveurs et les routeurs.
"""
print """iface %(interface)s inet6 static
address %(ip6)s
netmask 64""" % { 'interface': interface, 'ip6': pubip6(interface) }
if mode == 'serveur':
print ' gateway fe80::1'
elif mode == 'routeur':
# Le routeur est le ::1 du réseau
add_ip = ['2a01:240:fe3d:4::1/64', 'fe80::1/64']
for ip in add_ip:
print ' up ip a add %s dev $IFACE' % ip
print ' down ip a delete %s dev $IFACE' % ip
print ' up /sbin/sysctl net/ipv6/conf/$IFACE/autoconf=0'
print
def adm6(interface):
print """iface %(interface)s inet6 static
address %(ip6)s
netmask 64""" % { 'interface': interface, 'ip6': admip6(interface) }
print
def radin6(interface):
print """iface %(interface)s inet6 static
address %(ip6)s
netmask 64""" % { 'interface': interface, 'ip6': radinip6(interface) }
print
Probe_Mac = metadata.Probes["mac"].split('\n')
If_Mac = dict(zip(Probe_Mac[:-1:2], Probe_Mac[1::2]))
exec(str(metadata.Probes["interfaces_local"]))