IP Sniffer / filtro / manipulador de pacotes usando interface TUN

3

Em resumo

Pacotes que são lidos a partir de uma interface TUN, não são encontrados quando são gravados na mesma interface TUN.

Na íntegra

Cenário:

Em uma máquina com apenas 1 NIC (eth0) conectada à Internet, escrevi um aplicativo que lê pacotes IP da interface TUN; então pode:

  • escreve o pacote sem qualquer alteração na mesma interface TUN
  • bloquear pacote
  • faça alterações no pacote (por exemplo, criptografe sua carga útil) e grave o pacote manipulado de volta na interface TUN.

Concluído:

Eu passei pelos seguintes passos:

  1. Eu corro meu programa. Aloca e instancia o dispositivo TUN e aguarda para o dispositivo ser criado.
  2. Então eu executo os seguintes comandos:

    ifconfig tun0 up ifconfig tun0 10.0.0.2 route add -net 0.0.0.0 netmask 0.0.0.0 dev tun0 echo 1 > /proc/sys/net/ipv4/ip_forward

  3. Agora meu programa começa a ler os pacotes com sucesso (e imprime / registra seu conteúdo).

  4. Meu programa escreve o pacote sem qualquer alteração de volta ao dispositivo tun0

PROBLEMA :

Escreve o pacote de volta, não encontra o seu caminho de volta para ir, por exemplo, para a eth0 ou para a camada de aplicação. Por exemplo, quando eu executo um ping:

ping 4.2.2.4

e em outro terminal:

tshark -i tun0

Eu vejo que o tun0 vê o pacote de eco ICMP (também meu programa):

 10.0.0.2 → 4.2.2.4      ICMP 84 Echo (ping) request  id=0x14b1, seq=2/512, ttl=64
 10.0.0.2 → 4.2.2.4      ICMP 84 Echo (ping) request  id=0x14b1, seq=3/768, ttl=64
 10.0.0.2 → 4.2.2.4      ICMP 84 Unknown ICMP (obsolete or malformed?)

Meu programa escreve de volta o pacote para tun0 e tshark o vê (no snippet acima)

Mas a solicitação do ICMP não alcança eth0 para encontrar o caminho para 4.2.2.4 . IMHO há um problema com as regras de roteamento, mas não consegui descobrir como modificá-lo.

Qualquer comentário é bem-vindo, Atenciosamente

    
por Hamid 30.10.2016 / 09:05

1 resposta

0

é claro que há um problema com as regras de roteamento, você disse ao kernel para rotear todos os pacotes de tun0 :). Quando você envia o pacote de volta em tun0 , ele é roteado de volta para fora de tun0 , não de eth0 . Exceto que parece que no seu caso o pacote é descartado devido a "reverse path filter", isto é, ele se recusa a devolver pacotes da mesma interface em que eles entraram.

    
por 30.10.2016 / 10:43