मैं FreeBSD के तहत लूपबैक डिवाइस पर एक पता क्यों नहीं डाल सकता हूं?


10

से विकिपीडिया :

लूपबैक डिवाइस पर सबसे अधिक उपयोग किया जाने वाला IP पता IPv4 के लिए 127.0.0.1 है, हालाँकि 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]।

(जोर मेरा)
लिनक्स और विंडोज यहां "सहायक" हो रहे हैं, हालांकि मेरी कुर्सी से एक अनुरोध का जवाब जो इस मेजबान को नहीं सौंपा गया एक पते पर भेजा गया है, सही व्यवहार नहीं है ...


7

मुझे वही व्यवहार दिखाई देता है जिसका वर्णन आप FreeBSD 8.1 पर करते हैं। मैक ओएस एक्स, जो फ्रीबीएसडी के साथ कुछ डीएनए साझा करता है, वह भी केवल 127.0.0.1 मैप करता है।

विंडोज 7 और लिनक्स (2.6.26 कर्नेल के साथ डेबियन) दोनों विकिपीडिया उद्धरण (और RFC में निर्धारित) के अनुसार पूर्ण पता सीमा को मैप करते हैं।

RFC 3330 से उद्धृत करने के लिए:

127.0.0.0/8 - यह ब्लॉक इंटरनेट होस्ट लूपबैक पते के रूप में उपयोग के लिए सौंपा गया है। इस ब्लॉक में कहीं भी एक उच्च स्तर के प्रोटोकॉल द्वारा भेजे गए डेटाग्राम को होस्ट के अंदर वापस लूप करना चाहिए। यह आमतौर पर लूपबैक के लिए केवल 127.0.0.1/32 का उपयोग करके लागू किया जाता है, लेकिन इस ब्लॉक के भीतर कोई भी पता कभी भी किसी भी नेटवर्क पर दिखाई नहीं देना चाहिए [RFC1700, पृष्ठ 5]।

निर्भर करता है कि आप शब्द की कितनी सख्ती से व्याख्या करते हैं ", कुछ को यह मामला हो सकता है कि फ्रीबीएसडी / मैकओएस व्यवहार गलत है। लेकिन लूपबैक पते के रूप में 127.0.0.1 के सर्वव्यापी उपयोग को देखते हुए, मुझे संदेह है कि यह मामला होने की संभावना है।


3
+1 डिफ़ॉल्ट रूप से केवल 127.0.0.1 को lo0 को सौंपा गया है। यद्यपि आप निश्चित रूप से बाकी जोड़ सकते हैं; मैं कई स्थितियों की कल्पना नहीं कर सकता जहां यह बात होगी।
क्रिस एस

यह इस बात पर भी निर्भर करता है कि आप "होस्ट के अंदर लूप बैक" की व्याख्या कैसे करते हैं। क्या इसका तात्पर्य यह है कि डेटाग्राम सार्थक रूप से वितरित किया जाएगा; या बस RFC में इस प्रकार है, कि डेटाग्राम नेटवर्क पर किसी अन्य होस्ट को वितरित नहीं किया जाएगा। (मैं FreeBSD और डार्विन, बाद के साथ सहमत हूँ)
क्रिस एस

यह इस बात पर भी निर्भर करता है कि आप एक पते पर अनुरोधों के जवाब देने की "शुद्धता" को कैसे देखते हैं, जो आपको स्पष्ट रूप से सौंपा नहीं गया है - मैंने हमेशा महसूस किया है कि यदि पता आपको नहीं सौंपा गया है, तो आपके पास कोई व्यवसाय नहीं है, क्योंकि यह आपका है। प्रसारण अनुरोधों के संभावित अपवाद के साथ।
voretaq7

इसके अलावा +1 मैंने उसी RFC को उद्धृत करने के लिए :)
voretaq7

2
@ voretaq7 मैंने इसे पहले उद्धृत किया। :)
ईज

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 config इस तरह के पैकेट को छोड़ देता है:

./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

पुनश्च। बिना सर्वर के बनाया जा सकता है INET(IPv4 सपोर्ट) और आपके पास भी नहीं होगा 127.0.0.1=)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.