Bonjour

Pour montrer le problème de protocole SIP avec les routeurs nats et firewalls, j'ai implementer l'architecture réseau suivante :

- Une machine A dans un LAN privé (192.168.1.0/24), avec une adresse statique 192.168.1.10. sous debian etch 4.
-Un serveur brekeke pour SIP dans le même LAN avec une adresse statique 192.168.1.4, sous Win 7.
-une machine NF avec 2 interface représentant le NAT et Firewall en utilisant Netfilter 1.3 sous Debian 4. l'interface interne eth1 ayant l'@ 192.168.1.1, l'externe eth0 : 193.168.1.1.
-Une machine B coté public avec une adresse statique 193.168.1.11.
-Un serveur brekeke pour SIP dans le coté public avec une adresse statique 193.168.1.5, sous Win 7.
voir le schéma suivant (les serveurs ne se figurent pas) :

(A)192.168.1.10--------------------------------192.168.1.1 (NF) 193.168.1.1 --------------------------193.168.1.11( B )

J'ai spécifié les règles suivantes d'iptables (Netfilter) pour la machine NF (nat firewall) :
----------------------------------------------------------------------------------------------
#!/bin/bash
# Ce script met en place la politique de filtrage
# ----------------------------------------------------------------------
#

# On charge les modules nécessaires
modprobe ip_tables
modprobe iptable-filter
modprobe iptable-nat

# Initialisation des règles
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Politique du pare-feu
# --------------------

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

# Mise en oeuvre du routage
echo 1 > /proc/sys/net/ipv4/ip_forward

# Autorise les paquets du protocole ICMP
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT

# Regles du parefeu
# -----------------

# Autorise toute connexion deja etablie et relative
iptables -A FORWARD -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Ouverture du port 5060 pour sip
iptables -A FORWARD -p udp --dport 5060 -j ACCEPT

# Regles de NAT
# ----------------------------------------------------
# Regles de NAT sortant (partage de la connexion Internet)
# Tout ce qui sort, prend l'adresse de eth0 au passage
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -p udp --dport 5060 -j SNAT --to-source 193.168.1.1:10080

-----------------------------------------------------------------------------------------

Le problème c'est avec ces 2 règles spécifiées dans ce script pour le nat :
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
et
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -p udp --dport 5060 -j SNAT --to-source 193.168.1.1:10080

Le masquerading (masquage) ne fonctionne pas avec SIP, ni l'adresse source ni le port change dans les paquet SIP, ils sortent toujours avec leur addresse/port privé (192.168.1.4/5060), et l'appel se fait avec succès, pourquoi donc le netfilter ne les change pas en sortie de l'interface eth0 de la machine NF.

Noter que la traversée du NAT, upnp, et nat-pmp sont désactivés au niveau des deux serveurs Brekeke. le port utilisé par les clients et les serveurs est 5060.
Netfilter version 1.3, x-lite 2, Debian 4 pour les machines A et B, Win 7 Pour les serveurs Brekeke.

Ya t'ils des suggetions, S.V.P? Merci pour votre lecture et effort.