IPtables: DNAT não funciona

2

Em um servidor CentOS que tenho, desejo encaminhar a porta 8080 para um servidor da Web de terceiros.
Então eu adicionei esta regra:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination thirdparty_server_ip:80

Mas parece que não funciona.
Em um esforço para depurar o processo, adicionei essas duas regras de LOG:

iptables -t mangle -A PREROUTING -p tcp --src my_laptop_ip --dport ! 22 -j LOG --log-level warning --log-prefix "[_REQUEST_COMING_FROM_CLIENT_] "
iptables -t nat -A POSTROUTING -p tcp --dst thirdparty_server_ip  -j LOG --log-level warning --log-prefix "[_REQUEST_BEING_FORWARDED_] "

(a parte --dport ! 22 está lá apenas para filtrar o tráfego SSH para que meu arquivo de log não seja inundado)

De acordo com esta página , a cadeia mangle/PREROUTING é o primeiro a processar pacotes de entrada e a corrente nat/POSTROUTING é a última a processar pacotes de saída.

E como a cadeia nat/PREROUTING vem no meio das outras duas, as três regras devem fazer isso:

  1. a regra em mangle/PREROUTING registra os pacotes de entrada
  2. a regra em nat/PREROUTING modifica os pacotes (altera o IP e a porta de destino)
  3. a regra em nat/POSTROUTING registra os pacotes modificados prestes a serem encaminhados

Embora a primeira regra registre os pacotes de entrada provenientes do meu laptop, a terceira regra não registra os pacotes que devem ser modificados pela segunda regra. Ele registra, no entanto, os pacotes que são produzidos no servidor, portanto, eu sei que as duas regras de LOG estão funcionando corretamente.

Por que os pacotes não estão sendo encaminhados ou, pelo menos, por que eles não estão sendo registrados pela terceira regra?

PS: não há mais regras do que essas três. Todas as outras cadeias em todas as tabelas estão vazias e com a política ACCEPT.

    
por GetFree 26.02.2011 / 07:16

2 respostas

5

Você pode precisar ativar o encaminhamento de ip no servidor. Experimente

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

    
por 26.02.2011 / 08:16
1

É altamente dependente se os clientes, para quem você está usando DNAT, usam sua caixa NAT como gateway (+ na verdade, as respostas também usam sua caixa NAT) OU NÃO.

Eu acho que eles não o fazem, então o seguinte descreve falha: {

Ao fazer DNAT você está mascarando o IP-efetivo com um Relay-IP pertencente à caixa NAT (do PoV dos clientes). Assim, um cliente espera se comunicar com o Relay-IP, não com o Effective-IP. Em vez disso, o cliente de repente recebe respostas do IP-Efetivo que ele nunca ouviu falar.

Assim, ao fazer esse mascaramento sem ser um gateway intermediário entre o cliente e o serviço efetivo, você também precisa usar o SNAT (ocultar clientes com NAT-box-external-IP), portanto, todas as respostas do IP-efetivo caixa de serviço voltar para o seu NAT-gateway e só seria de-NATed e enviado de volta para o cliente que iniciou este.

}

    
por 26.02.2011 / 09:08