Einfache Portweiterleitung

18

Ich habe einige Probleme, da ich versuche, einen Reverse-Proxy mit einem zweiten Server einzurichten. Meine Idee war, die Firewall dazu zu bringen, https an den Reverse-Proxy und Port 29418 (gerrit ssh) an den zweiten Server weiterzuleiten. Jetzt sagt mein IT-Mitarbeiter: KANN NICHT! Entweder gehen beide Ports zu Server 1 oder beide Ports gehen zu Server 2.

Ok, als Abhilfe habe ich versucht, eine Portweiterleitung auf dem Reverse-Proxy von Port 29418 einzurichten -> server2: 29418

Einzelheiten:

  • Server1 IP: 10.0.0.132 und 192.168.10.2 unter Ubuntu 12.04.2 LTS
  • Server2 IP: 10.0.0.133 und 192.168.10.3 unter Ubuntu 12.04.2 LTS

Nun werden sowohl https als auch Port 29418 von der Firewall auf 10.0.0.132 umgestellt. Laut IT ist dies der einzige Weg. :(

Sagen Sie mir bitte, wie ich von 10.0.0.132:29418 -> 192.168.10.3:29418 oder 10.0.0.133:29418 weiterleiten soll

Wenn ich an 10.0.0.132 arbeite, kann ich eine Verbindung zu 10.0.0.133:29418 und 192.168.10.3:29418 herstellen, sodass die Ports geöffnet sind.

- Update -

Mein iptables -t nat -L sieht so aus:

root @ dev: / root # iptables -t nat -L
Ketten-PREROUTING (Policy ACCEPT)
Zielprotokoll Quellenziel
DNAT tcp - Überall dev.example.com tcp dpt: 29418 bis: 10.0.0.133

Chain INPUT (Policy ACCEPT)
Zielprotokoll Quellenziel

Chain OUTPUT (Policy ACCEPT)
Zielprotokoll Quellenziel

Chain POSTROUTING (Policy ACCEPT)
Zielprotokoll Quellenziel
root @ dev: / root # cat / proc / sys / net / ipv4 / ip_forward
1
unklar
quelle

Antworten:

32

Für den Fall, dass jemand anders nach einem Weg sucht, der tatsächlich funktioniert. Obwohl @HorsePunchKid in seinem Vorschlag richtig ist, habe ich diese exemplarische Vorgehensweise gefunden, die die fehlenden Schritte ausfüllt:

http://www.debuntu.org/wie-zum-redirektieren-von-Netzwerken-zu-neuem-Verwenden-von-iptabellen/

Im Wesentlichen:

IP-Weiterleitung aktivieren:

sysctl net.ipv4.ip_forward=1

Fügen Sie Ihre Weiterleitungsregel hinzu (verwenden Sie nnnn: port):

iptables -t nat -A PREROUTING -p tcp -d 10.0.0.132 --dport 29418 -j DNAT --to-destination 10.0.0.133:29418

Fragen Sie IPtables nach Masquerade:

iptables -t nat -A POSTROUTING -j MASQUERADE

Und das ist es! Es hat bei mir auf jeden fall geklappt :)

Brendon Muir
quelle
1
Dies ist die beste Antwort, die ich zu diesem Thema gefunden habe.
Victor Piousbox
Verbindung von meinem Docker-Container nach Verwendung dieser Lösung unterbrochen. Musste die Regel löschen. Regel funktionierte, verlor aber den gesamten anderen Verkehr. Ich empfehle das nicht.
Dyin
iptables -t nat -A POSTROUTING -j MASQUERADEOH WOW ... das war's, danke! Verbrachte Stunden damit, im Internet zu suchen und herauszufinden. Das ist so einfach und funktioniert.
Shrimpwagon
7

Wenn Sie Iptables auf 10.0.0.132 installiert haben, denke ich, dass dies ziemlich einfach sein wird:

iptables -t nat -A PREROUTING -j DNAT -d 10.0.0.132 -p tcp --dport 29418 --to 10.0.0.133

Dies besagt, dass Datenverkehr, der über Port 29418 an 10.0.0.132 eingeht, stattdessen über denselben Port an 10.0.0.133 gesendet werden soll, bevor andere Routing-Vorgänge durchgeführt werden, die 10.0.0.132 möglicherweise versucht. Wenn Sie diesen Befehl ausführen und Probleme damit haben, ersetzen Sie das Flag -A durch -D, um ihn zu entfernen.

Wenn Sie möchten, dass diese Regel beim Start von 10.0.0.132 automatisch ausgeführt wird, können Sie den obigen Befehl als Nachbearbeitungsregel in / etc / network / interfaces hinzufügen.

HorsePunchKid
quelle
Genau das habe ich getan, aber es hat nicht funktioniert. Ich habe net.ipv4.ip_forward = 1 in /etc/sysctl.conf auskommentiert, erhalte jedoch weiterhin Fehler beim Herstellen einer Verbindung zum 10.0.0.132:29418
uncletall
6

Wenn Sie nach einer temporären Methode suchen, versuchen Sie die folgende Lösung.

    ssh -L 192.168.0.10:8080:10.0.0.10:80 [email protected]

Der obige Befehl leitet alle Verbindungen zum Port 8080 Ihres Basiscomputers zum 80-Port Ihres virtuellen Computers um. Sie können das Funktionieren testen, indem Sie auf die Webseite http://192.168.0.10:8080 zugreifen. Daraufhin wird die Webseite auf dem Gastcomputer angezeigt.

Dies gilt für alle Ports :)

gewöhnlicher Mensch
quelle
0

Am Ende musste ich pfSense als Router auf meinem ESXi-Server installieren, um den Datenverkehr zu den verschiedenen VMs zu leiten, da ich ihn unter Ubuntu nicht zum Laufen bringen konnte.

unklar
quelle