Injetar pacote para um NFQUEUE diferente

1

Eu tenho um NFQUEUE, para pacotes IPv6 ligados à cadeia PREROUTING da tabela mangle em ip6tables. Depois de receber um pacote no aplicativo do usuário, modifiquei o cabeçalho. Infact, modificou o cabeçalho de IPv6 para IPv4 e reinjectou o pacote. Mas, a partir dos logs, vejo que o pacote IPv4 está sendo tratado como um pacote IPv6.

  1. Como cada NFQUEUE é mapeado para AF_INET ou AF_INET6, é possível que um único NFQUEUE manipule os pacotes IPv4 e IPv6?

  2. É possível receber o pacote de uma fila, mas injetar em uma fila diferente? Não faz sentido, mas gostaria de injetar um pacote na pilha IP diretamente com o cabeçalho IP formatado no espaço do usuário.

    • Não é aconselhável usar soquetes brutos com IPv6 de acordo com a RFC 3542.
    • Não consigo usar o dispositivo TUN para problemas de desempenho. Muitos pacotes estão sendo descartados com dispositivos TUN.
por Aditya Kanchibhotla 19.02.2013 / 15:54

1 resposta

2

  1. Você pode usar uma única fila para IPv4 e IPv6 vinculando-se a ambos.

    por exemplo,

    nfq_bind_pf(h, AF_INET)
    

    então

    nfq_bind_pf(h, AF_INET6)
    

    Em seguida, a fila vai lidar com os dois e seis, você ainda precisa tornar o seu aplicativo 4/6 ciente para que ele possa analisar os cabeçalhos IP apropriadamente.

  2. Você pode passar o pacote para outra fila.

    Definindo NF_QUEUE juntamente com o número da fila em nfq_set_verdict . (os 16 bits altos do valor do veredicto são usados quando o bit inferior fornece o valor NF_QUEUE ).

por 09.06.2014 / 13:09