J'ai installé une boîte virtuelle (avec deux adaptateurs virtuels (de type NAT)) - Hôte (Ubuntu -10.10) - Invité-Opensuse-11.4. Mon objectif est de simuler les quatre types de NAT comme suit défini ici . La simulation des différents types de NAT peut être réalisée à l'aide de Linux iptables
. Dans ces exemples, eth0 est le réseau privé et eth1 est le réseau public.
Plein cône :
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source <public ip goes here>
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination <private ip goes here>
Cône restreint :
iptables -t nat POSTROUTING -o eth1 -p tcp -j SNAT --to-source <public ip goes here>
iptables -t nat POSTROUTING -o eth1 -p udp -j SNAT --to-source <public ip goes here>
iptables -t nat PREROUTING -i eth1 -p tcp -j DNAT --to-destination <private ip goes here>
iptables -t nat PREROUTING -i eth1 -p udp -j DNAT --to-destination <private ip goes here>
iptables -A INPUT -i eth1 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth1 -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth1 -p tcp -m state --state NEW -j DROP
iptables -A INPUT -i eth1 -p udp -m state --state NEW -j DROP
Cône à port restreint :
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source <public ip goes here>
Symétrique :
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables --flush
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE --random
iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
J'ai configuré un invité OpenSuse avec deux adaptateurs virtuels, eth0 et eth1.
- eth1 avec l'adresse 10.0.3.15 / eth1:1 avec l'adresse 10.0.3.16
- eth0 avec l'adresse 10.0.2.15
Ensuite, il a exécuté le stund client/serveur...
Serveur :
eKimchi@linux-6j9k:~/sw/stun/stund> ./server -v -h 10.0.3.15 -a 10.0.3.16
Client :
eKimchi@linux-6j9k:~/sw/stun/stund> ./client -v 10.0.3.15 -i 10.0.2.15
...sur les quatre cas Il donne les mêmes résultats :
test I = 1 test II = 1 test III = 1 test I(2) = 1 is nat = 0 mapped IP same = 1 hairpin = 1 preserver port = 1 Primary : Open Return value is 0x000001
Q-1 : Si quelqu'un l'a déjà fait, il devrait se comporter comme un NAT selon la description mais nulle part il ne fonctionne comme un NAT.
Q-2 : Comment la NAT est mise en œuvre dans les routeurs domestiques (généralement avec restriction de port), mais aussi avec des règles iptables préconfigurées et un système d'exploitation Linux adapté.