netstat - เหตุใด IPv4 daemons จึงฟังพอร์ตที่แสดงรายการเฉพาะใน -A inet6


22

ฉันมีคอมพิวเตอร์ที่มี:

Linux superhost 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux

มันรัน Apache บนพอร์ต 80 บนทุกอินเตอร์เฟสและมันไม่แสดงขึ้นมาnetstat -planA inetอย่างไรก็ตามมันสามารถพบได้โดยไม่คาดคิดในnetstat -planA inet6:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::5672                 :::*                    LISTEN      2402/beam.smp   
tcp6       0      0 :::111                  :::*                    LISTEN      1825/rpcbind    
tcp6       0      0 :::9200                 :::*                    LISTEN      2235/java       
tcp6       0      0 :::80                   :::*                    LISTEN      2533/apache2    
tcp6       0      0 :::34611                :::*                    LISTEN      1856/rpc.statd  
tcp6       0      0 :::9300                 :::*                    LISTEN      2235/java       
...
tcp6       0      0 10.0.176.93:80          10.0.76.98:53704        TIME_WAIT   -               
tcp6       0      0 10.0.176.93:80          10.0.76.98:53700        TIME_WAIT   -               

ฉันสามารถเข้าถึงได้โดย TCP4 เพียงแค่ปรับตามที่เห็นด้านบน tcp6อย่างไรก็ตามแม้การเชื่อมต่อเหล่านี้จะอยู่ภายใต้ ทำไม?


1
ที่อยู่ IPv4 ทั้งหมดจะจับคู่กับที่อยู่ IPv6 โดยตรง (แต่ไม่ใช่ในทางกลับกัน) ดู: en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses
Patrick

4
โปรดหยุดใช้netstat? มันจะตาย - ทศวรรษที่ผ่านมา ใช้iproute2 'sss
mikeserv

คำตอบ:


16

โดยค่าเริ่มต้นหากคุณไม่ได้ระบุที่อยู่Listenพารามิเตอร์Apache มันจะจัดการที่อยู่ ipv6 โดยใช้IPv4-mapped IPv6ที่อยู่ คุณสามารถดูในApache ipv6

ผลลัพธ์ของnetstatไม่ได้หมายความว่า Apache ไม่ได้ฟังที่อยู่ IPv4 มันคือที่IPv4-mapped IPv6อยู่


มีบริการอื่น ๆ ที่รับฟังที่อยู่ IPv4 แต่มีการระบุว่าเป็น tcp6 โดย netstat เช่น ElasticSearch
Mischa Arefiev

ฉันเดาว่าคุณอ่านลิงค์วิกิพีเดียโดย @Patrick บริการทั้งหมดที่ใช้ที่อยู่ IPv6 ที่แมป IPv4 จะแสดงในtcp6เอาต์พุตของ netstat
beginer

14

เหตุผลนี้เป็นเพราะที่อยู่ IPv4 ทั้งหมดเป็นที่อยู่ IPv6 ที่อยู่ IPv6 จำนวนเล็กน้อยถูกตั้งค่าไว้เพื่อใช้สำหรับการแมปแบบหนึ่งต่อหนึ่งของที่อยู่ IPv4 ยกตัวอย่างเช่นที่อยู่ IPv4 สามารถเข้าถึงได้ผ่านทางอยู่192.0.2.128 IPv6 ::ffff:192.0.2.128สิ่งนี้ทำเพื่อให้แอปพลิเคชันใด ๆ ที่รองรับ IPv6 เท่านั้นยังคงสามารถฟังที่อยู่ IPv4 ได้ โปรดทราบว่าสิ่งนี้ไม่สามารถใช้สำหรับที่อยู่ IPv6 (ไม่แมป) เพื่อพูดคุยกับที่อยู่ IPv4 โดยไม่เกี่ยวข้องกับสิ่งอื่น ๆ เนื่องจาก IPv4 ไม่ทราบวิธีจัดการกับที่อยู่ IPv6 (คุณสามารถใช้ NAT หรือโซลูชันอื่น ๆ แม้ว่า)

เนื่องจากที่อยู่ IPv4 ทั้งหมดแสดงเป็น IPv6 เมื่อขอnetstatให้แสดงรายการแอปโดยใช้ IPv6 คุณจะได้รับ IPv4 ด้วย
มันอาจหมายถึง10.0.176.93เป็น::ffff:10.0.176.93หรือแม้กระทั่ง::ffff:a00:b05dแต่นักพัฒนาแอพลิเคชันเลือกที่จะแสดงให้เห็นว่ามันเป็นประสัญกรณ์ที่อยู่ IPv4 ปกติ


ขอบคุณ แต่นี่ไม่ได้ตอบว่าทำไมพวกเขาถึงไม่ปรากฏขึ้นเมื่อทำตามปกติ-A inet
Mischa Arefiev

ฉันเดาว่าเหตุผลที่การเชื่อมต่อการฟังนั้นถูกแสดงรายการเป็นซ็อกเก็ต tcp6 เป็นเพราะพวกเขาเป็นซ็อกเก็ต IPv6 จริง ๆ แต่ด้วยคุณสมบัติเพิ่มเติมที่พวกเขายังยอมรับการเชื่อมต่อ IPv4 หากกำหนดค่าให้ทำเช่นนั้น ซ็อกเก็ตถูกผูกไว้กับ INADDR_ANY6 และเมื่อการเชื่อมต่อ IPv4 มาในที่อยู่จะถูกแมปกับที่อยู่ IPv6 ด้วยคำนำหน้า :: ffff: 0000/96 นี่เป็นเพียงการใช้งานสำหรับที่อยู่ที่แมปเหล่านี้เท่านั้น ไม่ควรใช้กับสายไฟ
Johan Myréen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.