Technologieaustausch

【Server】Portzuordnung

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina



1. Das Konzept der Portzuordnung

Port Mapping, auch Port Forwarding genannt, ist eine Technologie, die den Datenfluss von einem Netzwerk-Port zu einem anderen Netzwerk-Port umleitet. Dies wird normalerweise für Dienste verwendet, die hinter einer Firewall oder einem Router ausgeführt werden, sodass externe Geräte auf bestimmte Dienste im internen Netzwerk zugreifen können. Die Portzuordnung kann innerhalb des lokalen Netzwerks oder netzwerkübergreifend mithilfe von Protokollen wie SSH erfolgen.

1.1 Arten der Portzuordnung

  1. Lokale Portweiterleitung

    • Ordnen Sie einen Port auf dem lokalen Computer einem Port auf dem Remote-Server zu.
    • Beispiel: Lokalen Port ändern8080Dem Remote-Server zugeordnet80Port, damit er lokal übergeben werden kannlocalhost:8080Greifen Sie auf den Webdienst des Remote-Servers zu.
  2. Remote-Port-Weiterleitung

    • Ordnen Sie einen Port auf dem Remote-Server einem Port auf dem lokalen Computer zu.
    • Beispiel: Fügen Sie die Remote-Server hinzu2222Portzuordnung zum lokalen Computer22Port, damit über den Remote-Server auf den SSH-Dienst des lokalen Computers zugegriffen werden kann.
  3. Dynamische Portweiterleitung

    • Erstellen Sie einen SOCKS-Proxy, über den dynamisch auf die Ports mehrerer Remote-Server zugegriffen werden kann.
    • Beispiel: Erstellen Sie einen SOCKS-Proxy, der es dem Browser ermöglicht, über den Proxy auf mehrere Remote-Server-Websites zuzugreifen.

1.2 Anwendungsszenarien der Portzuordnung

  1. Fernzugriff auf interne Dienste: Durch Port-Mapping kann vom externen Netzwerk aus auf bestimmte Dienste innerhalb des Firmen- oder Heimnetzwerks zugegriffen werden, wie z. B. Webserver, Datenbankserver usw.

  2. Firewall durchdringen: Durch Port-Mapping können Sie Firewall-Einschränkungen umgehen und auf von der Firewall blockierte Dienste zugreifen.

  3. Verbessern Sie die Sicherheit: Port-Mapping über SSH-Tunnel kann die Datenübertragung verschlüsseln und die Sicherheit verbessern.

  4. Lastausgleich und Proxys: Load Balancer und Proxyserver nutzen häufig Port-Mapping-Technologie, um den Datenverkehr zu verteilen und weiterzuleiten und so die Zuverlässigkeit und Leistung der Dienste zu verbessern.

1.3 Beispiel

Angenommen, auf einem Remote-Server läuft ein Webdienst und der Port, auf dem er lauscht, ist80 . Um von Ihrem lokalen Computer aus auf diesen Dienst zuzugreifen, erstellen Sie eine lokale Portzuordnung mit dem folgenden SSH-Befehl:

ssh -L 8080:localhost:80 user@remote-server
  • 1

Dieser Befehl ändert die des lokalen Computers8080Portzuordnung zum Remote-Server80 Hafen.Greifen Sie jetzt in Ihrem lokalen Browser darauf zuhttp://localhost:8080, was dem Zugriff auf den Webdienst des Remote-Servers entspricht.

2. Warum müssen wir eine Portzuordnung durchführen?

Es gibt mehrere Hauptgründe für die Portzuordnung (oder Portweiterleitung) während der Entwicklung:

  1. Zugriff auf geschützte Dienste: Einige Dienste auf dem Entwicklungscomputer lauschen möglicherweise nur auf localhost (127.0.0.1 ) und nicht direkt von außen zugänglich. Durch Port-Mapping können diese Dienste offengelegt und von außen zugänglich gemacht werden.

  2. Sicherheit : Die Portweiterleitung über einen SSH-Tunnel ermöglicht den sicheren Zugriff auf interne Dienste, ohne den Dienst direkt offenzulegen. Der SSH-Tunnel verschlüsselt die Datenübertragung für zusätzliche Sicherheit.

  3. Einfach zu debuggen : Während des Entwicklungsprozesses müssen Entwickler möglicherweise auf mehrere Dienste zugreifen, die auf dem Entwicklungscomputer ausgeführt werden. Mit Port-Mapping kann direkt von lokal auf diese Dienste zugegriffen werden, ohne sich jedes Mal am Entwicklungscomputer anmelden zu müssen.

  4. Umgehen Sie Firewall- oder Netzwerkbeschränkungen : In einigen Netzwerkumgebungen kann es Firewalls oder Netzwerkeinschränkungen geben, die den direkten Zugriff auf Dienste auf dem Entwicklungscomputer verhindern. Durch SSH-Tunneling können diese Einschränkungen umgangen und der Zugriff auf Dienste ermöglicht werden.

  5. Zugriff für mehrere Benutzer: Wenn mehrere Entwickler auf denselben Dienst zugreifen müssen, ermöglicht die Portzuordnung jedem Entwickler den Zugriff auf den Dienst in seiner eigenen lokalen Umgebung, ohne sich direkt am Entwicklungscomputer anzumelden.

Zum Beispiel:

Angenommen, auf Ihrem Entwicklungscomputer läuft ein Jupyter-Notebook-Server, der Port 7860 überwacht, aber nur lokalen Zugriff zulässt. Mit dem folgenden SSH-Befehl können Sie den 7860-Port der Entwicklungsmaschine Ihrem lokalen 7860-Port zuordnen:

ssh -p 37367 [email protected] -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
  • 1

Auf diese Weise können Sie in Ihrem lokalen Browser darauf zugreifen http://127.0.0.1:7860 um den Jupyter Notebook-Server auf Ihrem Entwicklungscomputer anzuzeigen und zu verwenden.

3. Prinzip

3.1 [Volkssprache] Prinziperklärung

Die Entwicklungsmaschine verfügt über eine eigenefreiliegender HafenUndÖffentliche IP, kann für unsere lokale SSH-Verbindung verwendet werden

Sondern in der Entwicklungsmaschine, also dem ServerProgramm ausführenWenn das Programm auf dem Server liegtauf einem bestimmten PortIm Gange

Wenn wir also sehen möchten, wie das Programm lokal auf dem Server ausgeführt wird, müssen wir es erstellenPort-MappingWenn der Browser den lokalen Port öffnet, leiten Sie ihn zur Anzeige an den Port des Servers weiter.

3.2 Schematische Darstellung

Fügen Sie hier eine Bildbeschreibung ein

4.Code

ssh -p 37367 [email protected] -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
  • 1

Zum Beispiel:

ssh -p 37367 [email protected] -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
  • 1

Mit diesem Befehl wird ein SSH-Tunnel erstellt. Nachfolgend finden Sie eine detaillierte Erklärung jedes Teils:

  • ssh: Befehl zum Initiieren einer SSH-Verbindung.
  • -p 37367: Geben Sie die Portnummer des Remote-Hosts an, zu dem eine Verbindung hergestellt werden soll (in diesem Beispiel Port 37367).
  • [email protected]: Benutzername (root) und Hostname (ssh.intern-ai.org.cn).
  • -CNg: Kombination der Optionen:
    • -C: Komprimierung aktivieren.
    • -N: Weisen Sie SSH an, keine Remote-Befehle auszuführen, sondern nur die Portweiterleitung.
    • -g: Remote-Hosts erlauben, sich mit dem weitergeleiteten Port zu verbinden.
  • -L 7860:127.0.0.1:7860: Führen Sie eine lokale Portweiterleitung durch und ordnen Sie Port 7860 des lokalen Computers dem Port 7860 von 127.0.0.1 des Remote-Hosts zu.
  • -o StrictHostKeyChecking=no: Deaktivieren Sie die Überprüfung des Hostschlüssels, wodurch interaktive Eingabeaufforderungen beim ersten Herstellen einer Verbindung verhindert werden.

Zusammenfassend lässt sich sagen, dass dieser Befehl einen SSH-Tunnel zwischen dem lokalen Computer und dem Remote-Host erstellt, den lokalen Port 7860 an den Port 7860 des Remote-Hosts weiterleitet und keine Remote-Befehle ausführt oder den Host-Schlüssel überprüft.

Wie nachfolgend dargestellt:
Nach der Portzuordnung wird das Programm angezeigt, das auf dem Port 7860 des Servers läuft.
Fügen Sie hier eine Bildbeschreibung ein