Чому я не можу пінг адреси на пристрої циклу в 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, який поділяє деяку кількість ДНК з FreeBSD, також здається, що карта 127.0.0.1.

Windows 7 та Linux (debian з ядром 2.6.26), як видається, відображають повний діапазон адрес, як ви описуєте в цитаті Вікіпедії (і як це визначено в RFC).

Цитувати з RFC 3330:

127.0.0.0/8 - Цей блок призначений для використання в якості адреси зворотного зв'язку з хостом в Інтернеті. Данаграма, що надсилається протоколом вищого рівня на адресу в будь-якому місці цього блоку, повинна повертатися назад у хост. Зазвичай це реалізується, використовуючи лише 127.0.0.1/32 для зворотного зв'язку, але жодна адреса в цьому блоці ніколи не повинна з’являтися в будь-якій мережі будь-де [RFC1700, стор. 5].

Залежно від того, наскільки суворо ви трактуєте слово "слід", деякі можуть зробити так, що поведінка FreeBSD / MacOS неправильна. Але з огляду на повсюдне використання 127.0.0.1 в якості адреси зворотного зв'язку, я сумніваюся, це, мабуть, має значення.


3
+1 За замовчуванням для lo0 призначено лише 127.0.0.1. Хоча ви, звичайно, можете додати решту; Я не уявляю багатьох ситуацій, коли це мало б значення.
Chris S

Це також залежить від того, як ви інтерпретуєте "цикл назад всередині хоста". Чи означає це, що по суті означає, що дейтаграма буде доставлена ​​десь значущою; або просто, що випливає з RFC, що дейтаграма не буде доставлена ​​на інший хост у мережі. (Я погодився б із FreeBSD та Дарвіном, останній)
Chris S

Це також залежить від того, як ви бачите "правильність" відповідей на запити за адресою, яка не призначена вам явно - я завжди вважав, що якщо адреса не призначена для вас, у вас немає жодних ділових відповідей, як ніби це ваша, за можливим винятком запитів на трансляцію.
voretaq7

Також +1 за цитування того ж 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 у вашій власній реалізації ОС, якщо ви цього хочете. (Однак це може змусити вас лишитися розлюченими сисадмінами ...)
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)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.