IPTables - Porta su un altro ip e porta (dall'interno)


10

Al momento ho una scatola NAS in esecuzione sotto la porta 80. Per accedere al NAS dall'esterno, ho mappato la porta 8080 sulla porta 80 sul NAS come segue:

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

Funziona come un fascino. Tuttavia, questo funziona solo se accedo al sito Web dall'esterno della rete (al lavoro, a casa diversa, ecc.). Quindi, quando mywebsite.com:8080scrivo, IPTables fa il lavoro correttamente e tutto funziona bene.

Ora, il problema che ho è, come posso reindirizzare questa porta dall'interno della rete? Il mio nome di dominio mywebsite.compunta al mio router (il mio server Linux) dall'interno (10.32.25.1) ma voglio reindirizzare la porta 8080 alla porta 80 su 10.32.25.2 dall'interno.

Qualche idea?

Modifica n. 1

Tentando di facilitare questa domanda ho messo insieme questo diagramma. Sentiti libero di aggiornare se è errato o travisare ciò che stai cercando.

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

@slm Exactly. Non accade nulla su 10.32.25.2:8080 perché il server si trova sulla porta 80. Dall'esterno, il reindirizzamento NAT dalla porta 8080 alla porta 80 sull'IP specificato (10.32.25.2). NET -> NAT: 8080 -> 10.32.25.2:80. Ho bisogno della regola dall'interno e non so cosa mettere lì.
David Bélanger,

@slm Sì. Non so come posso ottenere qualcosa del genere. Voglio dire il 10.32.25.1:8080reindirizzamento a 10.32.25.2:80. La mia regola sopra sta funzionando dall'esterno, ma non dall'interno della mia rete. Quindi, se sono in ufficio, posso accedere al mio NAS da website.com:8080 ed è completamente trasparente. Da casa mia, website.com:8080 punta al 10.32.25.1 perché è il mio router noto anche come server Linux. Voglio reindirizzare la porta 8080 al NAS anche sulla porta 80 ma, di nuovo, in modo trasparente.
David Bélanger,

@slm Sì, va tutto bene e funziona. Voglio solo reindirizzare la porta da 10.32.25.1:8080 a 10.32.25.2:80 dalla rete interna.
David Bélanger,

menzioniamo anche un'interfaccia simile eth0 10.32.25.2, in modo da poter scrivere l'uso di iptables in base all'interfaccia in entrata
Rahul Patil,

Opps mi dispiace, ho appena visto .. hai già risolto il problema ..
Rahul Patil,

Risposte:


13

Ho finalmente trovato il modo di fare. Innanzitutto, ho dovuto aggiungere la -i eth1mia regola "esterna" (eth1 è la mia connessione WAN). Avevo anche bisogno di aggiungere altre due regole. Ecco alla fine cosa mi è venuto in mente:

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

2
La seconda regola non è necessaria, poiché la prima regola contiene già questo ...
machineaddict,

1
La prima regola limita il preroute solo se arriva sull'interfaccia eth1. La seconda regola è più generale in quanto si applica a tutte le interfacce. Attenzione ai loop!
tu-Reinstate Monica-dor duh,

4

Hai anche dimenticato di menzionare che l'inoltro dei pacchetti dovrebbe essere abilitato per poter eseguire il NAT di destinazione. Per impostazione predefinita, di solito è disattivato, quindi le regole di iptables non funzioneranno. Può essere abilitato emettendo:

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

Grazie mille per questo, mi sarei strappato i capelli per ore!
ColinM,

3

Per prima cosa consenti l'inoltro con

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

Quindi impostare le regole iptable con

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

È possibile inserire queste righe /etc/rc.localad esempio. Nota: poiché Debian jessie lo rende eseguibile e ha abilitato il servizio rc.local tramite

systemctl enable rc-local.service

0

Per prima cosa devi verificare di aver attivato l'inoltro:

cat /proc/sys/net/ipv4/ip_forward

Altrimenti 1, corri echo 1 > /proc/sys/net/ipv4/ip_forward.

Se desideri che il traffico che colpisce 10.32.25.1 sulla porta 80 e 443 sia inoltrato all'80port di 10.32.25.2, devi utilizzare la seguente regola:

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
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.