web-dev-qa-db-fra.com

Iptables - port à une autre adresse IP & Port (de l'intérieur)

J'ai actuellement un NAS BOX exécutée sous le port 80. Pour accéder au NAS de l'extérieur, j'ai mappé le port 8080 au port 80 sur le NAS comme suit:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80

Cela fonctionne comme un charme. Toutefois, cela ne fonctionne que si j'accède au site Web de l'extérieur du réseau (au travail, à une maison différente, etc.). Alors quand je tape mywebsite.com:8080, Iptables font le travail correctement et tout fonctionne bien.

Maintenant, le problème que j'ai, comment puis-je rediriger ce port de l'intérieur du réseau? Mon nom de domaine mywebsite.com Pointez sur mon routeur (mon serveur Linux) de l'intérieur (10.32.25.1) mais je souhaite rediriger le port 8080 du port 80 sur 10.32.25.2 de l'intérieur.

N'importe quel indice?

Éditer # 1

Tentative d'aider à faciliter cette question que je pose ce diagramme ensemble. S'il vous plaît n'hésitez pas à mettre à jour s'il est incorrect ou déforme ce que vous recherchez.

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
 '-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|
10
David Bélanger

J'ai finalement trouvé comment. Tout d'abord, j'ai dû ajouter -i eth1 à ma règle "extérieure" (ETH1 est mon WAN). J'ai aussi besoin d'ajouter deux autres règles. Ici à la fin ce que je suis venu avec:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE
13
David Bélanger

Vous avez également oublié de mentionner que le transfert de paquetage doit être activé pour pouvoir effectuer la destination NAT. Par défaut, il est généralement désactivé, de sorte que les règles IPTABLES ne fonctionnent pas. Il peut être activé en émettant:

echo 1 > /proc/sys/net/ipv4/ip_forward
4
Dmitriusan

D'abord permettre le transfert avec

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

Puis définissez des règles iptables avec

IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE

Vous pouvez mettre ces lignes dans /etc/rc.local par exemple. Remarque: Étant donné que Debian Jessie l'oblige à exécuter et activé le service RC.Local via

systemctl enable rc-local.service
3
rubo77

Vous devez d'abord vérifier que vous avez activé le transfert:

cat /proc/sys/net/ipv4/ip_forward

Si non 1, Cours echo 1 > /proc/sys/net/ipv4/ip_forward.

Si vous souhaitez frapper le trafic 10.32.25.1 sur le port 80 et 443 pour être transféré à 10.32.25.2's 80Port, vous devez utiliser la règle ci-dessous:

iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80
0
balon