Olá, então o netfilter guarda um histórico dos pacotes e quando retorna
ja sabe para quem encaminhar é isso?
Rodrigo, suas regras funcionaram mais tinham alguns erros.
iptables -t nat -A PREROUTING -p tcp -d 200.xxx.xxx.xxx -s 0/0 --dport
25 -j DNAT --to 200.xxx.xxx.yyy
iptables -t nat -A POSTROUTING -p tcp *-s* 200.xxx.xxx.yyy *-d* 0/0
*--sport* 25 -j SNAT --to xxx.xxx.xxx.xxx
Era exatamente esse mesmo erro que eu estava cometendo, quando os
pacotes chegam na chain POSTROUTING o destino do pacote já está
alterado ( nesse caso você estava utilizando o source como referência,
mas seria o destino, pois o pacote ainda não saiu da interface ) o -s
0/0 é facultativo uma vez que omitido utiliza o mesmo valor como
padrão, então os dois erros seriam apenas os itens em destaque acima,
ficou bem parecido com as regras do Pedro Arthur, porém ele informou as
interfaces de entrada e saída, como só utilizo uma interface não se faz
necessário.
Então deixei as regras assim, e estão funcionando corretamente:
iptables -t nat -A PREROUTING -p tcp -d 200.xxx.xxx.xxx --dport 25 -j
DNAT --to 200.xxx.xxx.yyy
iptables -t nat -A POSTROUTING -p tcp -d 200.xxx.xxx.yyy --dport 25 -j
SNAT --to 200.xxx.xxx.xxx
Bom, na minha cabeça eu precisava pegar os pacotes que estavam voltando
do servidor de destino e encaminhá-los também para o servidor que fez a
requisição, mas o netfilter faz isso automaticamente, nesse caso (
resultado das regras acima ) ele apenas encaminha os pacotes que estão
sendo recebidos do host que faz a requisição para o destino, a resposta
do servidor é encaminhada automaticamente.
Agradeço pela atenção de todos.
A[]'s
Em 4/2/2009 16:21, Rodrigo Carvalho escreveu:
Considerando que a porta negociada seja sempre a 80
??=porta acima de 1024
xxx=qualquer numero (ou quase.. hehehe)
:80=porta 80
IPS: ???.???.????.??? 235.xxx.xxx.xxx 235.xxx.xxx.yyy
----CLIENTE:?? ---> 80:SRV_A:?? ----> 80:SRV_B
----CLIENTE:?? <--- 80:SRV_A:?? <---- 80:SRV_B
iptables -t nat -A PREROUTING -p tcp -d 235.xxx.xxx.xxx -s 0/0
--dport 80 -j DNAT --to 235.xxx.xxx.yyy
iptables -t nat -A POSTROUTING -p tcp -s 235.xxx.xxx.yyy -d 0/0 --sport
80 -j SNAT --to 235.xxx.xxx.xxx
Bem.. eu não testei aqui.. mas.. acho q isso iria resolver o seu
problema...
Teste aí e depois nos diga!
Att,
Rodrigo
2009/2/4 Allison Vollmann <allisonvoll@yahoo.com.br>
Em
4/2/2009 15:55, PEdroArthur_JEdi escreveu:
2009/2/4 Allison Vollmann<allisonvoll@yahoo.com.br>:
realmente funciona, mas tem um porém, só da certo se eu souber de quem
vem a
conexão, se for feita através de outro host não tem como identificá-lo
no
SNAT, ao menos que tenha alguma forma dinâmica de se fazer isso, pois
creio
eu que precisa pegar o endereço *source* da conexão de entrada em
PREROUTING
e inserilo como source do pacote em POSTROUTING, não sei se o netfilter
suporta isso de alguma forma ou existe algum modulo a parte, mas com
apenas
3 hostd pré-definidos aparentemente funciona muito bem.d
Eu acho que as regras podem ser adaptadas da seguinte maneira:
iptables -t nat -A PREROUTING -i eth0 -d 235.xxx.xxx.xxx -p tcp
--dport 80 -j DNAT --to 235.xxx.xxx.yyy
iptables -t nat -A POSTROUTING -o eth0 -d 235.xxx.xxx.xxx -p tcp
--dport 80 -j SNAT --to 235.xxx.xxx.xxx
Nessa solução, o endereço 235.xxx.xxx.xxx sempre ficará como
intermediário, sendo dele a responsabilidade de atribuir o endereço de
origem apropriado. E se ter um intermediário não é problema, essa
solução pode ser usada para mais de um host, colocando-se diversos
DNATs.
O problema é se existirem N hosts que se conectem a ele através desse
servidor pela mesma porta. Se forem poucos endereços da para definir da
mesma maneira ou colocando em range, o único problema nesse caso é que
ele iria repassar a conexão para todo mundo, e só quem pediu iria
aceitar, agora se tiver que liberar para a internet inteira por exemplo
acredito que não tenha como, por isso pedi se existe alguma forma de
fazer o NAT dinamico, pois quando o pacote chega no servidor
intermediario não tem como saber pra quem vai entregar ao menos que
tenha algum jeito de marcar os pacotes e o servidor de destino fazer o
mesmo.
--
Grato!
Rodrigo C. Carvalho
========================================
= SO: Debian Sarge 3.1 Iptables 1.3.1 SQUID 2.5 =
========================================
|