Iptables não parece estar aplicando SNAT aos pacotes enviados em um soquete bruto

2

Estou enviando pacotes de um programa de espaço do usuário para minha interface sem fio wlan0. Eu configurei uma regra SNAT com o iptables da seguinte forma

iptables -t nat -A POSTROUTING -o wlan0 -j SNAT --to 192.168.1.3

E funciona para todo o tráfego normal que sai da minha máquina.

Estou trabalhando em um programa que precisa criar pacotes a partir da camada 2. O Iptables não está aplicando o SNAT a nenhum pacote da camada 3 enviado por este programa.

Existe alguma maneira de enviar pacotes no espaço do usuário da camada 2 e ainda ter NAT aplicado a eles?

Eu repostou isso de superusuário . Farei uma atualização se eu conseguir alguma coisa lá.

    
por Conor Patrick 06.08.2014 / 14:08

2 respostas

2

Quando os pacotes são enviados diretamente na interface Ethernet, eles não estarão passando pela camada IP na pilha de rede do kernel. Isso significa que não há iptables.

Você precisará obter o programa para gerar o pacote da maneira que deseja, ou precisará enviar o pacote através da camada IP na pilha da rede.

Existem algumas maneiras diferentes de obter o pacote na sua pilha de rede:

  • Envie para o endereço MAC de sua própria máquina, de forma que ele seja roteado pelo kernel e depois encaminhado de volta para a mesma interface.
  • Envie-o por meio de uma interface de rede virtual em vez de uma interface física.
  • Use um soquete na camada IP em vez da camada Ethernet.
por 06.08.2014 / 14:27
0

Raw Sockets contornam a pilha do netfilter, então o iptables não terá nenhum efeito sobre esses pacotes.

    
por 06.08.2014 / 14:27