Commit df3adf07 authored by Gabriel Detraz's avatar Gabriel Detraz

Les plages d'ip de nat sont en variables de conf

parent 7a3e46c6
......@@ -10,6 +10,7 @@ from .feries import is_ferie
dev = {
'odlyd': {
'out' : 'eth1',
'zayo' : 'eth1.26',
'wifi' : 'eth0.3',
'fil' : 'eth0.1',
'app' : 'eth0.21',
......@@ -19,6 +20,7 @@ dev = {
},
'sable': {
'out' : 'eth1',
'zayo' : 'eth1.26',
'wifi' : 'eth0.3',
'fil' : 'eth0.1',
'app' : 'eth0.21',
......@@ -55,10 +57,6 @@ nat_source = {
'odlyd' : '138.231.136.45',
'sable' : '138.231.136.44'
},
'federez' : {
'odlyd' : '138.231.136.78',
'sable' : '138.231.136.77'
},
}
### Role des routeurs
......@@ -142,3 +140,12 @@ srv_ports_default = {
'output' : []
}
}
######### NAT ################
### Indiquer ici OBLIGATOIREMENT un /24 pub
wifi_nat_pub_ip_plage = '185.230.76.0/24'
### Indiquer ici OBLIGATOIREMENT un /16 privé
wifi_nat_prive_ip_plage = '10.53.0.0/16'
......@@ -359,21 +359,27 @@ class firewall(base.firewall_routeur):
return chain
def connexion_wifinew(self, table=None, apply=False):
"""PNAT le vlan 22 WiFi New par connexion Zayo"""
chain = 'CONNEXION-NEW'
"""PNAT le vlan 22 WiFi New par connexion Zayo
Le nat est effectué sur une plage de 2000 ports pour les ip allant de 0 à 249, puis de 1000 de 250 à 255
Ainsi chaque ip publique nat 25 ip privées (60000 - 10000)/2, car les 10000 premiers ports sont réservés
Avec 10 ip publique on nat donc 255 ip privées, les 5 dernières étant natées sur 1000 ports sur les ports
60000 à 65535 de la dernière ip publique"""
chain = 'CONNEXION-WIFI-NEW'
if table == 'nat':
pretty_print(table, chain)
wifi_nat_pub_ip_plage = base.config.firewall.wifi_nat_pub_ip_plage
wifi_nat_prive_ip_plage = base.config.firewall.wifi_nat_prive_ip_plage
for nat_ip_range in range(1, 26):
range_name = 'nat53_' + str("%02d" % nat_ip_range )
self.add(table, chain, '-s 10.53.' + str(nat_ip_range) + '.0/24 -j ' + range_name)
range_name = 'nat' + wifi_nat_prive_ip_plage.split('.')[1] + '_' + str("%02d" % nat_ip_range )
self.add(table, chain, '-s ' + '.'.join(wifi_nat_prive_ip_plage.split('.')[:2]) + '.' + str(nat_ip_range) + '.0/24 -j ' + range_name)
for nat_ip_range in range(1, 26):
range_name = 'nat53_' + str("%02d" % nat_ip_range)
range_name = 'nat' + wifi_nat_prive_ip_plage.split('.')[1] + '_' + str("%02d" % nat_ip_range)
for nat_ip_subrange in range(16):
subrange_name = range_name + '_' + str(hex(nat_ip_subrange)[2:])
self.add(table, range_name, '-s 10.53.' + str(nat_ip_range) + '.' + str(nat_ip_subrange*16) + '/28 -j ' + subrange_name)
self.add(table, range_name, '-s ' + '.'.join(wifi_nat_prive_ip_plage.split('.')[:2]) + '.' + str(nat_ip_range) + '.' + str(nat_ip_subrange*16) + '/28 -j ' + subrange_name)
for nat_private_ip in range(256):
ip_src = '10.53.' + str(nat_ip_range) + '.' + str(nat_private_ip) + '/32'
ip_src = '.'.join(wifi_nat_prive_ip_plage.split('.')[:2]) + '.' + str(nat_ip_range) + '.' + str(nat_private_ip) + '/32'
ip_nat = '185.230.76.' + str(10*(nat_ip_range - 1) + nat_private_ip/25)
# Ip 0 à 249 : on nat sur une plage de 2000 ports
......@@ -396,16 +402,16 @@ class firewall(base.firewall_routeur):
self.add(table, subrange_name, '-s %s -o %s -p tcp -j SNAT --to-source %s' % (ip_src, dev[dev_key], ip_nat + ':' + str(port_low) + '-' + str(port_high)))
self.add(table, subrange_name, '-s %s -o %s -p udp -j SNAT --to-source %s' % (ip_src, dev[dev_key], ip_nat + ':' + str(port_low) + '-' + str(port_high)))
# On nat tout ce qui match dans les règles et qui n'est pas du tcp/udp derrière odlyd
# On nat tout ce qui match dans les règles et qui n'est pas du tcp/udp derrière la première ip publique unused (25*10) + 1
# Ne pas oublier de loguer ce qui sort de cette ip
for dev_key in ['zayo', 'fil', 'wifi']:
self.add(table, chain, '-s 10.53.0.0/16 -o %s -j SNAT --to-source 185.230.76.250' % (dev[dev_key],))
self.add(table, chain, '-s ' + wifi_nat_prive_ip_plage + ' -o %s -j SNAT --to-source ' % (dev[dev_key],) + '.'.join(wifi_nat_pub_ip_plage.split('.')[:3]) + '.250')
print OK
if table == 'filter':
pretty_print(table, chain)
for net in base.config.NETs['federez']:
self.add(table, chain, '-s %s -j ACCEPT' % net)
self.add(table, chain, '-d %s -j ACCEPT' % net)
self.add(table, chain, '-s %s -j ACCEPT' % base.config.firewall.wifi_nat_prive_ip_plage)
self.add(table, chain, '-d %s -j ACCEPT' % base.config.firewall.wifi_nat_prive_ip_plage)
print OK
if apply:
......@@ -616,7 +622,6 @@ class firewall(base.firewall_routeur):
debit_max = base.config.firewall.debit_max
bl_upload_debit_max = base.config.firewall.bl_upload_debit_max
appt_upload_max = base.config.firewall.appt_upload_max
federez_upload_max = base.config.firewall.federez_upload_max
uplink_speed = '1024mbit'
......@@ -702,30 +707,6 @@ class firewall(base.firewall_routeur):
utils.tc('qdisc add dev %s parent 1:3 '
'handle 3: sfq perturb 10' % dev[int_key])
# Class du vlan wifi federez, on bride l'upload/download, à 10 mbytes/sec
for int_key in ['federez']:
try:
utils.tc('qdisc del dev %s root' % dev[int_key])
except utils.TcError:
pass
utils.tc('qdisc add dev %s root handle 1: htb r2q 1' % dev[int_key])
utils.tc("class add dev %s parent 1: classid 1:1 "
"htb rate %smbps ceil %smbps" % (dev[int_key], federez_upload_max, federez_upload_max))
# Classe pour l'upload wifi federez
utils.tc("class add dev %s parent 1:1 classid 1:4 "
"htb rate %smbps ceil %smbps" % (dev[int_key], federez_upload_max, federez_upload_max))
utils.tc('qdisc add dev %s parent 1:4 '
'handle 2: sfq perturb 10' % dev[int_key])
# Classe pour le download wifi federez
utils.tc("class add dev %s parent 1: classid 1:5 "
"htb rate %smbit ceil %smbit" % (dev[int_key], debit_max['total']/10, debit_max['total']/2))
utils.tc('qdisc add dev %s parent 1:5 '
'handle 3: sfq perturb 10' % dev[int_key])
print OK
if apply:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment