Compartilhamento de tecnologia

【Servidor】Mapeamento de portas

2024-07-12

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



1. O conceito de mapeamento portuário

Port Mapping, também conhecido como Port Forwarding, é uma tecnologia que redireciona o fluxo de dados de uma porta de rede para outra porta de rede. Normalmente é usado para serviços executados atrás de um firewall ou roteador, permitindo que dispositivos externos acessem serviços específicos na rede interna. O mapeamento de portas pode ser feito dentro da rede local ou entre redes, usando protocolos como SSH.

1.1 Tipos de mapeamento de portas

  1. Encaminhamento de porta local

    • Mapeie uma porta no computador local para uma porta no servidor remoto.
    • Exemplo: Alterar porta local8080mapeado para servidor remoto80porta para que possa ser passada localmentelocalhost:8080Acesse o serviço web do servidor remoto.
  2. Encaminhamento de porta remota

    • Mapeie uma porta no servidor remoto para uma porta no computador local.
    • Exemplo: Adicione o servidor remoto2222Mapeamento de porta para o computador local22porta para que o serviço SSH do computador local possa ser acessado através do servidor remoto.
  3. Encaminhamento de porta dinâmico

    • Crie um proxy SOCKS através do qual as portas de vários servidores remotos possam ser acessadas dinamicamente.
    • Exemplo: Crie um proxy SOCKS que permita ao navegador acessar vários sites de servidores remotos por meio do proxy.

1.2 Cenários de aplicação de mapeamento de portas

  1. Acesso remoto a serviços internos: Através do mapeamento de portas, serviços específicos dentro da empresa ou rede doméstica podem ser acessados ​​a partir da rede externa, como servidores web, servidores de banco de dados, etc.

  2. Penetrar firewall: por meio do mapeamento de portas, você pode ignorar as restrições do firewall e acessar serviços bloqueados pelo firewall.

  3. Melhore a segurança: O mapeamento de portas através do túnel SSH pode criptografar a transmissão de dados e melhorar a segurança.

  4. Balanceamento de carga e proxies: balanceadores de carga e servidores proxy geralmente usam tecnologia de mapeamento de portas para distribuir e encaminhar tráfego para melhorar a confiabilidade e o desempenho do serviço.

1.3 Exemplo

Suponha que haja um serviço web em execução em um servidor remoto e a porta em que ele escuta seja80 . Para acessar este serviço do seu computador local, crie um mapeamento de porta local usando o seguinte comando SSH:

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

Este comando irá alterar o computador local8080Mapeamento de porta para servidor remoto80 porta.Agora, acesse-o em seu navegador localhttp://localhost:8080, que equivale a acessar o serviço Web do servidor remoto.

2. Por que precisamos realizar o mapeamento de portas?

Existem vários motivos principais para fazer mapeamento de portas (ou encaminhamento de portas) durante o desenvolvimento:

  1. Acesse serviços protegidos: Alguns serviços na máquina de desenvolvimento podem escutar apenas no host local (127.0.0.1 ) e não pode ser acessado diretamente do exterior. Através do mapeamento portuário, estes serviços podem ser expostos e tornados acessíveis a partir do exterior.

  2. segurança : o encaminhamento de porta através do túnel SSH permite acesso seguro a serviços internos sem expor diretamente o serviço. O túnel SSH criptografa a transmissão de dados para maior segurança.

  3. Fácil de depurar : durante o processo de desenvolvimento, os desenvolvedores podem precisar acessar vários serviços em execução na máquina de desenvolvimento. Com o mapeamento de portas, esses serviços podem ser acessados ​​diretamente do local, sem a necessidade de fazer login na máquina de desenvolvimento todas as vezes.

  4. Ignorar firewall ou restrições de rede : em alguns ambientes de rede, pode haver firewalls ou restrições de rede que impedem o acesso direto aos serviços na máquina de desenvolvimento. Através do tunelamento SSH, essas restrições podem ser contornadas e o acesso aos serviços pode ser alcançado.

  5. Acesso de vários usuários: se vários desenvolvedores precisarem acessar o mesmo serviço, o mapeamento de portas permite que cada desenvolvedor acesse o serviço em seu próprio ambiente local sem fazer login diretamente na máquina de desenvolvimento.

por exemplo:

Suponha que você tenha um servidor Jupyter Notebook em execução em sua máquina de desenvolvimento. Ele escuta na porta 7860, mas permite apenas acesso local. Através do seguinte comando SSH, você pode mapear a porta 7860 da máquina de desenvolvimento para sua porta 7860 local:

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

Dessa forma, você pode acessá-lo em seu navegador local http://127.0.0.1:7860 para visualizar e usar o servidor Jupyter Notebook em sua máquina de desenvolvimento.

3.Princípio

3.1 Explicação do Princípio [Vernáculo]

A máquina de desenvolvimento tem seu próprioporta expostaeIP Público, pode ser usado para nossa conexão ssh local

Mas na máquina de desenvolvimento, ou seja, no servidorRodar programaQuando, seu programa está no servidorem um determinado portoEm andamento

Portanto, se quisermos ver o efeito de execução do programa no servidor localmente, precisamos criarMapeamento de portas, quando o navegador abrir a porta local, encaminhe-o para a porta do servidor para visualização.

3.2 Diagrama esquemático

Insira a descrição da imagem aqui

4.Código

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

Por exemplo:

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

Este comando é usado para criar um túnel SSH. Abaixo está uma explicação detalhada de cada parte:

  • ssh: Comando usado para iniciar uma conexão SSH.
  • -p 37367: Especifique o número da porta do host remoto ao qual se conectar (porta 37367 neste exemplo).
  • [email protected]: Nome de usuário (root) e nome de host (ssh.intern-ai.org.cn).
  • -CNg: Combinação de opções:
    • -C: Ativar a compactação.
    • -N: Diga ao SSH para não executar comandos remotos, apenas encaminhamento de porta.
    • -g: permite que hosts remotos se conectem à porta encaminhada.
  • -L 7860:127.0.0.1:7860: Execute o encaminhamento de porta local e mapeie a porta 7860 da máquina local para a porta 7860 de 127.0.0.1 do host remoto.
  • -o StrictHostKeyChecking=no: desativa a verificação da chave do host, o que evita prompts interativos ao conectar pela primeira vez.

Em resumo, este comando criará um túnel SSH entre a máquina local e o host remoto, encaminhará a porta local 7860 para a porta 7860 do host remoto e não executará comandos remotos nem verificará a chave do host.

Como mostrado abaixo:
Após o mapeamento da porta, é exibido o programa em execução na porta 7860 do servidor.
Insira a descrição da imagem aqui