Reverse-Proxy für alle ports

Ich arbeite an einem System, auf dem jedem meiner Clients ein separater Raspberry Pi zugewiesen ist, auf dem sie ausführen können, was sie wollen (z. Game Server oder Webserver mit einem benutzerdefinierten Port). Wie würde ich jeden Proxy umkehren? Laut dieser Frage kann ich ein NAT verwenden. Was ist das und wie richte ich es ein? Kann ich es auch verwenden, um bestimmte Ports zu blockieren, z. port 25 und Protokolle usw. abrufen?

Author: user1686, 2019-02-02

1 answers

Wie würde ich jeden Proxy umkehren?

Im Allgemeinen: das würdest du nicht.


Aus Ihrer Frage geht hervor, dass Sie versuchen, eine einzelne öffentliche IP-Adresse für viele Clientgeräte freizugeben. Sowohl NAT als auch Reverse-Proxying sind Mechanismen dafür, obwohl sie auf verschiedenen Ebenen funktionieren.

(Wenn Sie sich jedoch für jedes Gerät eine dedizierte öffentliche IP-Adresse leisten können, besteht das Problem überhaupt nicht und beide Mechanismen sind praktisch irrelevant.)

  • DNAT (normalerweise als "Portweiterleitung" bezeichnet) funktioniert normalerweise auf Transportebene – es ermöglicht mehreren Geräten, eine IP-Adresse zu "teilen", indem jedem Gerät eine Reihe von TCP-oder UDP-Ports zugewiesen wird.

    Wenn Sie beispielsweise die IP-Adresse x.y.z.t besitzen, können Sie TCP-Port 80 (x.y.z.t:80) an Gerät A, Port 81 an Gerät B usw. weiterleiten.

  • Reverse Proxying funktioniert normalerweise auf Anwendungsebene – es ermöglicht mehreren Geräten oder Diensten, ein einzelne IP: Portkombination durch Trennen von Anforderungen basierend auf einer im Protokoll gefundenen Kennung.

    Wenn beispielsweise ein HTTP-Reverse-Proxy auf x.y.z.t:80 ausgeführt wird, können Sie HTTP-Anforderungen basierend auf dem angeforderten Domänennamen an verschiedene Geräte weiterleiten.

Reverse Proxying hat den Vorteil, dass Sie mit dem Proxy denselben IP:Port über mehrere Domänen hinweg gemeinsam nutzen können, aber es kommt mit Anforderungen:

  1. Die Proxy-Software muss die protokoll in Frage; Es muss speziell für dieses Protokoll erstellt werden. Dies bedeutet, dass Sie nicht einfach willkürlich "alle Ports" proxyen und es für jeden anderen Dienst arbeiten lassen können, den Ihre Clients ausführen würden.
  2. Das Protokoll muss tatsächlich eine Art "Host" - oder "Domain" - Kennung als Teil seiner Nachrichten haben. Nicht alle Protokolle tragen solche Bezeichner; in der Tat die meisten nicht.
  3. Beim Proxying werden Adressen der unteren Ebene neu geschrieben; Ihre Clients sehen, dass alle Verbindungen von der proxy selbst, es sei denn, der Dienst verfügt auch über Methoden dazu (z. B. X-Forwarded-For oder das sogenannte "PROXY-Protokoll").

Daher ist das Proxying für mehrere Geräte praktisch auf HTTP und HTTPS beschränkt (die einen "Host"-Header haben); plus TLS-basierte Dienste (die SNI und ALPN haben); plus vielleicht DNS und SMTP (basierend auf der Empfängeradresse); und mayyybe unsicher POP3/IMAP/FTP (basierend auf dem Anmeldenamen).

Für Spielserver, obwohl es keine Option ist - Sie haben so ziemlich zu verwenden Sie einen dedizierten port (oder mehrere) für jeden Dienst auf jedem Gerät. Das heißt normalerweise "Portweiterleitung" oder "DNAT"; es ist genau das Gleiche wie die Portweiterleitungsfunktion in Ihrem Heimrouter; und es hat seine eigenen Probleme:

  1. Es kennt keine DNS-Domänen und funktioniert direkt auf IP-Adressebene. Wenn alle Ihre Domänen auf dieselbe einzelne IP-Adresse aufgelöst werden, haben sie alle genau dieselben Portweiterleitungsregeln.

    Dies bedeutet jeden TCP-oder UDP-Port auf einer bestimmten IP-Adresse kann nur an ein Gerät weitergeleitet werden. Wenn beispielsweise Client 1 den Standard-SSH-Port erhält, z. B. pi1.example.com:22, bedeutet dies, dass pi2.example.com:22 oder pi3.example.com:22 auch zum Gerät von Client 1 wechseln – andere Clients können diesen Port jetzt nicht mehr verwenden kann diesen Port überhaupt für eingehende Verbindungen verwenden. (Je nachdem, welche Software NAT ausführt, können sie es wahrscheinlich auch nicht für ausgehende Verbindungen verwenden.)

  2. Es gibt nur ~65k TCP-Ports und ~65k UDP-Ports (pro IP-Adresse), und sie sind erforderlich für sowohl eingehende Verbindungen (eine pro Dienst, manchmal mehr) als auch für ausgehende Verbindungen (als Quellport; im Allgemeinen eine pro Verbindung). In der Praxis können Sie also nicht mehr als haben... sagen wir, ~32k Port-Forwarding-Regeln.

  3. Einige Dienste benötigen einen spezifischen - Port. Zum Beispiel verwendet SMTP für die Zustellung eingehender E-Mails immer TCP-Port 25; IKE verwendet UDP-Ports 500 und 4500; Spieleserver benötigen häufig einen bestimmten Bereich von Ports. Wenn einer Ihrer Kunden das reserviert bestimmter Bereich, andere Clients können nicht denselben Dienst ausführen.


Wie man es einrichtet-ich schlage vor, mit DNAT zu beginnen, da Sie es höchstwahrscheinlich sowieso für den Reverse-Proxy benötigen.

Was ist das und wie richte ich es ein?

Wie bereits erwähnt, wird NAT für eingehende Verbindungen (DNAT) häufig als "Portweiterleitung" bezeichnet und direkt auf Ihrem Router (dem Gerät, das Ihre öffentliche IP-Adresse "besitzt") konfiguriert. das Handbuch des Geräts.

(Wenn auf dem Router nur reguläres Linux oder FreeBSD ausgeführt wird, werden DNAT-Regeln über iptables oder oder pf wie Firewall-Regeln hinzugefügt.)

Kann ich damit auch bestimmte Ports blockieren, z. port 25 und Protokolle usw. abrufen?

{[7],} ja und Nein. Dies sind Funktionen Ihrer Firewall. Jeder anständige firewall besitzen (ich meine, das ist, was eine firewall tut), aber Sie werden es neben NAT, aber nicht Teil von NAT.
 2
Author: user1686,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-02-03 08:46:32