Como depurar a rede linux: Endereço já em uso

10

Eu tenho uma caixa linux do Slackware onde não consigo iniciar nenhum serviço que escuta em uma porta específica no host local. Usando strace, descobri que o erro ocorre na chamada bind() e o erro é EADDRINUSE (Address already in use) :

bind(3, {sa_family=AF_INET, sin_port=htons(874), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EADDRINUSE (Address already in use)

Isso acontece com qualquer processo que eu tento começar a escutar nessa porta, por isso não está relacionado ao processo em si. A saída strace acima vem do comando strace -ff nc -l -p 874 -s 127.0.0.1 .

Então, isso sugere que há um processo que já está escutando na porta 874 do localhost. Entretanto, parece que não consigo encontrá-lo. Os seguintes comandos não retornam nada:

netstat -aplunt | grep :874
netstat -na | grep :874
lsof -i :874
lsof -i tcp | grep 874
fuser 874/tcp
socklist | grep 874
iptables -t filter -S | grep 874
iptables -t nat -S | grep 874
iptables -t mangle -S | grep 874
conntrack -L | grep 874

Se eu tentar ouvir em 0.0.0.0:874 , ele falhará com o mesmo erro. Ouvir em um dos endereços IP configurados em um nic funciona OK, e ouvir 127.0.0.2:874 também funciona OK. Ouvir em uma porta diferente funciona bem, também em 127.0.0.1 ou 0.0.0.0 .

Então, agora estou curioso. Como posso descobrir por que a pilha de rede retorna EADDRINUSE aqui? Que outras coisas eu poderia ver ou que outros comandos posso executar para obter mais informações?

Informação adicional:

  • Kernel 4.1.31.
  • Selinux não é usado aqui.
  • Tentando se conectar a 127.0.0.1 com o telnet retorna "Conexão recusada"
  • estou executando os comandos como root
por roelvanmeer 24.10.2016 / 08:24

1 resposta

4

Se o seu host for um cliente NFS, ele pode estar usando a porta de origem 874 para uma montagem NFS. Eu suspeito que, como a conexão não é originada do espaço do usuário, ela pode não estar visível para as ferramentas que você usou até agora.

Considere um dos seguintes procedimentos:

  • Ajuste o sysctl s sunrpc.min_resvport e sunrpc.max_resvport (padrão 665 e 1023) para alterar o intervalo de portas de origem que o cliente NFS usa
  • Use uma porta de escuta fora desse intervalo
  • Use a opção noresvport na montagem NFS para usar o intervalo não privilegiado (pode ter implicações de segurança)
por 26.10.2016 / 08:51