Wie mache ich eine Portweiterleitung / -umleitung unter Debian?

12

Ich habe zwei Fragen.

Frage 1: Mein Debian-Computer hat die Schnittstelle eth3 mit der IP 192.168.57.28. Wenn jemand versucht, eine Verbindung zu 192.168.57.28:1234 herzustellen, wie leite ich die Anforderung auf einen anderen Computer um: 192.168.57.25:80?

Frage 2: Wenn mein Debian-Computer zwei Schnittstellen hat: eth3 mit 192.168.57.28 und ppp0 mit einer dynamischen IP und jemand versucht, eine Verbindung über ppp0 an Port 1234 herzustellen, wie leite ich die Anforderung an 192.168.57.25:80 um?

Ich habe das versucht:

$ 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

aber es funktioniert nicht.

Dánjal Salberg Adlersson
quelle

Antworten:

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

Der erste gibt an, dass alle eingehenden TCP-Verbindungen zu Port 1234 an Port 80 des internen Computers 192.168.57.25 gesendet werden sollen. Diese Regel allein schließt den Job nicht ab, da iptables alle eingehenden Verbindungen ablehnt. Dann akzeptieren wir die eingehende Verbindung zu Port 1234 von eth3, die nach der zweiten Regel mit der öffentlichen IP eine Verbindung zum Internet herstellt. Wir fügen die zweite Regel in der FORWARD-Kette hinzu, um die Weiterleitung der Pakete an Port 80 von 192.168.57.25 zu ermöglichen.

BEARBEITEN : POSTROUTING hinzugefügt.

Um die Verbindung zu verfolgen. Andernfalls würde der externe Host die interne IP 192.168.57.25 sehen, von der er keine Ahnung hat.

EDIT2: Habe gerade den Hinweis bekommen, dass es - zum Ziel statt - zum (sry) sein soll.

Daywalker
quelle
Ich habe Ihren Vorschlag ausprobiert, aber er funktioniert nicht. Ich kann zu 192.168.57.25 navigieren und die Webseite kehrt zurück, aber das Navigieren zu 192.168.57.28:1234 funktioniert nicht.
Dánjal Salberg Adlersson
@ DánjalSalbergAdlersson Aktualisierte meinen Beitrag (etwas verpasst. Sry.)
Daywalker
3
Ich habe Ihren Vorschlag ausprobiert, aber er hat nicht funktioniert. Dann wechsle ich zum letzten: iptables -A POSTROUTING -t nat -j MASQUERADE, dann hat es funktioniert!
Dánjal Salberg Adlersson
8

Vielen Dank an Daywalker und Dánjal Salberg Adlersson. Nach stundenlangem Fluchen funktioniert die Portweiterleitung mit iptables endlich. (auf Debian getestet)

Bash-Skript

#!/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
quelle
Gibt es einen Grund, warum "-s 192.168.57.25" in der POSTROUTING-Zeile weggelassen wurde?
Edwardsmarkf
auch "-o eth3" weggelassen
edwardsmarkf
Ich sehe die -s und -o in der POSTROUTING-Zeile scheint optional zu sein. Irgendwelche Gedanken zur Verwendung von SSL? Ich fragte die Frage hier, verweist Ihr Skript: superuser.com/questions/1387902/...
edwardsmarkf