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 já falei, é iptables, você pode aplicar o que já é conhecido para que o servidor faça exatamente o que você deseja 

Saudações!

Servidor Dedicado_SubImage