===== Network Address Translation =====
Le NAT est un moyen de faire communiquer plusieurs appareils avec une ip différente avec le monde extérieur en utilisant tous la même adresse IP.
Combinez ceci avec les plages d'IP privées et vous obtenez un moyen d'obtenir plus d'IP que ce qu'il y a de disponible. C'est pour ça que l'on a tous une Box en 192.168.1.0/24 chez nous.
==== Comment ça marche ====
La machine mettant en place le NAT sert de routeur. Elle possède une adresse de chaque coté du NAT. Elle fait correspondre à un couple adresse IP / port du coté intérieur un port du côté extérieur.
Ce procédé est un peu batard car il mélange des protocoles de couche 3 et de couche 4. Il est néanmoins très largement utilisé, notamment pour répondre à la pénurie d'adresse IPV4.
==== À MiNET ====
À MiNET, nous utilisons du NAT pour les équipements wifi des adhérents. De l'extérieur, ils apparaissent comme une seule et même machine. Ce sont les [[wiki:wifi:nat:passerellewifi|passerelles wifis]] **passerellewifi1** et **passerellewifi2** qui réalisent ce NAT.
==== Comment il est mit en place ? ====
Il s'agit de règles **iptables**. Vous les trouverez dans ''/etc/iptables/rules.v4'' sur les passerelles :
# Generated by iptables-save v1.6.0 on Tue May 8 20:13:05 2018
*filter
:INPUT DROP [93:12277]
:FORWARD DROP [6:312]
:OUTPUT ACCEPT [3970:680545]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -m comment --comment "Accept connexions already established" -j ACCEPT
-A INPUT -i ens18 -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -m comment --comment "Accept connexions already established" -j ACCEPT
-A FORWARD -j LOG --log-prefix "passerelle_wifi: "
-A FORWARD -i ens20 -o ens19 -m comment --comment "Accept traffic from vlan 10 to 2" -j ACCEPT
-A FORWARD -i ens21 -o ens19 -m comment --comment "Accept traffic from vlan 17 to 2" -j ACCEPT
-A FORWARD -i ens22 -o ens19 -m comment --comment "Accept traffic from vlan 6 to 2" -j ACCEPT
COMMIT
# Completed on Tue May 8 20:13:05 2018
# Generated by iptables-save v1.6.0 on Tue May 8 20:13:05 2018
*nat
:PREROUTING ACCEPT [91124:21246411]
:INPUT ACCEPT [517:32875]
:OUTPUT ACCEPT [55:3721]
:POSTROUTING ACCEPT [43:3001]
-A POSTROUTING -o ens19 -j MASQUERADE
COMMIT
# Completed on Tue May 8 20:13:05 2018
# Generated by iptables-save v1.6.0 on Tue May 8 20:13:05 2018
*mangle
:PREROUTING ACCEPT [6607045:6325783621]
:INPUT ACCEPT [274165:30152743]
:FORWARD ACCEPT [6300608:6281037463]
:OUTPUT ACCEPT [260390:36601676]
:POSTROUTING ACCEPT [6560822:6317629891]
COMMIT
# Completed on Tue May 8 20:13:05 2018
==== Logging ====
Comme vous avez pû le voir, nous loggons l'établissement de connexions. Le but étant de pouvoir retrouver l'IP associée à une connexion si et seulement si la justice nous le demande. Un souci demeure : le volume de log généré. Un script tourne donc toute les 10 minutes afin de :
Il s'agit de ''/root/log_mvt.sh'' :
#!/bin/bash
mv /var/log/iptables.log /tmp/logpasserelle
touch /var/log/iptables.log
/etc/init.d/rsyslog rotate
mv /tmp/logpasserelle/iptables.log /log_passerelle/Log_passerelle-$(date "+%Y%m%d-%H%M")
gzip /log_passerelle/Log_passerelle-$(date "+%Y%m%d-%H%M")
gpg -r $PSEUDAL@minet.net --encrypt --output "/log_passerelle/Log_passerelle-$(date "+%Y%m%d-%H%M").gz.gpg" "/log_passerelle/Log_passerelle-$(date "+%Y%m%d-%H%M").gz"
rm /log_passerelle/Log_passerelle-$(date "+%Y%m%d-%H%M").gz
echo "" > /var/log/messages
h
La partie suivante n'est pas mise à jour car la solution de stockage des log actuelle est temporaire
Les logs sont donc envoyés sur ''/mnt/log_proxy/NAT/'', qui correspond à ''/raidZ/log_charybde/npasserelle10/NAT'' sur Charybde.
Enfin, un deuxième script s'exécute journalierement et supprime les logs NAT vieux de plus d'un an ( en se basant sur le nom de fichier ). Il s'agit de ''/root/clean_NAT.sh''.