Por que meu pai está lento?

4

Nas últimas botas do meu Arch Linux, notei que não tinha acesso à rede. Estou usando um netctl profile para fornecer ao meu adaptador um endereço IPv4 estático, que por si só funciona bem.

Então eu dei uma olhada nos logs, e o erro foi:

Duplicate Address Detection is taking too long on interface 'enp0s25'

netctl , em seguida, sai com o código 1 , deixando a rede em um estado não configurado.

Detecção de endereço duplicado é um recurso do IPv6 e netctl usa quando o perfil contém esta linha:

IPv6=stateless

Qual deve configurar o IPv6 automaticamente. Alguém abriu um problema para isso no projeto do Github, onde o autor de netctl afirma:

[...] If DAD takes more than 3 seconds (the default) you either have a very complex or slow network, or a misconfiguration in it.

E:

It sounds like somethin in your network is not configured properly. [...]

Mas o que exatamente pode estar errado com minha rede? É uma infraestrutura muito simples, há apenas a combinação modem / roteador do meu ISP com 2 PCs, um pequeno número de dispositivos sem fio e alguns set-top boxes de TV digital. A qualidade da rede em minha casa é perfeitamente boa no geral, e o problema só começou há algumas semanas.

A solução atual é desativar o DAD ou aumentar o tempo limite, nenhum dos quais eu realmente gosto.

    
por MarioDS 27.03.2015 / 12:15

1 resposta

3

O DAD é inerentemente lento porque precisa funcionar sem feedback.

A maneira como o DAD funciona é que, antes de um endereço ser ativado em uma interface, uma solicitação de descoberta vizinha é enviada solicitando o endereço MAC do host que possui esse endereço IP.

Se o endereço for duplicado, o host que já tem o endereço responderá e o PAI falhará rapidamente.

Mas quando os endereços estão configurados corretamente, não haverá duplicação e, portanto, não haverá resposta para a solicitação.

Como o remetente não sabe a rapidez com que uma resposta retornará, ela precisa aguardar. A rapidez com que o DAD é concluído depende de quanto tempo o remetente foi configurado para aguardar uma resposta.

É importante notar que isso depende apenas da configuração do remetente da solicitação e não de como o restante da rede está configurado. Qualquer um que sugira que uma rede complicada pode atrasar o DAD provavelmente não entendeu como funciona.

É possível configurar uma máquina para enviar várias solicitações com um atraso entre e somente atribuir o endereço quando um determinado número de segundos tiver passado sem resposta. Tal configuração irá, obviamente, diminuir o DAD.

A chamada do sistema para atribuir um endereço IP a uma interface não bloqueia a espera pela conclusão do DAD. Mas se você continuar tentando ligar um soquete ao endereço antes que o DAD tenha concluído, ele falhará. Isso pode levar a uma condição de corrida, fazendo com que os serviços não sejam exibidos durante a inicialização. A mensagem de erro que você está vendo pode ter sido produzida por um pedaço de código destinado a aguardar a conclusão do DAD para evitar essa condição de corrida. Um bug que é fácil de introduzir em tal código é tê-lo esperando para o DAD completar quando o DAD já falhou devido a um endereço duplicado.

Em algumas situações, a melhor maneira de lidar com os problemas causados pelo DAD é simplesmente desabilitar o DAD. No entanto, você deve primeiro verificar se você não tem um endereço duplicado. Se você tiver um endereço duplicado, habilitar, desabilitar ou reconfigurar o DAD não resolverá seus problemas.

Se o seu sistema deve ser o único usuário legítimo de um endereço IP e algum outro nó está respondendo a pedidos de ND para esse IP, então o problema que você está enfrentando é o spoofing de ND e esse é o primeiro problema que você precisa resolver .

Se, no entanto, você tiver um cenário no qual os endereços IP são configurados dinamicamente e um endereço IP puder ser legitimamente reivindicado por qualquer um dos vários nós, o uso do DAD pode ajudar a evitar conflitos e não deve ser desativado.

    
por 28.03.2015 / 16:19