Rastreando o pacote na pilha de rede do Linux

3

Existe alguma possibilidade de rastrear um pacote através de todas as camadas de rede dentro do kernel Linux ? Estou ciente do SystemTap, mas estou procurando ver se há outra solução (mais de alto nível).

O problema que estou enfrentando é o seguinte: Eu tenho uma máquina agindo como um roteador, com várias interfaces, uma ponte, um firewall com várias regras e algum roteamento avançado usando tabelas personalizadas. Algumas respostas de pacotes de entrada não são entregues a um processo local (mesmo que eu as veja com o tcpdump) e é difícil descobrir se elas estão perdidas devido a roteamento, firewall ou outra causa.

Então, estou procurando algo para ajudar com isso, uma ferramenta que pode "rastrear pacotes que chegam na interface X, a partir de abcd" e produzir uma saída de como o pacote viajou pelas camadas da rede e onde foi descartado ou entregue ou saiu do sistema. Como um strace para pacotes.

Algo parecido existe?

EDIT: adicionou mais detalhes para maior clareza.

    
por Unknown 20.01.2017 / 14:30

1 resposta

1

Você pode obter informações sobre a travessia de pacotes na pilha do Kernel do Linux sondando os contadores de estatísticas / SNMP exportados pelo kernel para o userspace. Por exemplo, por "netstat -s" (ou também por "cat / proc / net / snmp", que é um pouco menos fácil de ler). Por exemplo, se houve algum erro devido ao cabeçalho IPv4 incorreto, InHdrErrors será incrementado e "cat / proc / net / snmp" mostrará que este erro ocorreu; olhar na quarta coluna que você começa quando você executa "cat / proc / net / snmp" (que é chamado "InHdrErrors") Ip: Forwarding DefaultTTL InReceives InHdrErrors InAddrErrors

Se você olhar no código do kernel, você verá isso no método ip_recv (), que é o manipulador para o tráfego IPv4, há uma verificação do tamanho mínimo do cabeçalho ou de que o membro da versão
no cabeçalho IPv4 é "4", e se não for assim, o contador IPSTATS_MIB_INHDRERRORS é incrementado:

Veja: link link link

E, claro, existem outros tipos de erros, e também há contadores SNMP / stats para Travessia normal de um pacote na pilha do kernel Linux, que você pode explorar ao executar "netstat -s" e / ou "cat / proc / net / snmp".

Rami Rosen

    
por 21.01.2017 / 14:51