เหตุใดฉันจึงไม่สามารถ ping ที่อยู่ในอุปกรณ์ลูปแบ็คภายใต้ FreeBSD


10

จากวิกิพีเดีย :

ที่อยู่ IP ที่ใช้บ่อยที่สุดบนอุปกรณ์ลูปแบ็คคือ 127.0.0.1 สำหรับ IPv4 แม้ว่าที่อยู่ใด ๆ ในช่วง 127.0.0.0 ถึง 127.255.255.255 จะถูกแมปกับมัน

สิ่งนี้ไม่เป็นความจริงอย่างน้อยใน FreeBSD:

$ ping 127.1.1.1
PING 127.1.1.1 (127.1.1.1): 56 data bytes
ping: sendto: Can't assign requested address

พฤติกรรมนี้ถูกต้องหรือไม่

คำตอบ:


9

FreeBSD (เช่น OS X และฉันเชื่อว่า NetBSD & OpenBSD) จะตอบสนองต่อคำขอที่ส่งไปยังที่อยู่ที่กำหนดค่าบนอินเทอร์เฟซแบบวนกลับเช่นเดียวกับที่ทำกับที่อยู่ในอินเทอร์เฟซอื่น ๆ - หากคุณต้องการคำตอบ :

mgraziano@monitor ~]$ ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 
    inet6 ::1 prefixlen 128 
    inet 127.0.0.1 netmask 0xff000000 
    nd6 options=3<PERFORMNUD,ACCEPT_RTADV>

[mgraziano@monitor ~]$ ping 127.1.1.1
PING 127.1.1.1 (127.1.1.1): 56 data bytes
ping: sendto: Can't assign requested address
^C

[mgraziano@monitor ~]$ sudo ifconfig lo0 alias 127.1.1.1 netmask 0xFFFFFFFF

[mgraziano@monitor ~]$ ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 
    inet6 ::1 prefixlen 128 
    inet 127.0.0.1 netmask 0xff000000 
    inet 127.1.1.1 netmask 0xffffffff 
    nd6 options=3<PERFORMNUD,ACCEPT_RTADV>

[mgraziano@monitor ~]$ ping 127.1.1.1
PING 127.1.1.1 (127.1.1.1): 56 data bytes
64 bytes from 127.1.1.1: icmp_seq=0 ttl=64 time=0.020 ms
^C

บนตรรกะที่อยู่เบื้องหลังการใช้งานนี้ให้ดูRFC 3330 :

127.0.0.0/8 - บล็อกนี้ถูกกำหนดให้ใช้เป็นที่
อยู่ลูปแบ็คโฮสต์อินเทอร์เน็ต ดาตาแกรมที่โปรโตคอลระดับสูงกว่าส่งไปยังที่
อยู่ที่ใดก็ได้ภายในบล็อกนี้ควรวนกลับเข้าไปในโฮสต์
โดยปกติจะมีการใช้งานโดยใช้เพียง 127.0.0.1/32 สำหรับลูปแบ็
แต่ไม่ควรมีที่อยู่ในบล็อกนี้ในเครือข่ายใด ๆ
[ RFC1700 , หน้า 5]

(ฉันเน้น)
Linux และ Windows กำลังเป็น "ประโยชน์" ที่นี่ แต่จากเก้าอี้ของฉันตอบคำขอที่ถูกส่งไปยังที่อยู่ที่ไม่ได้กำหนดให้กับโฮสต์นี้ไม่ได้ทำงานที่ถูกต้อง ...


7

ฉันเห็นพฤติกรรมเดียวกับที่คุณอธิบายบน FreeBSD 8.1 Mac OS X ซึ่งใช้ DNA บางตัวร่วมกับ FreeBSD ดูเหมือนว่าจะทำแผนที่ 127.0.0.1 เท่านั้น

Windows 7 และ Linux (เดเบียนที่มีเคอร์เนล 2.6.26) ทั้งคู่ปรากฏขึ้นเพื่อแมปช่วงที่อยู่แบบเต็มตามที่คุณอธิบายในใบเสนอราคา Wikipedia (และตามที่กำหนดไว้ใน RFC)

อ้างจาก RFC 3330:

127.0.0.0/8 - บล็อกนี้ถูกกำหนดให้ใช้เป็นที่อยู่ลูปแบ็คโฮสต์อินเทอร์เน็ต ดาตาแกรมที่โปรโตคอลระดับสูงกว่าส่งไปยังที่อยู่ที่ใดก็ได้ภายในบล็อกนี้ควรวนกลับเข้าไปในโฮสต์ โดยปกติจะมีการใช้งานโดยใช้เพียง 127.0.0.1/32 สำหรับลูปแบ็ค แต่ไม่ควรมีที่อยู่ในบล็อกนี้ในเครือข่ายใด ๆ [RFC1700, หน้า 5]

ขึ้นอยู่กับว่าคุณตีความคำว่า "ควร" อย่างเคร่งครัดบางคนอาจทำให้กรณีที่พฤติกรรม FreeBSD / MacOS ผิด แต่ด้วยการใช้งานที่แพร่หลายของ 127.0.0.1 เป็นที่อยู่ลูปแบ็คฉันสงสัยว่ามันเป็นเรื่องสำคัญ


3
+1 โดยค่าเริ่มต้นเฉพาะ 127.0.0.1 ถูกกำหนดให้กับ lo0 แม้ว่าคุณสามารถเพิ่มส่วนที่เหลืออย่างแน่นอน; ฉันไม่สามารถจินตนาการถึงสถานการณ์มากมายที่มันจะสำคัญ
Chris S

นอกจากนี้ยังขึ้นอยู่กับวิธีที่คุณตีความ "วนกลับภายในโฮสต์" หมายความว่าดาตาแกรมนั้นจะถูกส่งไปที่ใดที่หนึ่งที่มีความหมายอย่างแท้จริงหรือไม่ หรือสิ่งที่ตามมาใน RFC นั้นดาตาแกรมจะไม่ถูกส่งไปยังโฮสต์อื่นบนเครือข่าย (ฉันจะเห็นด้วยกับ FreeBSD และดาร์วินหลัง)
Chris S

นอกจากนี้ยังขึ้นอยู่กับวิธีที่คุณดู "ความถูกต้อง" ในการตอบคำขอที่อยู่ที่ไม่ได้มอบหมายให้คุณอย่างชัดเจน - ฉันรู้สึกเสมอว่าถ้าที่อยู่ดังกล่าวไม่ได้ถูกมอบหมายให้กับคุณ ด้วยข้อยกเว้นที่เป็นไปได้ของคำขอออกอากาศ
voretaq7

นอกจากนี้ยัง +1 สำหรับ quoting เดียวกัน RFC ฉันได้ :)
voretaq7

2
@ voretaq7 ฉันเสนอราคาทั้งหมดก่อน :)
eaj

0

แนวโน้มแนวโน้ม ไม่มีกล่อง FreeBSD ที่สะดวกในการยืนยันว่าเป็น FreeBSD หรือการกำหนดค่าของคุณ

RFC กล่าวว่า 127.0.0.1/24 - ดังนั้นควรตอบสนอง


1
ที่จริง RFC บอกว่า 127.0.0.0/8 แต่ไม่ได้ระบุที่อยู่เฉพาะในช่วงที่จะใช้: โดยกำหนดที่อยู่ที่ใช้งานได้ครั้งแรกในช่วงนั้น (127.0.0.1) ได้รับมอบหมายเป็นlocalhostแต่คุณสามารถใช้ 127.32 .194.75 ในการติดตั้งระบบปฏิบัติการของคุณเองหากคุณต้องการ (การทำเช่นนั้นอาจทำให้คุณได้รับการลงโทษจาก sysadmins โกรธ…)
voretaq7

0

คำถามได้รับคำตอบอย่างสมบูรณ์ประมาณสามครั้งในตอนนี้ดังนั้นฉันต้องการเพียงแค่เพิ่มเซนต์

โปรดทราบว่าสำหรับการกำหนดค่าเริ่มต้น ipfw ค่อนข้างจะลดลงแพ็คเก็ตชนิดนี้:

./rc.firewall:  ${fwcmd} add 100 allow ip from any to any via lo0
./rc.firewall:  ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any

ดังนั้นด้วยไฟร์วอลล์ที่เปิดใช้งานแทน

ping: sendto: Can't assign requested address

คุณอาจได้รับ

[savetherbtz@PH34R ~]$ ping 127.0.0.2
PING 127.0.0.2 (127.0.0.2): 56 data bytes
ping: sendto: Permission denied

PS สาเหตุอาจเกิดจากเซิร์ฟเวอร์ที่ไม่มีINET(รองรับ IPv4) และคุณจะไม่ได้เท่ากับ127.0.0.1=)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.