Come eseguire il debug della rete Linux: indirizzo già in uso


10

Ho un box Linux Slackware in cui non riesco ad avviare alcun servizio in ascolto su una porta particolare su localhost. Usando strace ho scoperto che l'errore si verifica sulla bind()chiamata e l'errore è 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)

Questo succede con qualsiasi processo che provo ad iniziare ad ascoltare su quella porta, quindi non è correlato al processo stesso. L'output di strace sopra viene dal comando strace -ff nc -l -p 874 -s 127.0.0.1.

Quindi, questo suggerisce che esiste già un processo in ascolto sulla porta localhost 874. Tuttavia, non riesco a trovarlo. I seguenti comandi non restituiscono nulla:

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 provo ad ascoltarlo 0.0.0.0:874fallisce con lo stesso errore. L'ascolto su uno degli indirizzi IP configurati su nic funziona bene e l'ascolto 127.0.0.2:874funziona anche bene. L'ascolto su una porta diversa funziona bene, anche su 127.0.0.1o 0.0.0.0.

Quindi, ora sono curioso. Come posso scoprire perché lo stack di rete restituisce EADDRINUSE qui? Quali altre cose potrei guardare o quali altri comandi posso eseguire per ottenere maggiori informazioni?

Informazioni addizionali:

  • Kernel 4.1.31.
  • Selinux non è usato qui.
  • Tentativo di connessione a 127.0.0.1 con ritorni telnet "Connessione rifiutata"
  • Sto eseguendo i comandi come root

1
La porta è menzionata da qualche parte iptables -Snell'output?
hertitu,

1
Puoi per favore stampare anche l'output di strace -ff nc -l 874 , quello che hai usato sta cercando di stabilire connessioni con 874 come porta sorgente. Grazie!
Anirudh Malhotra,

2
AFAIK Linux richiede i privilegi di root quando si ascolta una porta <1000. Forse questo è il problema qui.
Koraktor,

2
Questo host è un client NFS? Potrebbe utilizzare la porta di origine 874 per un montaggio NFS. Comunque proverei netstat -na | grep 874nel caso in cui le tue netstatbandiere attuali siano troppo restrittive.
Tom Shaw,

1
@TomShaw Hai appena fatto la mia giornata! Andava bene NFS . Non sono sicuro di come sia successo esattamente, ma dopo aver smontato tutti i montaggi NFS e aver riavviato i servizi RPC e NFS il problema è sparito. Con tcpdump ho anche visto un po 'di traffico dalla porta 874 alla porta 111 (perché non ci avevo pensato prima) che lo conferma. Puoi inviarlo come risposta per favore?
roelvanmeer,

Risposte:


4

Se il tuo host è un client NFS, potrebbe utilizzare la porta di origine 874 per un mount NFS. Sospetto che, poiché la connessione non proviene dallo spazio utente, potrebbe non essere visibile agli strumenti che hai usato finora.

Considera uno dei seguenti:

  • Regolare la sysctls sunrpc.min_resvporte sunrpc.max_resvport(di default 665 e 1023) per modificare l'intervallo di porte di origine che utilizza il client NFS
  • Utilizzare una porta di ascolto al di fuori di questo intervallo
  • Utilizzare l' noresvportopzione sul mount NFS per utilizzare l'intervallo non privilegiato (potrebbe avere implicazioni per la sicurezza)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.