วิธีแก้จุดบกพร่องเครือข่าย linux: มีการใช้ที่อยู่แล้ว


10

ฉันมีกล่อง Slackware linux ที่ฉันไม่สามารถเริ่มบริการใด ๆ ที่ฟังพอร์ตใดพอร์ตหนึ่งบน localhost โดยใช้ 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มันล้มเหลวด้วยข้อผิดพลาดเดียวกัน การฟังหนึ่งในที่อยู่ IP ที่กำหนดค่าบน nic ทำงานได้ดีและการฟัง127.0.0.2:874ก็ใช้ได้เช่นกัน ฟังบนพอร์ตที่แตกต่างกันทำงานได้ดียังอยู่หรือ127.0.0.10.0.0.0

ดังนั้นตอนนี้ฉันอยากรู้ ฉันจะรู้ได้อย่างไรว่าทำไมเครือข่ายสแต็คส่งคืน EADDRINUSE ที่นี่ ฉันสามารถดูสิ่งอื่นใดหรือคำสั่งอื่นใดที่ฉันสามารถเรียกใช้เพื่อรับข้อมูลเพิ่มเติม

ข้อมูลเพิ่มเติม:

  • เคอร์เนล 4.1.31
  • Selinux ไม่ได้ใช้ที่นี่
  • กำลังพยายามเชื่อมต่อกับ 127.0.0.1 ด้วย telnet ส่งคืน "การเชื่อมต่อถูกปฏิเสธ"
  • ฉันใช้คำสั่งเป็นรูต

1
มีการพูดถึงพอร์ตที่ใดก็ได้ในiptables -Sเอาต์พุตหรือไม่?
hertitu

1
คุณช่วยได้โปรดพิมพ์เอาต์พุตของstrace -ff nc -l 874ด้วยเช่นกันสิ่งที่คุณใช้พยายามเชื่อมต่อกับ 874 เป็นพอร์ตต้นทาง ขอบคุณ!
Anirudh Malhotra

2
AFAIK Linux ต้องการสิทธิ์รูทเมื่อรับฟังพอร์ต <1,000 อาจเป็นปัญหาที่นี่
Koraktor

2
โฮสต์นี้เป็นไคลเอ็นต์ NFS หรือไม่ อาจกำลังใช้พอร์ตต้นทาง 874 สำหรับการเมาท์ NFS อย่างไรก็ตามฉันจะลองnetstat -na | grep 874ในกรณีที่netstatสถานะปัจจุบันของคุณเข้มงวดเกินไป
Tom Shaw

1
@TomShaw คุณทำให้วันของฉัน! มันเป็นNFSทั้งหมด ฉันไม่แน่ใจว่าสิ่งนี้เกิดขึ้นได้อย่างไร แต่หลังจากยกเลิกการเมานต์ NFS ทั้งหมดและเริ่มบริการ RPC และ NFS อีกครั้งปัญหาจะหายไป ด้วย tcpdump ฉันยังเห็นทราฟฟิกจากพอร์ต 874 ถึงพอร์ต 111 (ทำไมฉันไม่คิดอย่างนั้นมาก่อน) ซึ่งยืนยัน คุณช่วยโพสต์สิ่งนี้เป็นคำตอบได้ไหม?
roelvanmeer

คำตอบ:


4

หากโฮสต์ของคุณคือไคลเอนต์ NFS อาจใช้พอร์ตต้นทาง 874 สำหรับการเมานต์ NFS ฉันสงสัยว่าเนื่องจากการเชื่อมต่อไม่ได้มาจาก userspace อาจไม่สามารถมองเห็นได้ในเครื่องมือที่คุณใช้มาแล้ว

พิจารณาข้อใดข้อหนึ่งต่อไปนี้:

  • ปรับsysctls sunrpc.min_resvportและsunrpc.max_resvport(ค่าดีฟอลต์ 665 และ 1023) เพื่อเปลี่ยนช่วงของพอร์ตต้นทางที่ไคลเอ็นต์ NFS ใช้
  • ใช้พอร์ตฟังนอกช่วงนี้
  • ใช้noresvportตัวเลือกบนเมาท์ NFS เพื่อใช้ช่วงที่ไม่มีสิทธิพิเศษ (อาจมีผลกระทบด้านความปลอดภัย)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.