Mam pole linuksowe Slackware, w którym nie mogę uruchomić żadnej usługi, która nasłuchuje na jednym porcie na localhost. Za pomocą strace dowiedziałem się, że błąd występuje podczas bind()
połączenia, a błąd jest następujący 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)
Dzieje się tak z każdym procesem, który próbuję rozpocząć nasłuchiwaniem na tym porcie, więc nie jest to związane z samym procesem. Powyższe dane wyjściowe strace pochodzą z polecenia strace -ff nc -l -p 874 -s 127.0.0.1
.
Sugeruje to, że proces już nasłuchuje na porcie lokalnym hosta 874. Jednak nie mogę go znaleźć. Następujące polecenia nic nie zwracają:
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
Jeśli spróbuję nasłuchiwać 0.0.0.0:874
, zakończy się niepowodzeniem z tym samym błędem. Słuchanie na jednym z adresów IP skonfigurowanych na nic działa OK, a słuchanie 127.0.0.2:874
również działa OK. Słuchanie na innym porcie działa dobrze, również na 127.0.0.1
lub 0.0.0.0
.
Więc teraz jestem ciekawa. Jak mogę dowiedzieć się, dlaczego stos sieci zwraca EADDRINUSE tutaj? Na jakie inne rzeczy mogę patrzeć lub jakie inne polecenia mogę uruchomić, aby uzyskać więcej informacji?
Dodatkowe informacje:
- Jądro 4.1.31.
- Selinux nie jest tutaj używany.
- Próba połączenia z 127.0.0.1 za pomocą usługi Telnet zwraca komunikat „Odmowa połączenia”
- Uruchamiam polecenia jako root
źródło
iptables -S
danych wyjściowych?netstat -na | grep 874
w przypadku aktualnenetstat
flagi są zbyt restrykcyjne.Odpowiedzi:
Jeśli twój host jest klientem NFS, może on używać źródłowego portu 874 do podłączenia NFS. Podejrzewam, że ponieważ połączenie nie pochodzi z przestrzeni użytkownika, może nie być widoczne dla narzędzi, z których dotąd korzystałeś.
Rozważ jedno z poniższych:
sysctl
ssunrpc.min_resvport
isunrpc.max_resvport
(domyślnie 665 i 1023), aby zmienić zakres portów źródłowych używanych przez klienta NFSnoresvport
opcji montowania NFS, aby użyć zakresu nieuprzywilejowanego (może to mieć wpływ na bezpieczeństwo)źródło