Rediriger un port vers une autre IP:port

Hello everybody, j’aimerai savoir comment l’on peut faire pour rediriger le flux arrivant sur un serveur xxx.xxx.xxx.xxx:123 (Exemple factice) vers un autre serveur non local xxx.xxx.xxx.xxx:456 (ports et IP différentes),

Je maitrise par encore totalement IPTable, et le DNS ne sert a rien dans ce cas la…

Ce serait pour un projet de serveur Minecraft, le serveur est heberger chez un hebergeur, avec une IP du type xxx.xxx.xxx.xxx:8213 et mon serveur a moi servirait de passerelle qui reçoit les paquet et les route via cette addresse example.example.com:25565

Merci d’avance :stuck_out_tongue:

iptables fait cela très bien, mais avant de le faire, réfléchis tout de même:

  • Tu vas doubler la latence de la transmission (en gros de 30-35ms à 65-70ms, très jouable dans le premier cas et gênant dans le deuxième).
  • Alors que l’intérêt d’un dédié est de bénéficier d’une bande passante performante insensible aux circonstances extérieures ou presque, tu vas être soumis à ta connexion, donc dès que tu chargeras un truc, dès que ta ligne aura un trou, ton serveur sera injouable.
  • Tu auras une latence divisé par 2 et sera favorisé ce qui choquera ton sens éthique.

Bref, si tu veux personnaliser ton serveur, le mieux est d’entrer l’IP du serveur dédié dans le DNS de ton domaine.

Envoie quand même les commandes IPTable s’il te plait, mais logiquement ce n’est pas censé doubler la latence étant donner que les deux serveurs ont de bon débit, mais existe-t-il pas un moyen au lieu de router, de dire que (comme le fait un DNS) si tu demande xxx.xxx.xxx.xxx:25565/example.example.com:25565 tu doit enfaite envoyer a xxx.xxx.xxx.xxx:8123 ?

Et je me rend compte que c’est ce que fait les système anti ddos du genre Arbor Peakflow ?, au lieu que le paquet suive un chemin client—>serveur, il suit un chemin client------->Firewall------->serveur ?

La différence, si j’ai bien compris, est que dans ton cas le redirecteur n’est pas “physiquement” entre la source et la destination, ce qui a des conséquences (voir plus bas).

Il y a principalement deux approches pour rediriger un port.

a) Redirection NAT avec iptables
Iptables modifie à la volée l’adresse et le port destination des paquets IP et ces derniers sont reroutés vers la nouvelle destination. Lorsque celle-ci n’est pas locale, la machine doit être configurée en routeur (sysctl net.ipv4.ip_forward=1). Les paquets de réponse doivent suivre le chemin inverse et repasser par la machine redirectrice pour remettre l’adresse et le port source originels (routage symétrique), par conséquent si le chemin normal depuis la destination finale vers la source initiale ne passe pas par la machine redirectrice (routage asymétrique), il faut aussi modifier l’adresse source des paquets redirigés avec l’adresse de la machine redirectrice. Exemple de redirection TCP de 192.0.2.33:1234 vers 192.0.2.77:5678 :

iptables -t nat -A PREROUTING -d 192.0.2.33 -p tcp --dport 1234 -j DNAT --to 192.0.2.77:5678 iptables -t nat -A POSTROUTING -d 192.0.2.77 -p tcp --dport 5678 -j SNAT --to 192.0.2.33

b) Redirecteur/proxy/relais de port
C’est une application qui écoute sur un port, et retransmet vers une autre adresse et optionnellement un autre port. Contrairement à la redirection NAT, d’un point de vue réseau il y a deux flux distincts, un entre la source et le redirecteur et un entre le redirecteur et le serveur final. Donc pas besoin de configurer la machine en routeur. L’adresse source des paquets redirigés est forcément l’adresse de la machine redirectrice ; l’adresse et le port source originels ne sont pas visibles par le serveur final.

Exemples de paquets utilisables :
rinetd | socat | redir | 6tunnel | stone | simpleproxy (redirecteur TCP)
socat | stone (redirecteur UDP)
6tunnel (redirecteur TCP IPv4 <-> IPv6)

Si le serveur final doit voir l’adresse source originelle, alors il faut utiliser le NAT d’iptables en combinaison avec un tunnel et du routage avancé entre le redirecteur et le serveur final, ce qui n’est pas transparent pour ce dernier.

Pour mon cas l’utilité serait d’utiliser le NAT IPTable, car comme sa mon serveur voit l’IP du client (donc possibilité de BAN IP les méchant joueurs) mais le Client ne connait pas la vrai IP du serveur et tout ce qu’il lui envoit sera router vers lui, est-ce que je peut appliquer a mon routeur un Anti-DDOS, ou les paquet seront juste rediriger et passeront a travers celui-ci ???

“ton serveur” = le serveur final ? Dans ce cas, comme je l’ai déjà écrit, ce n’est possible (sans utiliser de tunnel) que si le redirecteur est sur le chemin réseau entre le serveur final et le client.

Cela dépend de ce que tu entends exactement par anti-DDoS. Par exemple avec iptables il y a divers moyens de limiter le nombre de connexions.