Comment faire la redirection / redirection de port sur Debian?

12

J'ai deux questions.

Question 1: ma machine Debian a une interface eth3 avec l'ip 192.168.57.28. Si quelqu'un essaie de se connecter à 192.168.57.28:1234, comment rediriger la demande vers une autre machine: 192.168.57.25:80?

Question 2: Si ma machine Debian a deux interfaces: eth3 avec 192.168.57.28 et ppp0 avec une IP dynamique et que quelqu'un essaie de se connecter via ppp0 sur le port 1234, comment puis-je rediriger la demande vers 192.168.57.25:80?

J'ai essayé ceci:

$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward

mais ça ne marche pas.

Dánjal Salberg Adlersson
la source

Réponses:

12
iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE

Le premier spécifie que toutes les connexions TCP entrantes au port 1234 doivent être envoyées au port 80 de la machine interne 192.168.57.25. Cette règle à elle seule ne termine pas le travail car iptables refuse toutes les connexions entrantes. Ensuite, nous acceptons la connexion entrante au port 1234 de eth3 qui se connecte à Internet avec l'adresse IP publique par la deuxième règle. Nous ajoutons la deuxième règle dans la chaîne FORWARD pour permettre le transfert des paquets vers le port 80 de 192.168.57.25.

EDIT: POSTROUTING ajouté.

Pour garder une trace de la connexion. sinon, l'hôte extérieur verrait l'IP interne 192.168.57.25 dont il n'a aucune idée.

EDIT2: Je viens de comprendre que ce devrait être --to-destination au lieu de --to (sry)

Gardien de jour
la source
J'ai essayé votre suggestion, mais elle ne fonctionne pas. Je peux naviguer jusqu'à 192.168.57.25 et la page Web revient, mais la navigation vers 192.168.57.28:1234 ne fonctionne pas.
Dánjal Salberg Adlersson
@ DánjalSalbergAdlersson Mis à jour mon message (quelque chose a raté. Sry.)
Daywalker
3
J'ai essayé votre suggestion, mais cela n'a pas fonctionné. Ensuite, je change pour le dernier en ceci: iptables -A POSTROUTING -t nat -j MASQUERADE, alors cela a fonctionné!
Dánjal Salberg Adlersson
8

Merci à Daywalker et Dánjal Salberg Adlersson. Après des heures de prestation de serment, la redirection de port avec iptables fonctionne enfin. (testé sur Debian)

bash-script

#!/bin/bash

IPTBL=/sbin/iptables

IF_IN=eth0
PORT_IN=40022

IP_OUT=172.16.93.128
PORT_OUT=22

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE
scotty86
la source
y a-t-il une raison pour laquelle "-s 192.168.57.25" a été omis de la ligne POSTROUTING?
edwardsmarkf
également "-o eth3" omis
edwardsmarkf
Je vois que les -s et -o sur la ligne POSTROUTING semblent être facultatifs. des réflexions sur l'utilisation de SSL? j'ai posé la question ici, en référençant votre script: superuser.com/questions/1387902/…
edwardsmarkf