Redirecione o tráfego de um IP e porta para outro IP e porta

Algo muito comum no gerenciamento de servidores é o redirecionamento de tráfego.

Suponha que temos um servidor com certos serviços em execução, mas por qualquer motivo, mudamos um desses serviços (Não sei, por exemplo pop3 que é a porta 110) para outro servidor. O normal e mais frequente seria simplesmente mudar o IP no registro DNS, porém se alguém estava usando o IP em vez do subdomínio ele será afetado.

O que fazer? ... simples, redirecione o tráfego que o servidor recebe por aquela porta para outro servidor com a mesma porta.

server-node-lan-ethernet

Como começamos a redirecionar o tráfego?

A primeira coisa é que devemos ter habilitado o encaminhando no servidor, para isso vamos colocar o seguinte:

echo "1" > /proc/sys/net/ipv4/ip_forward

Todos os comandos mostrados neste tutorial devem ser executados com privilégios administrativos, recomendo que sejam executados diretamente com o usuário root.

Você também pode usar este outro comando, caso o anterior não funcione para você (aconteceu comigo assim em um CentOS):
sysctl net.ipv4.ip_forward=1
Em seguida, reiniciaremos a rede:

service networking restart

Em distros RPM como CentOS e outras, seria:

service nertwork restart

Agora vamos passar para o importante, diga ao servidor por meio iptables o que redirecionar:

iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>

Isto é, e seguindo o exemplo que mencionei, suponha que queiramos redirecionar todo o tráfego que nosso servidor recebe através da porta 110 para outro servidor (ex: 10.10.0.2), que ainda receberá esse tráfego por meio de 110 (é o mesmo serviço):

iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110

O servidor 10.10.0.2 verá que todos os pacotes ou requisições vêm do IP do cliente, caso ele queira nadar as requisições, ou seja, que o 2º servidor veja que as requisições chegam com o IP do 1º servidor (e no ao qual aplicamos o redirecionamento), seria também colocar esta segunda linha:

iptables -t nat -A POSTROUTING -j MASQUERADE

Algumas perguntas e respostas

No exemplo usei a mesma porta nas duas ocasiões (110), porém eles podem redirecionar o tráfego de uma porta para outra sem problemas. Por exemplo, suponha que eu queira redirecionar o tráfego da porta 80 para 443 em outro servidor, para isso seria:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443

Isto é iptables, eles podem usar todos os outros parâmetros que sabemos, por exemplo, se quisermos apenas redirecionar o tráfego de um IP específico, seria adicionando -s … Por exemplo, redirecionarei apenas o tráfego proveniente de 10.10.0.51:

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.51 --dport 80 -j DNAT --to-destination 10.10.0.2:443

Ou uma rede inteira (/ 24):

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.0/24 --dport 80 -j DNAT --to-destination 10.10.0.2:443

Também podemos especificar a interface de rede com -i :

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443

O fim!

Isso como eu já falei, é o iptables, você pode aplicar o que já é conhecido para que o servidor faça exatamente o que você quer

Saudações!

Servidor Dedicado_SubImage


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Fer dito

    Também podemos fazer isso a partir de um firewall que permite o encaminhamento de portas, certo? (aplicando as regras correspondentes).

    1.    KZKG ^ Gaara dito

      Sim, claro, no final um firewall como o Pfsense ou outros, usa iptables por trás.

      1.    caçador dito

        Para ser exato, o pfsense não usa iptables, mas pf, lembre-se de que é um bsd interno.

        1.    KZKG ^ Gaara dito

          Oh certo, meu mal!

  2.   Nicolas dito

    Muito obrigado pela dica 🙂

    Tenho algumas dúvidas:
    1 - A mudança é permanente? ou é perdido ao reiniciar o servidor?
    2 - Tenho várias instâncias (digamos A, B e C) na mesma sub-rede. Na instância A eu aplico a regra de rotear o tráfego para um IP externo, e tentando com curls das instâncias B e C, tudo funciona bem. O problema é que a partir da instância A não funciona. Tentei usar o seu ip e a interface de loopback, mas nenhum funcionou:
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –to-destino xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –to-destination xxxx: 8080

    $ curl ip-yyyy: 8080 / hello_world
    curl: (7) Falha ao conectar à porta 8080 do ip-yyyy: Conexão recusada
    $ curl localhost: 8080 / hello_world
    curl: (7) Falha ao conectar à porta 8080 do host local: Conexão recusada

    Alguma ideia de qual pode ser o problema?

    1.    KZKG ^ Gaara dito

      Sim, a mudança é perdida na reinicialização, você terá que usar iptables-save & iptables-restore ou algo parecido para evitar isso.
      Não entendi muito bem o que você quer fazer, exemplo A?

      1.    Nicolas dito

        Tenho um servidor que só suporta conexões de um determinado ip (servidor A), não posso ou quero adicionar mais ips à lista de permissões (por questões de escalabilidade), então quero que todo o tráfego para o servidor externo passe dito servidor (A).
        Por uma questão de praticidade, tenho configurações globais que definem qual IP usar para cada serviço, então neste caso é algo como "todo mundo que quiser usar o serviço externo, tem que usar IP A"
        Isso foi conseguido com sucesso usando o método neste artigo, mas me deparo com o problema de que, ao aplicá-lo, o servidor A não pode acessar o serviço usando seu próprio ip (mas todos os outros servidores acessam).
        Até agora o melhor que encontrei foi adicionar o mapeamento no arquivo / etc / hosts do servidor A, apontando para o ip externo, substituindo a configuração global.

  3.   braybaut dito

    Muito bom, se eu tiver outro servidor de e-mail eu poderia encaminhar o tráfego da porta 143 do servidor1 para o servidor2 e os e-mails chegarão no servidor2, certo?

    lembranças

    1.    KZKG ^ Gaara dito

      Em teoria, sim, funciona assim. Claro, você deve ter o servidor de e-mail instalado corretamente no servidor2 🙂

  4.   msx dito

    O tipo de postagem que gostamos de ler, obrigado!

  5.   abraão ibarra dito

    Excelente artigo, tenho um projeto no qual estou trabalhando e queria fazer uma pergunta, existem switches industriais com função NAT (suponho que usem IPTables abaixo), para traduzir um endereço IP sem fazer alterações no equipamento, por exemplo, tenho um servidor 10.10.2.1 que se comunica com computadores 10.10.2.X e através do switch é programado de forma que um computador que tem um endereço 192.168.2.4 seja realmente visto do servidor como 10.10.2.5, ele traduziu esse endereço IP para ser visto Dos outros computadores com esse endereço, quero fazer de um servidor com Ubuntu ou outra distribuição, quais seriam as regras de iptables?

  6.   Kuk dito

    Informações muito boas, obrigado ^ _ ^

  7.   Yisus dito

    Boa tarde.
    Eu tenho um problema ao tentar fazer um redirecionamento. Quero dizer:
    Tenho um servidor proxy no Ubuntu, com 2 placas de rede:
    eth0 = 192.168.1.1 está conectado ao resto da rede local.
    eth1 = 192.168.2.2 está conectado ao roteador.
    Preciso que tudo que vem através da eth0 passe pela eth1, e também pelo proxy (eu uso o Squid, cuja porta padrão é 3128), e não consigo encontrar a chave na configuração IPTABLES.
    Não necessito de restrição de nenhum tipo, apenas que fique um registro no log dos endereços web que são visitados.

    Espero que você possa me ajudar, pois é uma tarefa bastante incômoda que me preocupa há alguns dias.

    Obrigado.

  8.   Gabriel dito

    Amigo, sou muito novo em outros servidores, não tenho ideia mas entendo do assunto e aprendo rápido, minha dúvida é a seguinte tenho 2 servidores serv_1 e serv_2 que conectei na mesma intranet, nestes servidores tenho uma nuvem própria configurada Eu gostaria de fazer o seguinte:

    que um certo intervalo de ips por exemplo rangeip_1 ao colocar um ip de acesso ao owncloud (ipowncloud) é direcionado para o serv_1 e se for outro rangeip_2 colocado o mesmo ipowncloud é direcionado para o serv_2, isto para que os 2 servidores sejam localizados em duas cidades diferentes e as faixas de ip são diferentes mas estão todos na mesma rede, essa seria a primeira parte, a segunda seria claro é sincronizar esses 2 servidores para que sejam mirrors ou que me avisem isso para otimizar a largura banda, por favor, se você vai me explicar como fazê-lo passo a passo modo não super programador = (

  9.   António Carrizosa dito

    Olá, com licença, tenho um switch encarregado da comunicação de todos os dispositivos que fazem parte da minha rede, e depois disso um firewall e por último a saída da Internet, o que acontece é que gostaria que o redirecionamento fosse dado no switch e não precisa alcançar o firewall, a menos que o serviço solicitado seja a Internet.

  10.   banheiro dito

    Usando este método, você poderia redirecionar HTTPS para HTTP?

  11.   mati dito

    Olá, talvez seja um pouco tarde, mas queria te perguntar, como devo fazer o squid não modificar o IP do cliente quando quero me conectar a um servidor web da mesma rede?

  12.   lafat32 dito

    Não me trate mal por perguntar. Isso pode ser feito no Windows?

  13.   Martin dito

    Esta informação foi útil para mim. Como sempre, vocês são de confiança, quando não encontro algo em inglês acabo procurando em espanhol, nessas ocasiões quase sempre venho a este site. Obrigado.

  14.   Seba dito

    Tenho um roteador 4G que é cliente de uma rede que não gerencio (obviamente, sou cliente)… esse roteador é um gateway para aquela rede remota através do OpenVPN. Além disso, o referido roteador cumpre a função de encaminhamento de porta para acessar a porta 80 do servidor de uma dessas sub-redes em campo.

    Esta foi a declaração que eu tive que colocar no roteador como regra personalizada do firewall «-t nat -A POSTROUTING -j MASQUERADE»

    Obrigado pela ajuda!