Linux ağında hata ayıklama: Adres zaten kullanılıyor


10

Localhost üzerinde belirli bir bağlantı noktasını dinleyen herhangi bir hizmeti başlatamıyorum bir Slackware linux kutusu var. Strace kullanarak hatanın bind()çağrıda gerçekleştiğini ve hatanın 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)

Bu, bu bağlantı noktasını dinlemeye başlamaya çalıştığım herhangi bir işlemde olur, bu nedenle işlemin kendisiyle ilgili değildir. Yukarıdaki strace çıkışı komuttan gelir strace -ff nc -l -p 874 -s 127.0.0.1.

Yani, bu zaten localhost port 874'te dinleyen bir süreç olduğunu gösteriyor. Ancak, bulamıyorum. Aşağıdaki komutların hiçbiri döndürmez:

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

Dinlemeye çalışırsam 0.0.0.0:874aynı hatayla başarısız olur. Bir nic üzerinde yapılandırılmış IP adreslerinden birinde dinlemek TAMAM, ve dinlemek 127.0.0.2:874de TAMAM. Farklı bir bağlantı noktasında dinleme, 127.0.0.1veya üzerinde de iyi çalışır 0.0.0.0.

Şimdi merak ediyorum. Ağ yığınının neden EADDRINUSE döndürdüğünü nasıl öğrenebilirim? Başka hangi şeylere bakabilirim veya daha fazla bilgi almak için başka hangi komutları çalıştırabilirim?

İlave bilgi:

  • Çekirdek 4.1.31.
  • Selinux burada kullanılmıyor.
  • Telnet ile 127.0.0.1'e bağlanmaya çalışmak "Bağlantı reddedildi"
  • Komutları root olarak çalıştırıyorum

1
Bağlantı noktasının iptables -Sçıktıda herhangi bir yeri var mı?
hertitu

1
Ayrıca strace -ff nc -l 874 çıktısını da yazdırabilir misiniz, kullandığınız 874 ile kaynak bağlantı noktası olarak bağlantı kurmaya çalışıyor. Teşekkürler!
Anirudh Malhotra

2
AFAIK Linux, <1000 bağlantı noktasını dinlerken kök ayrıcalıklarına ihtiyaç duyar. Belki de sorun budur.
Koraktor

2
Bu ana bilgisayar bir NFS istemcisi mi? Bir NFS montajı için kaynak bağlantı noktası 874 kullanıyor olabilir. Her neyse netstat -na | grep 874, mevcut netstatbayraklarınızın çok kısıtlayıcı olması durumunda denerdim .
Tom Shaw

1
@TomShaw Daha yeni günümü yaptın! Öyleydi NFS tamam. Bunun tam olarak nasıl gerçekleştiğinden emin değilim, ancak tüm NFS bağlarını çıkardıktan ve RPC ve NFS hizmetlerini yeniden başlattıktan sonra sorun ortadan kalktı. Tcpdump ile de 874 numaralı bağlantı noktasından 111 numaralı bağlantı noktasına (neden daha önce bunu düşünmedim) trafik onayladı. Bunu cevap olarak gönderebilir misiniz lütfen?
roelvanmeer

Yanıtlar:


4

Ana makineniz bir NFS istemcisiyse, NFS montajı için kaynak bağlantı noktası 874 kullanıyor olabilir. Bağlantının kullanıcı alanından kaynaklanmadığından, şimdiye kadar kullandığınız araçlar tarafından görülemeyebileceğinden şüpheleniyorum.

Aşağıdakilerden birini düşünün:

  • NFS istemcisinin kullandığı kaynak bağlantı noktası aralığını değiştirmek için sysctls sunrpc.min_resvportve sunrpc.max_resvport(varsayılan 665 ve 1023) ayarlarını yapın
  • Bu aralığın dışında bir dinleme bağlantı noktası kullanın
  • Kullanım noresvportNFS olmayan ayrıcalıklı aralığını kullanmak için monte seçeneği (güvenlik sorunlarına neden olabilir)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.