7 votes

Comment créer un proxy UDP en utilisant iptables

J'ai un serveur qui exécute un serveur UDP sur le port 50000. Ce serveur reçoit les mises à jour des clients, et renvoie les clients toutes les 5 secondes vers le socket à partir duquel ils se sont connectés.

Maintenant, je veux rediriger tout le trafic vers et depuis ce serveur UDP via un autre serveur. En fait, je veux installer un proxy transparent devant ce serveur. La raison en est que je veux pouvoir contrôler facilement quel serveur gère le trafic UDP, sans avoir besoin de modifier les paramètres DNS.

J'ai d'abord essayé d'utiliser socat pour créer ce proxy :

socat UDP-LISTEN:50000,fork UDP:myserver:50000

Mais cela semble bien fonctionner pour le trafic entrant, mais le trafic retour de mon serveur vers les clients n'atteint pas sa destination. De plus, il semble que socat crée un autre processus pour chaque connexion, ce qui fait que je risque de me retrouver avec trop de processus et des processus morts lorsque les clients se déconnectent ou changent d'IP.

J'ai réalisé que je peux utiliser la fonctionnalité NAT d'iptables pour cela, mais cela ne semble pas fonctionner pour moi. La configuration que j'ai essayée est la suivante :

sudo iptables -t nat -A PREROUTING -p udp --dport 50000 -j DNAT --to-destination myserver:50000

Mais cela ne semble pas fonctionner : je ne vois même pas les connexions sur mon serveur. Je ne sais pas si c'est dû à une mauvaise configuration ou à d'autres problèmes.

Quelques questions :

  1. Dois-je en quelque sorte redémarrer iptables une fois que j'ai ajouté la configuration nat ?
  2. Dois-je autoriser le trafic sur le port entrant ou le paramètre NAT est-il suffisant ?

MISE À JOUR : Le serveur qui gère réellement le trafic est sur une machine différente de celle sur laquelle j'essaie de configurer iptables.

0 votes

J'ai résolu un problème similaire. J'avais besoin de tunneliser le trafic UDP vers un autre serveur dans un réseau distant. J'ai essayé iptables mais la réponse ne revenait pas aux IPs des clients derrière le routeur. Cela a finalement fonctionné avec socat dans les deux sens comme prévu : socat -T15 udp-listen:24681,fork,reuseaddr udp:'123.456.789.111:24681

5voto

Khaled Points 35208

Il y a certains points que vous n'avez pas mentionnés dans votre description :

  1. Si vous faites suivre le trafic reçu par la machine iptables vers une autre. Vous devez activer la redirection IP. Voir ci-dessous pour plus de détails.
  2. Vous devez également autoriser le trafic transféré à passer. Cela peut être fait en définissant l'option FORWARD politique par défaut de la chaîne pour ACCEPT ou en autorisant un trafic spécifique (ip/port).

Pour activer le transfert d'IP, décomplétez la ligne suivante dans le fichier /etc/sysctl.conf :

net.ipv4.ip_forward=1

Alors, exécutez : sudo sysctl -p .

Ajout de règles à l'aide de iptables les ajoutera en mémoire uniquement (ils sont perdus après un redémarrage). Vous devez les enregistrer dans un fichier texte en utilisant la commande iptables-save et les restaurer si nécessaire en utilisant iptables-restore .

0 votes

D'ailleurs, utiliser le mot proxy ici ne convient pas car le serveur proxy est quelque chose de différent d'iptables.

0 votes

Est-ce que le fait de modifier les paramètres susmentionnés aura une incidence sur d'autres éléments dont je dois être conscient ?

0 votes

Je suis ouvert aux suggestions d'un autre mot :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X