Rediriger le trafic d'une IP et d'un port vers une autre IP et un autre port

Quelque chose de très courant lorsque la gestion des serveurs redirige le trafic.

Supposons que nous ayons un serveur avec certains services en cours d'exécution, mais pour une raison quelconque, nous modifions l'un de ces services (Je ne sais pas, par exemple pop3 qui est le port 110) vers un autre serveur. La normale et la plus fréquente serait de simplement changer l'adresse IP dans l'enregistrement DNS, mais si quelqu'un utilisait l'adresse IP au lieu du sous-domaine, il sera affecté.

Que faire? ... simple, redirigez le trafic que le serveur reçoit via ce port vers un autre serveur avec le même port.

serveur-nœud-lan-ethernet

Comment commencer à rediriger le trafic?

La première chose est que nous devons avoir activé le la transmission sur le serveur, pour cela nous mettrons ce qui suit:

echo "1" > /proc/sys/net/ipv4/ip_forward

Toutes les commandes présentées dans ce tutoriel doivent être exécutées avec des privilèges administratifs, je recommande qu'elles soient exécutées directement avec l'utilisateur root.

Vous pouvez également utiliser cette autre commande, au cas où la précédente ne fonctionnerait pas pour vous (ça m'est arrivé comme ça sur un CentOS):
sysctl net.ipv4.ip_forward=1
Ensuite, nous redémarrerons le réseau:

service networking restart

Dans les distributions RPM comme CentOS et autres, ce serait:

service nertwork restart

Maintenant, nous allons passer à la chose importante, dire au serveur à travers iptables quoi rediriger:

iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>

En d'autres termes, et en suivant l'exemple que j'ai mentionné, supposons que nous voulions rediriger tout le trafic que notre serveur reçoit via le port 110 vers un autre serveur (pas: 10.10.0.2), qui recevra toujours ce trafic via 110 (c'est le même service):

iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110

Le serveur 10.10.0.2 verra que tous les paquets ou requêtes proviennent de l'IP du client, au cas où ils voudraient nager les requêtes, c'est-à-dire que le 2ème serveur voit que les requêtes arrivent avec l'IP du 1er serveur (et en le auquel on applique la redirection), ce serait aussi mettre cette deuxième ligne:

iptables -t nat -A POSTROUTING -j MASQUERADE

Quelques questions et réponses

Dans l'exemple, j'ai utilisé le même port à deux reprises (110), mais ils peuvent rediriger le trafic d'un port à un autre sans problème. Par exemple, supposons que je veuille rediriger le trafic du port 80 vers 443 sur un autre serveur, pour cela ce serait:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443

C'est iptables, ils peuvent utiliser tous les autres paramètres que nous connaissons, par exemple, si nous voulons uniquement rediriger le trafic depuis une adresse IP spécifique, il faudrait ajouter -s … Par exemple, je ne redirigerai que le trafic provenant de 10.10.0.51:

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.51 --dport 80 -j DNAT --to-destination 10.10.0.2:443

Ou tout un réseau (/ 24):

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.0/24 --dport 80 -j DNAT --to-destination 10.10.0.2:443

Nous pouvons également spécifier l'interface réseau avec -i :

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443

La fin!

Comme je l'ai déjà dit, c'est iptables, vous pouvez appliquer ce qui est déjà connu pour que le serveur fasse exactement ce que vous voulez qu'il fasse 😉

Salutations!

DedicatedServer_SubImage


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   Fer dit

    Nous pouvons également le faire à partir d'un pare-feu qui permet la redirection de port, non? (en appliquant les règles correspondantes).

    1.    KZKG ^ Gaara dit

      Oui bien sûr, au final un pare-feu comme Pfsense ou autres, utilise iptables par derrière.

      1.    chasseur dit

        Pour être exact, pfsense n'utilise pas iptables mais pf, rappelez-vous qu'il s'agit d'un bsd à l'intérieur.

        1.    KZKG ^ Gaara dit

          Oh oui, mon mal!

  2.   Nicolas dit

    Merci beaucoup pour le conseil 🙂

    J'ai quelques doutes:
    1 - Le changement est-il permanent? ou est-il perdu lors du redémarrage du serveur?
    2 - J'ai plusieurs instances (disons A, B et C) sur le même sous-réseau. Dans l'instance A, j'applique la règle pour acheminer le trafic vers une adresse IP externe, et en testant avec les boucles des instances B et C, tout fonctionne à merveille. Le problème est qu'à partir de l'instance A, cela ne fonctionne pas. J'ai essayé d'utiliser à la fois votre ip et l'interface de bouclage, et ni l'un ni l'autre ne fonctionne:
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –à destination xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –à destination xxxx: 8080

    $ curl ip-yyyy: 8080 / hello_world
    curl: (7) Échec de la connexion au port ip-yyyy 8080: connexion refusée
    $ curl localhost: 8080 / hello_world
    curl: (7) Échec de la connexion au port localhost 8080: Connexion refusée

    Une idée de ce que peut être le problème?

    1.    KZKG ^ Gaara dit

      Oui, la modification est perdue au redémarrage, vous devrez utiliser iptables-save & iptables-restore ou quelque chose comme ça pour éviter cela.
      Je n'ai pas bien compris ce que vous voulez faire, instance A?

      1.    Nicolas dit

        J'ai un serveur qui ne prend en charge que les connexions à partir d'une adresse IP particulière (serveur A), je ne peux pas ou je veux ajouter plus d'ips à la liste blanche (pour des problèmes d'évolutivité), donc je veux que tout le trafic vers le serveur externe passe par ledit serveur (A ).
        Pour une question de praticité, j'ai des configurations globales qui définissent quelle adresse IP utiliser pour chaque service, donc dans ce cas, c'est quelque chose comme "tout le monde qui veut utiliser le service externe doit utiliser IP A"
        J'ai réussi cela en utilisant la méthode de cet article, mais je rencontre le problème que lors de son application, le serveur A ne peut pas accéder au service en utilisant sa propre adresse IP (mais tous les autres serveurs le font).
        Jusqu'à présent, le mieux que j'ai trouvé a été d'ajouter le mappage dans le fichier / etc / hosts du serveur A, pointant vers l'adresse IP externe, remplaçant le paramètre global.

  3.   Braybaut dit

    Très bien, si j'ai un autre serveur de messagerie, je pourrais transférer le trafic du port 143 du serveur1 au serveur2 et les e-mails atteindront le serveur2, non?

    salutations

    1.    KZKG ^ Gaara dit

      En théorie oui, ça marche comme ça. Bien sûr, vous devez avoir le serveur de messagerie correctement installé sur le serveur2 🙂

  4.   msx dit

    Le genre de messages que nous aimons lire, merci!

  5.   Abraham Ibarra dit

    Excellent article, j'ai un projet dans lequel je travaille et je voulais vous poser une question, il existe des commutateurs industriels avec fonction NAT (je suppose qu'ils utilisent IPTables ci-dessous), pour traduire une adresse IP sans apporter de modifications à l'équipement, un exemple, j'ai un serveur 10.10.2.1 qui communique avec les ordinateurs 10.10.2.X et via le commutateur est programmé de sorte qu'un ordinateur qui a une adresse 192.168.2.4 soit réellement vu du serveur comme 10.10.2.5, cela traduit cette IP adresse à voir Des autres ordinateurs avec cette adresse, je veux le faire à partir d'un serveur avec Ubuntu ou une autre distribution, quelles seraient les règles iptables?

  6.   Kuk dit

    Très bonne info merci ^ _ ^

  7.   Yesus dit

    Bonsoir.
    J'ai un problème en essayant de faire une redirection. je m'explique:
    J'ai un serveur proxy dans Ubuntu, avec 2 cartes réseau:
    eth0 = 192.168.1.1 est connecté au reste du réseau local.
    eth1 = 192.168.2.2 est connecté au routeur.
    J'ai besoin de tout ce qui passe par eth0 pour passer par eth1, et aussi par le proxy (j'utilise Squid, dont le port par défaut est 3128), et je ne trouve pas la clé dans la configuration IPTABLES.
    Je n'ai besoin d'aucune restriction d'aucune sorte, seulement qu'un enregistrement reste dans le journal des adresses Web visitées.

    J'espère que vous pourrez m'aider car c'est une tâche assez lourde qui me préoccupe depuis quelques jours.

    Merci.

  8.   Gabriel dit

    Ami, je suis très nouveau sur les autres serveurs, je n'en ai aucune idée mais je comprends le sujet et j'apprends vite, ma question est la suivante j'ai 2 serveurs serv_1 et serv_2 que j'ai connectés au même intranet, dans ces serveurs j'ai un owncloud mis en place, je voudrais faire ce qui suit:

    qu'une certaine plage d'ips par exemple rangeip_1 lors du placement d'une ip d'accès au owncloud (ipowncloud) est dirigée vers le serv_1 et s'il s'agit d'un autre rangeip_2 placé le même ipowncloud est dirigé vers le serv_2, ceci afin que les 2 serveurs soient localisés dans deux villes différentes et les plages IP sont différentes mais elles sont toutes sur le même réseau, ce serait la première partie, la seconde serait claire est de synchroniser ces 2 serveurs pour qu'ils soient des miroirs ou qu'ils me le conseillent dans l'ordre pour optimiser la bande de largeur, s'il vous plaît, si vous allez m'expliquer comment le faire étape par étape, pas en mode super programmeur = (

  9.   Antonio Carrizosa dit

    Bonjour, excusez-moi, j'ai un switch en charge de la communication de tous les appareils qui composent mon réseau, et après cela un pare-feu et enfin la sortie Internet, ce qui se passe c'est que je souhaite que la redirection soit donnée dans le switch et n'a pas besoin d'atteindre le pare-feu sauf si le service demandé est Internet.

  10.   Jean dit

    En utilisant cette méthode, pourriez-vous rediriger HTTPS vers HTTP?

  11.   Mati dit

    Salut, c'est peut-être un peu tard, mais je voulais vous demander, comment faire pour que squid ne modifie pas l'adresse IP du client lorsque je veux me connecter à un serveur Web sur le même réseau?

  12.   lafat32 dit

    Ne me traitez pas mal pour avoir demandé. Cela peut-il être fait sous Windows?

  13.   Martin dit

    Cette information m'a été utile. Comme toujours, on peut vous faire confiance, quand je ne trouve pas quelque chose en anglais, je finis généralement par chercher en espagnol, à ces occasions, je viens presque toujours sur ce site.

  14.   Seba dit

    J'ai un routeur 4G qui est client d'un réseau que je ne gère pas (évidemment, je suis client)… ce routeur est une passerelle vers ce réseau distant via OpenVPN. De plus, ledit routeur remplit la fonction de redirection de port pour accéder au port 80 du serveur d'un de ces sous-réseaux du domaine.

    C'était la déclaration que je devais mettre dans le routeur comme règle personnalisée du pare-feu «-t nat -A POSTROUTING -j MASQUERADE»

    Merci pour l'aide!