Eu sou um novato no iptables com o NAT. Minha configuração de rede é mostrada abaixo
linuxbox2 (192.x.y.a)
|
(194.160.1.1) |
linuxbox1(eth1)-------- Switch ----- ftpserver
(192.x.y.b)
BOX1 e BOX2 estão na marcação de VLAN via switch. BOX1 está em uma tag VLAN com FTPserver. Portanto, o BOX2 para conectar-se ao servidor FTP deve rotear via BOX1, que deve fazer POSTROUTING (SNAT) e enviar os pacotes FTP para o FTPserver.
A interface eth1 é configurada com 2 endereços IP, um endereço público e um privado.
Todo o tráfego do BOX2 é roteado para o BOX1. Eu adicionei as seguintes regras na minha configuração do iptables presente no BOX1
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 21 -s 192.x.y.a -j ACCEPT
$IPTABLES -t mangle -A FORWARD -p tcp --dport 21 -s 192.x.y.a -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -s 192.x.y.a -p tcp --dport 21 -j SNAT --to-source 194.160.1.1
Editando a pergunta com novas atualizações
If I ping from BOX2 to BOX1 it is working fine. If I try to perform ftp to the Ftpserver then NAT table in iptables script present in BOX1 is invoked and ftp is not successful.
If I do the tcpdump at eth1 I do see ftp packets coming from BOX2 to BOX1 but no packets leaving from BOX1 to ftpserver.
IP 192.x.y.a.45388 > 10.p.q.r.21(ftpserver): S 1380128644:1380128644(0)
win 5840 <mss 1460,sackOK,timestamp 16897
0,nop,wscale 2>
IP 192.x.y.a.45388 > 10.p.q.r.21: S 1380128644:1380128644(0)
win 5840
IP 192.x.y.a.45388 > 10.p.q.r.21: S 1380128644:1380128644(0)
win 5840
Actually 3 packets are sent from BOX2 to BOX1. Counters for various chains like prerouting, forward shows count as 3 while POSTROUTING chain in NAT table shows a count of 1. But TCPDUMP doesnt show any packet leaving to FTPSERVER.
Agora, depois de alguns ajustes e adicionando suporte LOG ao iptables, descobri que depois de receber pacotes NATted são roteados para ETH0 de BOX1. Então eu consertei o roteamento e agora os pacotes estão saindo do ETH1 para o FTPserver e recebendo os pacotes de volta do FTPserver para o ETH1.
Mas um novo problema começa aqui. Minha configuração do iptables diz - Apenas pacotes com regras apropriadas em IPTABLES são aceitos [podem ser contraditórios para o uso de outros usuários] mais DROPPED.
Minha dúvida é que o endereço IP de destino do pacote é o endereço IP público de ETH1 que está presente no BOX1. No nó de decisão de roteamento, o pacote ainda será aceito para roteamento, de modo que passe adiante?
Eu vejo que o roteamento não é feito e o pacote é pensado como um pacote local que está sendo DROPPED desde que não há regra apropriada para isso ...
Ouvi dizer que o mecanismo de rastreamento de conexão mantém dados referentes a pacotes submetidos ao NAT .. então, quando o endereço de origem do pacote é convertido de volta ao endereço de destino original?
Verifique a imagem do fluxo de pacotes do netfilter para obter mais esclarecimentos
link
NOTA: Todas as minhas regras IPTABLE devem ser baseadas no endereço IP, mas não na interface, pois há uma chance de alteração nos nomes das interfaces, mas nos endereços IP.