Neden FreeBSD altındaki geridönüş aygıtında bir adrese ping atamıyorum?


10

Gönderen Vikipedi :

Geridöngü aygıtında en yaygın kullanılan IP adresi IPv4 için 127.0.0.1'dir, ancak 127.0.0.0 - 127.255.255.255 aralığındaki herhangi bir adres eşlenir.

Bu doğru değil, en azından FreeBSD'de:

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

Bu doğru bir davranış mı?

Yanıtlar:


9

FreeBSD (ayrıca OS X ve NetBSD ve OpenBSD'ye inanıyorum) geridönüş arabirimindeki yapılandırılmış adreslere gönderilen isteklere , diğer arabirimlerdeki adresler için olduğu gibi yanıt vereceğinden - Bir yanıt istiyorsanız, önce adresi atamanız gerekir :

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

Bu uygulamanın arkasındaki mantık için bkz. RFC 3330 :

127.0.0.0/8 - Bu blok, İnternet ana bilgisayarı
geri döngü adresi olarak kullanılmak üzere atanmıştır .
Bu blok içindeki herhangi bir adrese daha üst düzey bir protokol tarafından gönderilen bir datagram , ana bilgisayarın içinde geri dönmelidir.
Bu genellikle geri döngü için yalnızca 127.0.0.1/32 kullanılarak uygulanır ,
ancak bu bloktaki hiçbir adres hiçbir
yerde herhangi bir ağda görünmemelidir [ RFC1700 , sayfa 5].

(Vurgu benim)
Linux ve Windows burada "yardımcı" oluyor, ancak sandalyemden bu ana bilgisayara atanmamış bir adrese gönderilen bir talebi cevaplamak doğru davranış değil ...


7

FreeBSD 8.1'de açıkladığınız aynı davranışı görüyorum. FreeBSD ile bazı DNA'ları paylaşan Mac OS X de sadece 127.0.0.1 haritasını çıkarıyor gibi görünüyor.

Windows 7 ve Linux (2.6.26 çekirdekli debian), Wikipedia teklifinde (ve RFC'de belirtildiği gibi) tam adres aralığını eşleştiriyor gibi görünüyor.

RFC 3330'dan alıntı yapmak için:

127.0.0.0/8 - Bu blok, İnternet ana bilgisayarı geri döngü adresi olarak kullanılmak üzere atanmıştır. Bu blok içindeki herhangi bir adrese daha üst düzey bir protokol tarafından gönderilen bir datagram, ana bilgisayarın içinde geri dönmelidir. Bu genellikle geri döngü için yalnızca 127.0.0.1/32 kullanılarak uygulanır, ancak bu bloktaki hiçbir adres hiçbir yerde herhangi bir ağda görünmemelidir [RFC1700, sayfa 5].

"Zorunlu" kelimesini ne kadar kesin yorumladığınıza bağlı olarak, bazıları FreeBSD / MacOS davranışının yanlış olduğu anlamına gelebilir. Ancak geri döngü adresi olarak 127.0.0.1'in her yerde kullanımı göz önüne alındığında, önemli olması muhtemel olduğundan şüphe ediyorum.


3
+1 Varsayılan olarak lo0'a yalnızca 127.0.0.1 atanmıştır. Gerisini kesinlikle ekleyebilirsiniz; Bunun önemli olacağı birçok durumu hayal edemiyorum.
Chris S

Ayrıca, "ana makinenin içinde geri döngü" ifadesini nasıl yorumladığınıza da bağlıdır. Bu doğal olarak datagramın anlamlı bir yere iletileceği anlamına mı geliyor; ya da sadece RFC'den sonra gelenler, datagramın ağdaki başka bir ana bilgisayara teslim edilmeyeceğini belirtir. (FreeBSD ve ikincisi Darwin ile aynı fikirdeyim)
Chris S

Ayrıca, size açıkça atanmamış bir adresteki yanıtlama isteklerinin "doğruluğunu" nasıl görüntülediğinize de bağlıdır - Adres size atanmamışsa, yanıtları size aitmiş gibi iş göndermediğinizi her zaman hissettim, olası yayın istekleri hariç.
voretaq7

Ayrıca yaptığım aynı RFC alıntı için +1 :)
voretaq7

2
@ voretaq7 Önce tamamen alıntı yaptım. :)
eaj

0

Bu trend bucking. FreeBSD veya yapılandırmanızı onaylamak için kullanışlı bir FreeBSD kutunuz yok.

RFC 127.0.0.1/24 diyor - bu yüzden cevap vermelidir.


1
Aslında RFC 127.0.0.0/8 diyor, ancak bu aralıkta hangi belirli adreslerin kullanılacağını belirtmiyor: kural olarak, bu aralıktaki ilk kullanılabilir adres (127.0.0.1) olarak atanır localhost, ancak 127.32'yi kullanabilirsiniz .194.75 isterseniz kendi OS uygulamanızda. (Ancak bunu yapmak kızgın sysadmins tarafından linç olsun olabilir ...)
voretaq7

0

Soru şu ana kadar üç kez tamamen cevaplandı, bu yüzden sadece birkaç sent eklemek istedim.

Bir süre için varsayılan ipfw yapılandırmasının bu tür paketleri bıraktığını unutmayın:

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

yani yerine etkin güvenlik duvarı ile

ping: sendto: Can't assign requested address

alabilirsin

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

PS. Nedeni olmadan sunucu inşa edilebilir INET(IPv4 desteği) ve hatta 127.0.0.1=)

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.