Compartir tecnología

【Servidor】 Mapeo de puertos

2024-07-12

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



1. El concepto de cartografía portuaria

Port Mapping, también conocido como Port Forwarding, es una tecnología que redirige el flujo de datos de un puerto de red a otro puerto de red. Normalmente se utiliza para servicios que se ejecutan detrás de un firewall o enrutador, lo que permite que dispositivos externos accedan a servicios específicos dentro de la red interna. El mapeo de puertos se puede realizar dentro de la red local o entre redes, utilizando protocolos como SSH.

1.1 Tipos de mapeo de puertos

  1. Reenvío de puertos locales

    • Asigne un puerto en la computadora local a un puerto en el servidor remoto.
    • Ejemplo: cambiar el puerto local8080asignado al servidor remoto80puerto para que pueda pasarse localmentelocalhost:8080Acceder al servicio web del servidor remoto.
  2. Reenvío de puertos remotos

    • Asigne un puerto en el servidor remoto a un puerto en la computadora local.
    • Ejemplo: agregar el servidor remoto2222Mapeo de puertos a la computadora local22puerto para que se pueda acceder al servicio SSH de la computadora local a través del servidor remoto.
  3. Reenvío de puertos dinámicos

    • Cree un proxy SOCKS a través del cual se pueda acceder dinámicamente a los puertos de múltiples servidores remotos.
    • Ejemplo: cree un proxy SOCKS que permita al navegador acceder a varios sitios web de servidores remotos a través del proxy.

1.2 Escenarios de aplicación del mapeo de puertos

  1. Acceso remoto a servicios internos.: A través del mapeo de puertos, se puede acceder a servicios específicos dentro de la red empresarial o doméstica desde la red externa, como servidores web, servidores de bases de datos, etc.

  2. Penetrar el firewall: A través del mapeo de puertos, puede evitar las restricciones del firewall y acceder a los servicios bloqueados por el firewall.

  3. Mejorar la seguridad: El mapeo de puertos a través del túnel SSH puede cifrar la transmisión de datos y mejorar la seguridad.

  4. Equilibrio de carga y proxies: Los equilibradores de carga y los servidores proxy suelen utilizar tecnología de mapeo de puertos para distribuir y reenviar el tráfico y mejorar la confiabilidad y el rendimiento del servicio.

1.3 Ejemplo

Supongamos que hay un servicio web ejecutándose en un servidor remoto y el puerto en el que escucha es80 . Para acceder a este servicio desde su computadora local, cree una asignación de puerto local usando el siguiente comando SSH:

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

Este comando cambiará la configuración de la computadora local.8080Mapeo de puertos al servidor remoto80 puerto.Ahora, acceda a él en su navegador local.http://localhost:8080, lo que equivale a acceder al servicio web del servidor remoto.

2. ¿Por qué necesitamos realizar un mapeo de puertos?

Hay varias razones principales para realizar un mapeo de puertos (o reenvío de puertos) durante el desarrollo:

  1. Accede a servicios protegidos: Es posible que algunos servicios en la máquina de desarrollo solo escuchen en localhost (127.0.0.1 ) y no se puede acceder directamente desde el exterior. A través del mapeo portuario, estos servicios pueden exponerse y hacerse accesibles desde el exterior.

  2. seguridad : El reenvío de puertos a través del túnel SSH permite el acceso seguro a servicios internos sin exponer directamente el servicio. El túnel SSH cifra la transmisión de datos para mayor seguridad.

  3. Fácil de depurar : Durante el proceso de desarrollo, es posible que los desarrolladores necesiten acceder a múltiples servicios que se ejecutan en la máquina de desarrollo. Con el mapeo de puertos, se puede acceder a estos servicios directamente desde el local sin tener que iniciar sesión en la máquina de desarrollo cada vez.

  4. Evite las restricciones de red o firewall : En algunos entornos de red, puede haber firewalls o restricciones de red que impidan el acceso directo a los servicios en la máquina de desarrollo. A través del túnel SSH, se pueden evitar estas restricciones y se puede lograr el acceso a los servicios.

  5. Acceso de múltiples usuarios: Si varios desarrolladores necesitan acceder al mismo servicio, el mapeo de puertos permite que cada desarrollador acceda al servicio en su propio entorno local sin iniciar sesión directamente en la máquina de desarrollo.

Por ejemplo:

Suponga que tiene un servidor Jupyter Notebook ejecutándose en su máquina de desarrollo. Escucha en el puerto 7860 pero solo permite el acceso local. Mediante el siguiente comando SSH, puede asignar el puerto 7860 de la máquina de desarrollo a su puerto 7860 local:

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

De esta manera, podrás acceder a él en tu navegador local. http://127.0.0.1:7860 para ver y utilizar el servidor Jupyter Notebook en su máquina de desarrollo.

3.Principio

3.1 Explicación del principio [vernáculo]

La máquina de desarrollo tiene su propiapuerto expuestoyIP pública, se puede utilizar para nuestra conexión ssh local

Pero en la máquina de desarrollo, es decir, el servidor.Ejecute el programaCuando su programa está en el servidor.en un puerto determinadoEn curso

Entonces, si queremos ver el efecto de ejecución del programa en el servidor localmente, necesitamos crearLa asignación de puertos, cuando el navegador abre el puerto local, lo reenvía al puerto del servidor para verlo.

3.2 Diagrama esquemático

Insertar descripción de la imagen aquí

4.Código

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

Por ejemplo:

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

Este comando se utiliza para crear un túnel SSH. A continuación se muestra una explicación detallada de cada parte:

  • ssh: Comando utilizado para iniciar una conexión SSH.
  • -p 37367: Especifique el número de puerto del host remoto al que conectarse (puerto 37367 en este ejemplo).
  • [email protected]: Nombre de usuario (raíz) y nombre de host (ssh.intern-ai.org.cn).
  • -CNg: Combinación de opciones:
    • -C: Habilitar la compresión.
    • -N: Dígale a SSH que no ejecute comandos remotos, solo reenvío de puertos.
    • -g: permite que los hosts remotos se conecten al puerto reenviado.
  • -L 7860:127.0.0.1:7860: Realice el reenvío de puerto local y asigne el puerto 7860 de la máquina local al puerto 7860 de 127.0.0.1 del host remoto.
  • -o StrictHostKeyChecking=no: deshabilite la verificación de la clave del host, lo que evita mensajes interactivos cuando se conecta por primera vez.

En resumen, este comando creará un túnel SSH entre la máquina local y el host remoto, reenviará el puerto local 7860 al puerto 7860 del host remoto y no ejecutará comandos remotos ni verificará la clave del host.

Como se muestra abajo:
Después del mapeo de puertos, se muestra el programa que se ejecuta en el puerto 7860 del servidor.
Insertar descripción de la imagen aquí