리눅스 네트워킹을 디버깅하는 방법 : 이미 사용중인 주소


10

localhost의 특정 포트에서 수신 대기하는 서비스를 시작할 수없는 Slackware Linux 상자가 있습니다. strace를 사용하여 bind()호출에서 오류가 발생하고 오류는 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)

이것은 해당 포트에서 청취를 시작하려는 프로세스에서 발생하므로 프로세스 자체와 관련이 없습니다. 위의 strace 출력은 명령에서 나옵니다 strace -ff nc -l -p 874 -s 127.0.0.1.

따라서 로컬 호스트 포트 874에서 이미 수신 대기중인 프로세스가 있음을 나타냅니다. 그러나 찾을 수없는 것 같습니다. 다음 명령은 모두 아무것도 반환하지 않습니다.

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

들어 보려고 0.0.0.0:874하면 같은 오류로 실패합니다. nic에 구성된 IP 주소 중 하나를 수신하면 문제없이 127.0.0.2:874작동 하며, 수신 상태 에서도 작동합니다. 다른 포트에서 수신해도 127.0.0.1또는 에서 제대로 작동합니다 0.0.0.0.

그래서 지금 궁금합니다. 여기서 네트워크 스택이 EADDRINUSE를 반환하는 이유를 어떻게 알 수 있습니까? 다른 정보 나 추가 정보를 얻기 위해 실행할 수있는 다른 명령은 무엇입니까?

추가 정보:

  • 커널 4.1.31.
  • Selinux는 여기서 사용되지 않습니다.
  • 텔넷으로 127.0.0.1에 연결하려고하면 "연결이 거부되었습니다"
  • 루트로 명령을 실행하고 있습니다

1
iptables -S출력에 포트가 언급되어 있습니까?
hertitu

1
strace -ff nc -l 874의 출력도 인쇄 할 수 있습니까? 사용한 포트는 874를 소스 포트로 연결하려고합니다. 감사!
Anirudh Malhotra

2
AFAIK Linux는 포트 <1000을 청취 할 때 루트 권한이 필요합니다. 아마도 이것이 문제 일 것입니다.
Koraktor

2
이 호스트는 NFS 클라이언트입니까? NFS 마운트에 소스 포트 874를 사용 중일 수 있습니다. 어쨌든 나는 netstat -na | grep 874현재 netstat플래그가 너무 제한적인 경우를 시도 합니다 .
Tom Shaw

1
@TomShaw 방금 하루를 보냈습니다! NFS 는 괜찮 습니다. 이것이 어떻게 발생했는지 확실하지 않지만 모든 NFS 마운트를 마운트 해제하고 RPC 및 NFS 서비스를 다시 시작하면 문제가 사라집니다. tcpdump를 사용하면 포트 874에서 포트 111까지의 트래픽 (이전에는 생각하지 않은 이유)을 확인했습니다. 이것을 답변으로 게시 할 수 있습니까?
roelvanmeer

답변:


4

호스트가 NFS 클라이언트 인 경우 NFS 마운트에 소스 포트 874를 사용 중일 수 있습니다. 연결이 사용자 공간에서 시작되지 않았기 때문에 지금까지 사용한 도구에는 표시되지 않을 수 있습니다.

다음 중 하나를 고려하십시오.

  • NFS 클라이언트가 사용하는 소스 포트의 범위를 변경 하려면 sysctls sunrpc.min_resvportsunrpc.max_resvport(기본값 665 및 1023)을 조정하십시오.
  • 이 범위 밖의 청취 포트를 사용하십시오
  • noresvport권한이없는 범위를 사용하려면 NFS 마운트 의 옵션을 사용하십시오 (보안에 영향을 줄 수 있음)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.