Redirecionar todo o tráfego de entrada de um IP público secundário para um endereço IP interno usando iptables

6

No momento, estou tentando descobrir como posso encaminhar o tráfego de um endereço IP público secundário do meu servidor dedicado para um IP interno da minha rede usando o iptables para fazer, por exemplo. servidores web e similares visíveis do lado de fora.

Minha configuração é um servidor dedicado que contém três máquinas virtuais que formam uma "LAN privada". A conexão entre esses é estabelecida e as máquinas virtuais podem se conectar à Internet através de uma ponte entre a LAN isolada e o servidor físico. Permitir que o tráfego de saída seja estabelecido usando a seguinte regra (LAN: 192.168.x.x, Exemplo de endereço público: 8.8.8.8):

iptables -t nat -A POSTROUTING -s 192.168.1.101 -j SNAT --to-source 8.8.8.8

Isso funciona bem - se eu abrir um navegador de internet e acessar o whatismyip.com, ele não mostrará mais o endereço IP principal do servidor, mas mostrará o IP secundário da maneira que ele deveria fazer.

No entanto, agora eu adoraria fazer o contrário e instalar, e. um servidor web em uma das máquinas virtuais e disponibilizá-lo ao público através do meu IP secundário. Eu estava procurando a resposta e achei que deveria adicionar uma regra PREROUTING para conseguir isso, assim tentei o seguinte:

iptables -t nat -A PREROUTING -d 8.8.8.8 -j DNAT --to-destination 192.168.1.101

No entanto, conectar-se à porta 80 do IP público expirará. Parece que ainda sinto falta de algo ou há um erro na maneira como faço as regras.

Observação: Em vez de abrir apenas uma porta específica, eu gostaria de encaminhar todo o tráfego de entrada desse IP específico para a máquina virtual e lidar com a segurança por lá.

Qualquer conselho seria apreciado - talvez eu esteja sentindo falta de algo menor.

    
por beta 10.09.2014 / 18:32

1 resposta

10

Você precisará de uma combinação de DNAT e SNAT e precisará ativar o ip_forwarding.

Primeiro, verifique o ip_forwarding:

cat /proc/sys/net/ipv4/ip_forward

Se for 1 (habilitado), vá em frente. Caso contrário, você terá que colocar net.ipv4.ip_forward=1 em /etc/sysctl.conf e executar sysctl -p .

A primeira regra é DNAT (suponha 8.8.8.8 como o IP externo e 192.168.0.10 como interno):

iptables -t nat -A  PREROUTING -d 8.8.8.8 -j DNAT --to-destination 192.168.0.10

Quando um sistema externo (por exemplo, 200.100.50.25 ) envia um pacote que atinge 8.8.8.8, o DESTINATION é alterado para 192.168.0.10 e enviado para fora. Mas a fonte será 200.100.50.25 , o pacote será processado e o pacote de resposta poderá:

  1. Seja descartado por 192.168.0.10 que talvez não saiba como rotear. Não desejável.

  2. Ser enviado por 192.168.0.10 para o gateway padrão e para a internet. Assim que atingir 200.100.50.25 , este sistema nunca ouviu falar de 192.168.0.10 e irá descartar o pacote. Não é bom.

  3. Seja descartado no primeiro salto, pois 192.168.0.10 é um endereço particular e não pode ser roteado na Internet.

Para resolver isso, você precisa da segunda regra, SNAT:

iptables -t nat -A POSTROUTING -s 192.168.0.10 -j SNAT --to-source 8.8.8.8

Com esta regra, todos os pacotes que vêm de 192.168.0.10 terão a fonte alterada para 8.8.8.8 e enviados.

O efeito colateral é que todo log em 192.168.0.10 mostrará 8.8.8.8 como o cliente, não o cliente real. Acompanhar os abusadores será um pouco mais difícil.

    
por 10.09.2014 / 19:17

Tags