flxkls
Goto Top

Reverse Proxy für TCP und UDP Anfragen

Hallo zusammen,

ich besitze einen Rootserver, der nur eine öffentliche IP besitzt und auf dem mehrere VMs laufen. Da es vorkommen wird, dass mehrere Server gleichzeitig laufen werden, welche die selben Ports verwenden, suche ich nach einer Möglichkeit mit der ich die Anfragen anhand der Subdomain an die entsprechenden VMs weiterleiten kann. Meiner Recherche nach kann ein Reverse Proxy keine TCP/UDP Requests weiterleiten und IPTABLES ist nicht in der Lage anhand eines FQDN eine Anfrage entsprechend weiterzuleiten.
Gibt es eine Lösung wie ich dieses Problem lösen kann?

Beispielaufbau:

webserver1.meine-domain.de -> VM 1
teamspeakserver.meine-domain.de -> VM 2
gameserver1.meine-domain.de -> VM 3
gameserver2.meine-domain de -> VM 4

Schonmal vielen Dank!

Content-ID: 398930

Url: https://administrator.de/contentid/398930

Ausgedruckt am: 21.11.2024 um 15:11 Uhr

129580
129580 21.01.2019 aktualisiert um 13:26:36 Uhr
Goto Top
Hallo,

Meiner Recherche nach kann ein Reverse Proxy keine TCP/UDP Requests weiterleiten

Klar geht das! Genau für solche Zwecke gibt es ein Reverse Proxy. Ganz einfach mit Apache oder nginx umsetzbar.
Da findest du zahlreiche Tutorials im Netz.

IPTABLES ist nicht in der Lage anhand eines FQDN eine Anfrage entsprechend weiterzuleiten.

Klar beherrscht iptables FQDN. Allerdings tut iptables nur einmal den Namen auflösen. Bei einer DynDNS Adresse bräuchtest du ein Script.
Außerden ist iptables ein Paketfilter - kein Proxy!

Gibt es eine Lösung wie ich dieses Problem lösen kann?

Ja. Die Lösung hast du doch selbst erwähnt. -> Reverse Proxy.

Viele Grüße,
Exception
Dani
Dani 21.01.2019 um 13:34:58 Uhr
Goto Top
Moin,
ich besitze einen Rootserver, der nur eine öffentliche IP besitzt und auf dem mehrere VMs laufen.
normalerweise hat man einen Firewall als VM am Laufen, hinter der sich alle VMs befinden. Nutzt du z.B. pfSense oder Opnsense ist ein Reverse Proxy ebenfalls enthalten. Anleitung dazu gibt es genüge. face-smile


Gruß,
Dani
flxkls
flxkls 21.01.2019 um 13:46:47 Uhr
Goto Top
Die Firewall als VM ist der Plan, momentan läuft noch nichts produktiv. Vielen Dank für den Tipp mit pfSense, das werde ich mir mal anschauen!
nepixl
nepixl 21.01.2019 um 14:15:16 Uhr
Goto Top
Hi,

der Apache schluckt es so:

<VirtualHost *:1337>
  ServerName subdomain.domain.de

  <Location "/">  
    ProxyPass "protokoll://VMIP:PORT/"  
  </Location>
</VirtualHost>

Zum Beispiel.

Sobald man auf subdomain.domain.de:1337/ surft, bekommt man den Output von deiner VM unter angesprochenen Port.

Gruß
SlainteMhath
SlainteMhath 21.01.2019 um 14:25:12 Uhr
Goto Top
Moin,

es sei auch noch angemertkt, das der Reverse Proxy nur für HTTP(S) Verbindungen funktioniert. Für alle andere (Teamspeak, Gameserver) brauchst du pro Instanz entweder eine eigene IP oder einen eigenen Port.

lg,
Slainte
flxkls
flxkls 21.01.2019 um 14:44:56 Uhr
Goto Top
Also ich habe mir jetzt testweise eine VM mit opnsense hochgezogen und dort unter "Firwall -> NAT -> Port Forward" Regeln erstellt.
Allerdings scheine ich ein Verständisproblem zu haben...

Ich hatte gehofft dass der Server an Hand der angefragten Subdomain (sei es durch einen Browser, ein Spiel, oder sonstige Software) die Anfrage an die richtige VM weiterleitet.

Es scheint als wäre opnsense doch nicht das richtige und sollte es nochmal mit der Apache-Lösung probieren.
SlainteMhath
SlainteMhath 21.01.2019 um 14:54:06 Uhr
Goto Top
nochmal mit der Apache-Lösung probieren.
Nützt nichts! Wie schon gesagt: RevProxy nur für HTTP(S) Verbindungen. TS/GameServer geht damit nicht!
129580
129580 21.01.2019 aktualisiert um 15:04:21 Uhr
Goto Top
Hallo,

es sei auch noch angemertkt, das der Reverse Proxy nur für HTTP(S) Verbindungen funktioniert.

Kommt auf den Reverse Proxy an. NGINX kann das schon bzw. ist dann Loadbalancing aber man kommt auf das selbe Ergebnis:
https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-bala ...

Viele Grüße,
Exception
SlainteMhath
SlainteMhath 21.01.2019 um 15:07:24 Uhr
Goto Top
Jo Load Balancer... aber nicht "VHOST" je nach FQDN (und darum gings dem TE)
flxkls
flxkls 21.01.2019 um 15:24:08 Uhr
Goto Top
Wäre es einfacher mit SRV-Records den Subdomains jeweils eigene Ports zuzuweisen und diese dann im Router auf den Standardport der jeweiligen Anwendung umzubiegen?
Ich möchte gerne verhindern, dass User zb. domain.de:1234 eingeben müssen... Das führt nämlich je nach User zu unüberwindbaren Problemen, habe ich das Gefühl...
SlainteMhath
SlainteMhath 21.01.2019 aktualisiert um 15:34:33 Uhr
Goto Top
Ich glaube nicht, das TS die Games auf den SRV Record achten. Wirklich helfen werden dir nur mehr IP Adressen wenn keine anderen Ports verwenden willst.

/EDIT: Ok, ich nehme das zur Hälfte zurück. TS "kann" SRV:
https://support.teamspeakusa.com/index.php?/Knowledgebase/Article/View/2 ...
flxkls
flxkls 21.01.2019 um 15:48:23 Uhr
Goto Top
Das ist schon mal super, dass TS das unterstützt. Bei den Gameservern muss ich mal schauen, die stelle ich zu Verfügung um den Root zu finanzieren. Meine Cloud und Webserver werde ich dann mit einem ReverseProxy abfertigen.

Vielen Dank an alle!
tikayevent
tikayevent 21.01.2019 um 18:29:14 Uhr
Goto Top
Das mit der Auswertung der Subdomain klappt nur bei bestimmten Protokollen, die es entsprechend vorsehen, also z.B. HTTP/HTTPS und ich glaube ein FTP, da hier die aufgerufene Adresse mit in der Anfrage integriert wird. Bei sehr vielen anderen Protokollen ist es nicht möglich, dieses auszuwerten, da es einfach nicht da ist.
117471
117471 21.01.2019 um 22:16:53 Uhr
Goto Top
Hallo,

wie soll das gehen? Afaik enthalten die TCP- bzw. UDP-Datenpakete keine Informationen bezüglich des kontaktierten Hostnames.

Das steht erst in den höheren Protokollen (z.B. im HTTP-Request).

Entweder, Du hast mehrere IP-Adressen oder biegst jedes Protokoll auf einen anderen Port um.

Gruß,
Jörg