Come eseguire il port forwarding / reindirizzamento su Debian?


12

Ho due domande

Domanda 1: La mia macchina debian ha un'interfaccia eth3 con ip 192.168.57.28. Se qualcuno tenta di connettersi a 192.168.57.28:1234 come posso reindirizzare la richiesta su un altro computer: 192.168.57.25:80?

Domanda 2: Se la mia macchina debian ha due interfacce: eth3 con 192.168.57.28 e ppp0 con un po 'di IP dinamico e qualcuno tenta di connettersi tramite ppp0 sulla porta 1234, come posso reindirizzare la richiesta a 192.168.57.25:80?

Ho provato questo:

$ 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

ma non funziona.

Risposte:


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

Il primo specifica che tutte le connessioni tcp in entrata alla porta 1234 devono essere inviate alla porta 80 della macchina interna 192.168.57.25. Questa regola da sola non completa il lavoro perché iptables nega tutte le connessioni in entrata. Quindi accettiamo la connessione in entrata alla porta 1234 da eth3 che si connette a Internet con l'IP pubblico dalla seconda regola. Aggiungiamo la seconda regola nella catena FORWARD per consentire l'inoltro dei pacchetti alla porta 80 di 192.168.57.25.

EDIT: aggiunto POSTROUTING.

Per tenere traccia della connessione. altrimenti l'host esterno vedrebbe l'IP interno 192.168.57.25 di cui non ha idea.

EDIT2: Ho appena avuto il suggerimento che dovrebbe essere - a destinazione invece di - a (sry)


Ho provato il tuo suggerimento, ma non funziona. Posso navigare a 192.168.57.25 e la pagina Web ritorna, ma la navigazione a 192.168.57.28:1234 non funziona.
Dánjal Salberg Adlersson,

@ DánjalSalbergAdlersson Aggiornato il mio post (perso qualcosa. Sry.)
Daywalker

3
Ho provato il tuo suggerimento, ma non ha funzionato. Poi cambio per ultimo a questo: iptables -A POSTROUTING -t nat -j MASQUERADE, quindi ha funzionato!
Dánjal Salberg Adlersson,

8

Grazie a Daywalker e Dánjal Salberg Adlersson. Dopo ore di imprecazioni, il port forwarding con iptables funziona finalmente. (testato su 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

c'è qualche motivo per cui "-s 192.168.57.25" è stato omesso dalla linea POSTROUTING?
edwardsmarkf,

anche "-o eth3" omesso
edwardsmarkf il

vedo -s e -o sulla riga POSTROUTING sembra essere facoltativo. qualche idea sull'uso di SSL? ho fatto la domanda qui, facendo riferimento alla tua sceneggiatura: superuser.com/questions/1387902/…
edwardsmarkf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.