IPTables - Port zu einer anderen IP & Port (von innen)

10

Ich habe derzeit eine NAS-Box unter Port 80. Um von außen auf den NAS zuzugreifen, habe ich den Port 8080 wie folgt dem Port 80 auf dem NAS zugeordnet:

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

Das funktioniert wie ein Zauber. Dies funktioniert jedoch nur, wenn ich von außerhalb des Netzwerks auf die Website zugreife (bei der Arbeit, in einem anderen Haus usw.). Wenn ich mywebsite.com:8080tippe, erledigen IPTables die Arbeit korrekt und alles funktioniert einwandfrei.

Das Problem ist nun, wie kann ich diesen Port von innerhalb des Netzwerks umleiten? Mein Domainname zeigt mywebsite.comvon innen auf meinen Router (meinen Linux-Server) (10.32.25.1), aber ich möchte Port 8080 von innen auf Port 80 auf 10.32.25.2 umleiten.

Irgendeine Ahnung?

Bearbeiten Sie # 1

Um diese Frage zu erleichtern, habe ich dieses Diagramm zusammengestellt. Bitte zögern Sie nicht zu aktualisieren, wenn es falsch ist oder falsch darstellt, wonach Sie suchen.

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
 '-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|
David Bélanger
quelle
@slm Genau. Am 10.32.25.2:8080 passiert nichts, da sich der Server auf Port 80 befindet. Von außen leitet das NAT auf der angegebenen IP-Adresse (10.32.25.2) von Port 8080 auf Port 80 um. NET -> NAT: 8080 -> 10.32.25.2:80. Ich brauche die Regel von innen und weiß nicht, was ich dort platzieren soll.
David Bélanger
@slm Ja. Ich weiß nicht, wie ich so etwas erreichen kann. Ich möchte 10.32.25.1:8080Weiterleiten an sagen 10.32.25.2:80. Meine obige Regel lautet: Arbeiten von außen, aber nicht von innen in meinem Netzwerk. Also , wenn ich im Büro bin, kann ich meine NAS aus zugreifen website.com:8080 und es ist völlig transparent. Von zu Hause aus zeigt website.com:8080 auf 10.32.25.1, da es sich um meinen Router oder Linux-Server handelt. Ich möchte den Port 8080 auch auf Port 80 zum NAS umleiten, aber wieder auf transparente Weise.
David Bélanger
@slm Ja, alles ist in Ordnung und funktioniert. Ich möchte nur Port 10.32.25.1:8080 vom internen Netzwerk auf 10.32.25.2:80 umleiten.
David Bélanger
Erwähnen Sie auch die Schnittstelle wie eth0 10.32.25.2, damit wir iptables schreiben können, die auf der eingehenden Schnittstelle basieren
Rahul Patil,
Opps sorry, ich habe gerade gesehen .. Sie lösen das Problem bereits ..
Rahul Patil

Antworten:

13

Ich habe endlich eine Anleitung gefunden. Zuerst musste ich -i eth1meine "externe" Regel ergänzen (eth1 ist meine WAN-Verbindung). Ich musste auch zwei andere Regeln hinzufügen. Hier am Ende, was ich mitgebracht habe:

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
David Bélanger
quelle
2
Die zweite Regel ist nicht notwendig, da die erste Regel bereits enthält, dass ...
machineaddict
1
Die erste Regel schränkt die Vorroute nur ein, wenn sie auf der Schnittstelle eth1 ankommt. Die zweite Regel ist allgemeiner, da sie für alle Schnittstellen gilt. Vorsicht vor Schleifen!
tu-Reinstate Monica-dor duh
4

Sie haben auch vergessen zu erwähnen, dass die Paketweiterleitung aktiviert sein sollte, um das Ziel-NAT ausführen zu können. Standardmäßig ist es normalerweise deaktiviert, sodass iptables-Regeln nicht funktionieren. Es kann aktiviert werden, indem Folgendes ausgegeben wird:

echo 1 > /proc/sys/net/ipv4/ip_forward
Dmitriusan
quelle
Vielen Dank dafür, ich hätte mir stundenlang die Haare ausgezogen!
ColinM
3

Erlauben Sie zuerst die Weiterleitung mit

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

Dann setzen Sie iptable Regeln mit

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

Sie können diese Zeilen /etc/rc.localbeispielsweise einfügen. Hinweis: Da Debian Jessie es ausführbar macht und den rc.local-Dienst über aktiviert

systemctl enable rc-local.service
rubo77
quelle
0

Zuerst müssen Sie überprüfen, ob Sie die Weiterleitung aktiviert haben:

cat /proc/sys/net/ipv4/ip_forward

Wenn nicht 1, laufen Sie echo 1 > /proc/sys/net/ipv4/ip_forward.

Wenn Sie möchten, dass Datenverkehr, der 10.32.25.1 auf Port 80 und 443 erreicht, an den 80port von 10.32.25.2 weitergeleitet wird, sollten Sie die folgende Regel verwenden:

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
Balon
quelle