redirection port iptables Le sujet est résolu

Demande d'aide : c'est ici.
Répondre
crashcoq
Membre
Membre
Messages : 22
Inscription : 07 oct. 2018, 21:50
Status : Hors-ligne

Bonjour

J'utilise asterisk et le logiciel pjsip sous python pour créer un interphone vidéo.
En local et sur le port 5060, cela fonctionne parfaitement.

Mon problème:
SFR bloque le port 5060 pour utiliser le SIP pour sa box.
PJSIP n'est pas configurable sur le port client et reste en 5060
PJSIP et asterisk sont sur la même machine en local
le port 5060 ne doit pas se "balader en dehors du raspberry" sinon plantage aléatoire de la box ...

Je souhaite effectuer une redirection du port 5058 (mon port externe sip + réseau local) vers mon raspberry (asterisk+pjsip) sur le port 5060 en local.
par contre le port 5060 ne doit etre que local en machine

J'ai ecris ceci mais cela ne fonctionne pas ...
iptables sur le raspberry

Code : Tout sélectionner

# routage local sip 5060 vers 5058 sauf localhost
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5058 -j REDIRECT --to-port 5060
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 5058 -j REDIRECT --to-port 5060
iptables -t nat -A PREROUTING -j DNAT -i eth0 -p udp --dport 5058 --to-destination 127.0.0.1:5060
iptables -t nat -I OUTPUT -p udp -o eth0 --dport 5060 -j REDIRECT --to-ports 5058
iptables -A OUTPUT -p udp --dport 5060 -j DROP
Quelqu'un peut-il m'aider?

Merci d'avance
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5870
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Si je comprends bien ton problème, tout doit rester en local sur le RPI. Je ne vois pas le rapport entre les port du RPI et celui de la box.
Si tu mets comme adresse pour asterix et le client "localhost", la box n'a rien à voir là dedans puisque rien ne sort du RPI.
Maintenant si tu veux router un port externe internet vers un port de ton RPI, c'est au niveau de la box que ça se passe.
Ou alors je n'ai pas compris ton problème.
Tu n'as pas un routeur entre ta box et ton LAN ?
crashcoq
Membre
Membre
Messages : 22
Inscription : 07 oct. 2018, 21:50
Status : Hors-ligne

Bonjour

Merci de m'avoir répondu
Asterisk a bien le port ouvert en 5060
Le client zip sur le rapsberry (qui contient aussi asterisk) va chercher le client en local host
Cependant asterisk lance des trames en udp 5060 sur tout le réseau.

Je me suis mal exprimé.
Mon projet fonctionne très bien en 5058 avec asterisk et des client sip même sur internet, donc ma partie routage fonctionne bien, la config est aussi ok
Mon problème c'est que tout ce qui rentre et qui sort du raspberry doit venir du port 5058 sur eth0 et être converti côté applicatif en 5060.
Rien ne doit sortir du raspberry en udp 5060.

Pour résumé

Asterisk en 5060 local host <-> client zip en 5060 localhost
Routage 5058 vers 5060 entrant pour eth0
Routage 5060 vers 5058 sortant pour eth0
Blocage du port 5060 sortant vers 5060

J'espère que j'ai tout résumé
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5870
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

si je résume, tu veux que le port 5060 sortant de localhost soit routé vers le 5860 entrant de 5058 eth0. J'ai jamais fait ça.
J'aurais abordé le problème différemment.
Asterix en ecoute sur localhost:5058
routage de localhost:50560 vers localhost:5058
routage de eth0:5060 vers localhost :5058
crashcoq
Membre
Membre
Messages : 22
Inscription : 07 oct. 2018, 21:50
Status : Hors-ligne

J'ai voulu faire ceci mais ça ne marche pas non plus, pjsip ne fonctionne pas du tout

Asterix en ecoute sur localhost:5058
routage de localhost:5060 vers localhost:5058

Juste 2 réglés me suffit dans ce cas mais je bute quelques part ...
Et je sais que pjsip est capricieux aussi ...
crashcoq
Membre
Membre
Messages : 22
Inscription : 07 oct. 2018, 21:50
Status : Hors-ligne

Ce que je peux confirmer c'est que tout sur le port 5060 avec une freebox ca fonctionne nikel
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5870
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Les box sont de très mauvais routeurs, et en plus, ils font des évolutions que tu ne maitrises pas.
Perso je les met en bridge et utilise un vrai routeur d'une centaine d'euros. Je peux faire les redirections de port que je veux, y compris vers des sosus réseaux (j'ai un réseau "maison", et un réseau "garage" reliés en wifi)
crashcoq
Membre
Membre
Messages : 22
Inscription : 07 oct. 2018, 21:50
Status : Hors-ligne

Je veux bien ta solution mais pour l'instant j'essaie de trouver une solution avec jetables
Et en plus cela me permettrai de comprendre mon erreur car j'ai du mal à comprendre tous les types de routage
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5870
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Attends une réponse de quelqu'un de plus expérimenté avec iptable, ça doit être faisable comme tu le demandes.
Si tu veux faciliter la taches pour comprendre ton besoin, un petit schéma serait plus aisé à comprendre, et attirerai plus de réponses.
crashcoq
Membre
Membre
Messages : 22
Inscription : 07 oct. 2018, 21:50
Status : Hors-ligne

Voilà un petit dessin
J'espère que ça sera plus compréhensible
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5870
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Un truc apparaît clairement: ton astérisk est connecté à 2 interfaces réseau:
- localhost:5060
-eth0: 5060(que tu routes via iptable vers eth0:5068)

Il faut vérifier que ton astérisk est bien configuré pour écouter sur ces 2 interfaces.
et du coup, tu pourrais le faire écouter directement sur eth0:5058, sans avoir besoin de redirection.
crashcoq
Membre
Membre
Messages : 22
Inscription : 07 oct. 2018, 21:50
Status : Hors-ligne

Si tu as une astuce, je suis preneur
J'ai rien trouvé dans le fichier sip.conf qui me permettra de ne faire
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5870
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

D'aprés un forum asterisk:
If you expect different ports on different interfaces, you have setup more advanced(and much more complex) sip proxy, like opensips/kamailio
crashcoq
Membre
Membre
Messages : 22
Inscription : 07 oct. 2018, 21:50
Status : Hors-ligne

Merci pour l'info, je vais regarder ce que ca donne
PascalHambourg
Contributeur
Contributeur
Messages : 930
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

Je veux bien apporter mon aide sur iptables mais je ne suis pas sûr de comprendre les flux en jeu et s'il faut modifier le port source ou destination.

Pour remplacer le port destination 5058 par 5060 dans les paquets reçus par eth0 :

Code : Tout sélectionner

iptables -t nat -A PREROUTING -i eth0 -p udp --dport 5058 -j DNAT --to-destination :5060
Pour remplacer le port source 5060 par 5058 dans les paquets émis par eth0 :

Code : Tout sélectionner

iptables -t nat -A POSTROUTING -o eth0 -p udp --sport 5060 -j SNAT --to-source :5058
On ne peut pas bloquer les paquets émis sur eth0 avec le port source 5060 car la modification du port source se fait après le filtrage.
crashcoq
Membre
Membre
Messages : 22
Inscription : 07 oct. 2018, 21:50
Status : Hors-ligne

Bonjour

Merci pour la solution, ça fonctionne bien côté WAN mais pas sur le LAN

j'ai du rajouter cette règle en plus

Code : Tout sélectionner

iptables -t nat -I OUTPUT -p udp -o eth0 --dport 5060 -j REDIRECT --to-ports 5058
Et ça fonctionne correctement maintenant

Effectivement un REJECT DE 5060 me bloque tout

Un grand merci pour ton aide.

Ps: j'ai essayé opensips mais très complexe à mettre en oeuvre, je ne suis pas arrivé au bout
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5870
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Merci Pascal pour ton aide.
Si le probléme est résolu, merci de mettre la coche verte
PascalHambourg
Contributeur
Contributeur
Messages : 930
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

crashcoq a écrit : ça fonctionne bien côté WAN mais pas sur le LAN
j'ai du rajouter cette règle en plus

Code : Tout sélectionner

iptables -t nat -I OUTPUT -p udp -o eth0 --dport 5060 -j REDIRECT --to-ports 5058
Cela confirme que je n'ai pas compris quels sont les flux en présence. Quels sont les flux sur le LAN ? Ils ne sont pas visibles sur ton dessin.

Je ne comprends pas non plus l'objectif de cette règle : elle redirige les flux sortant par eth0 à destination du port 5060 d'une autre machine vers le port 5058 du Raspberry lui-même (REDIRECT ne fait pas que modifier le port destination mais aussi l'adresse destination qui est remplacée par celle de l'interface). Mais rien n'écoute sur ce port puisque si j'ai bien compris Asterisk et le client SIP utilisent tous les deux le port 5060. Je ne vois aucune logique. Est-ce un moyen détourné pour empêcher le Raspberry d'émettre des paquets UDP à destination du port 5060 sur le LAN ? Si oui, pour quelle raison ?
crashcoq
Membre
Membre
Messages : 22
Inscription : 07 oct. 2018, 21:50
Status : Hors-ligne

Si si l écoute côté LAN et WAN ne se fait que sur le port 5058
Le port 5060 est interne au raspberry entre asterisk et le client sip.
Le reste, entrant et sortant vers et depuis eth0 se fait uniquement sur le port 5058
PascalHambourg
Contributeur
Contributeur
Messages : 930
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

La règle iptables redirige directement vers le port interne 5058 par l'interface de loopback. Il n'y aura pas de redirection supplémentaire vers le port interne 5060.

Sans la règle, qu'est-ce qui se passe et que tu ne veux pas, ou ne se passe pas et que tu veux ?
Répondre