elgio
(usa OpenSuSE)
Enviado em 29/01/2009 - 11:19h
Pessoal, nada disto irá funcionar!
O problema dele é CLÁSSICO. Está fazendo nat interno para a rede interna.
Difícil explicar. Eu coloquei uma vez uma vasta explicação neste tópico:
http://www.vivaolinux.com.br/topico/netfilter-iptables/Redirecionamento-de-portas-2/
o qual reproduzo aqui:
======================================================
elgio
(usa openSUSE) Enviado em 05/12/2007 - 15:56h:
NÃO FUNCIONA!
Esta dúvida, inclusive, é bem reincidente e difícil de entender o motivo, mas NÃO FUNCIONA. Vou ver se consigo formalizar uma explicação fácil de entender até para usar como referência para outras perguntas.
Tens o seguinte cenário (hipotético):
Maq A (10.1.0.2) Maq B (10.1.0.3)
Roteador (10.1.0.1)
Máq A e Maq B estão no mesmo domínio de broadcast, logo se comunicam SEM GATEWAY, sem passar pelo roteador (DIRETO)
Digamos que eu coloquei a seguinte regra no roteador, direcionando a porta 3339 para a máquina B:
iptables -t nat -I PREROUTING -d 10.1.0.1 -p tcp --dport 3389 -j DNAT --to-destination 10.1.0.3:3389
(quase igual a sua)
Acontece que quando a máquina A for enviar um pacote para a 10.1.0.1 na porta 3389, o roteador VAI FAZER SIM O NAT. Vamos chamar este pacote de PACOTE A:
Dados do pacote A:
Ip origem: 10.1.0.2
Ip destino: 10.1.0.1
Porta Origem: XX
Porta Destino: 3389
O pacote A passa pelo roteador e é alterado pela regra do Iptables virando o que vamos chamar de pacote A1:
Dados do pacote A1:
Ip origem: 10.1.0.2
Ip destino: 10.1.0.3 (O roteador TROCOU)
Porta Origem: XX
Porta Destino: 3389
É o pacote A1 quem chega na máquina B. A máquina B aceita o pacote e o responde. Contudo como a origem (10.1.0.2) é rede local a máquina B não usa o gateway!! Ela responde DIRETO para máquina A no que irei chamar de pacote A1R (resposta do pacote A1):
Dados do pacote A1R:
Ip origem: 10.1.0.3
Ip destino: 10.1.0.2
Porta Origem: 3389
Porta Destino: XX
Ora, a máquina A simplesmente joga fora este pacote pois NUNCA estabeleceu contato com o IP 10.1.0.3 na porta 3389! Ela o fez com o 10.1.0.1 e continua aguardando o que ela entende ser a resposta do pacote A (vindo do 10.1.0.1!!!)
Isto acontece porque a RESPOSTA não passa pelo roteador, que seria o cara que faria a troca novamente (ele se lembra do que trocou e destroca no retorno).
======================================================
A solução para este problema podem ser DUAS;
a) usar o utilitário redirect: ele é diferente do iptables, pois abre uma porta local e trabalha no nível de aplicação.
b) usar um duplo nat: esta eu reproduzo para o teu caso:
(considerando eth0 como placa da rede interna. Altere se não for. Regras a serem colocadas no iptables 192.168.1.7. Não pode ser no gateway, pois o tráfego interno de 192.168.1.X não passará pelo gateway e tu disse que quer redirecionar o tráfego da rede interna. Imagino que rede interna seja 192.168.1.X)
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to 192.168.1.99
iptables -t nat -I POSTROUTING -o eth0 -p tcp -d 192.168.1.99 --dport 22 -j MASQUERADE