Interrupção temporária estranha da rede no Linux

8

Estou enfrentando um problema muito irritante que notei daqui a uma semana e para o qual não consigo encontrar uma resposta: minha rede de repente pára de responder, geralmente voltando exatamente 25 segundos depois. Eu estava usando o kernel 3.10.4 e agora migrou para o 3.11-rc4 para ver se algo mudou, mas não, o comportamento é o mesmo. E como é um problema difícil de detectar devido ao fato de a navegação na web estar em "rajadas" e a interrupção ser completamente aleatória, não posso dizer que esse problema também estava presente em um kernel anterior (eu sempre uso kernels não corrigidos do kernel.org, todos compilados por mim)

Eu não posso dizer o kernel é o culpado também, mas eu posso dizer que não há pistas sobre os logs do sistema (eu verifiquei ambos /var/log/sysloge /var/log/messagese não há nada de anormal lá) e que hardware não parece em falta, para os shows de problemas usando uma das minhas placas de rede:

lspci output:

02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5751 Gigabit Ethernet PCI Express (rev 01)
04:00.0 Ethernet controller: 3Com Corporation 3c905B 100BaseTX [Cyclone] (rev 30)

e eu já tentei trocar as portas do switch ethernet e ainda mais ninguém onde trabalho tem um problema, exceto eu (embora usemos máquinas semelhantes, sou o único que usa Linux, então tive que fazer algumas piadas infames sobre isso, pois bem ... hehe).

Corri o wireshark na minha máquina e o deixei pingando continuamente nosso gateway e outra máquina no mesmo segmento de rede. Então, ao primeiro sinal de mau funcionamento da rede, eu o verificava e o gateway parou de responder pings, mas a outra máquina ainda estava lá respondendo normalmente. Outras vezes, é a outra máquina que para de responder e o gateway está bom, e outras vezes as duas param de responder. Como não sei mais o que fazer, gostaria de alguma ajuda ou dicas sobre como depurar isso ainda mais, pois os logs do sistema são completamente normais.

Eu tenho o meu arquivo de configuração do kernel e um arquivo de captura do wireshark mostrando a situação. Posso postar aqui ou em algum site pastebin, caso alguém ache útil entender o caso, deixe-me saber o nível de detalhe que devo usar (acho que o nível de pacote sem os dados brutos seria suficiente).

Claudio
fonte
Isso parece muito com um conflito de endereço IP (ou seja, alguma outra máquina tem o mesmo endereço IP que o seu). Outros hosts alternam dependendo de qual deles recebeu uma resposta do ARP mais recentemente.
Gilles 'SO- stop be evil'
Gilles, tenho certeza de que meu IP é único na rede, mas, supondo que isso possa acontecer, ainda acho que não explicaria um host sendo executado normalmente enquanto o outro não (eles estão sendo executados simultaneamente). Você não concorda?
Claudio
@Gilles, você estava certo. Acabei de descobrir hoje que o telefone celular de alguém estava usando meu IP por meio de uma atribuição DHCP (meu IP é fixo, mas o pool DHCP estava sobreposto). Como eu disse, inicialmente rejeitei essa possibilidade porque era possível executar ping em outro host enquanto o primeiro estava inacessível, mas hoje mudei rapidamente meu IP enquanto tudo parava e meu IP estava sendo pingado de outra NIC. Por favor, mova seu comentário para uma resposta para que eu possa aceitá-lo? Você foi o primeiro a realmente responder, de qualquer maneira. Obrigado!
Cláudio

Respostas:

10

Os sintomas são consistentes com um conflito de endereço IP. Um conflito de endereço IP surge quando sua máquina e outra máquina na mesma rede estão tentando usar o mesmo endereço IP .

Em uma rede de link local, o endereçamento é baseado em endereços MAC . Toda placa Ethernet possui seu próprio endereço MAC (exceto mal configuração ou malícia). Um roteador que decide para onde enviar um pacote IP enviará uma solicitação ARP para o endereço IP de destino em todas as suas portas. Essa mensagem às vezes é conhecida como "quem tem": o roteador está tentando descobrir qual de seus pares é responsável por esse endereço IP. Depois que o roteador recebe uma resposta contendo um endereço MAC, ele pode criar e enviar um quadro Ethernet (pacote Ethernet) contendo o pacote IP para esse endereço MAC. Como essa troca demora um pouco, o roteador mantém um cache das informações recentes do ARP. (Existem outros tipos de mensagens ARP, mas o que expliquei aqui é suficiente para entender o presente problema.)

Em resumo, os roteadores precisam saber para qual dispositivo físico têm cada endereço IP para o qual estão enviando pacotes IP. Então, o que acontece quando há dois dispositivos reivindicando o mesmo endereço IP? O roteador recebe uma resposta de um dos dispositivos e, a partir de então, decide que esse endereço IP pertence a esse dispositivo, até que a entrada de cache correspondente expire. Depois que a entrada do cache expirar, o roteador enviará uma nova solicitação ARP e talvez o outro dispositivo responda mais rápido dessa vez. Isso explica por que essas situações são instáveis: um minuto em que o roteador está falando com você, e no minuto seguinte, conversando com o outro cara.

Se você executar ping continuamente em alguém, o roteador manterá seu endereço IP no cache ARP praticamente o tempo todo. Portanto, enquanto você executa ping, há apenas uma pequena janela durante a qual o outro cara pode substituí-lo no cache (após a entrada de cache expirar, antes do próximo ping). É por isso que observar o problema faz com que ele desapareça, o que pode ser frustrante até você perceber qual é o problema.

No seu caso, parece que o roteador local mantém as entradas no cache por 25 segundos. Quando você está no cache, é bom por 25 segundos. Às vezes, o outro cara chega, em momentos de aparência aleatória, e você fica fora por 25 segundos.

Quando você tenta entrar em contato com várias máquinas no mesmo link local, cada uma possui sua própria tabela ARP, para que você possa observar resultados inconsistentes, com uma máquina decidindo que você possui o endereço IP e outra máquina decidindo que o outro cara possui.

Os roteadores sofisticados registram conflitos de endereço IP; portanto, se você acha que está encontrando um, solicite a ajuda do administrador do sistema. Certifique-se primeiro de que não é sua máquina que está tentando usar um endereço IP que não deveria estar usando!

Gilles 'SO- parar de ser mau'
fonte
1
BTW: Você também pode arpingprocurar duplicatas, usando o ARP para o seu endereço IP. Você não deve obter respostas. Ou faça isso de outra máquina e você verá as duas respostas.
Derobert
1

Vou sugerir que você tenha 2 entradas "nameserver" /etc/resolv.confe a primeira entrada se refere a um servidor DNS inoperante ou inacessível ou algo assim periodicamente. O código do resolvedor na libc tentará o primeiro endereço IP do servidor de nomes, obterá um tempo limite e, em seguida, o segundo endereço IP do servidor de nomes, que será bem-sucedido.

Para testar isso, você pode substituir os endereços IP do "servidor de nomes" /etc/resolv.confpor apenas um, 8.8.8.8, que é o servidor DNS público do Google. Se a interrupção não ocorrer, seu servidor de nomes é o problema.

Bruce Ediger
fonte