Назад | Перейти на главную страницу

Петлевой интерфейс в Linux перехватывает весь петлевой трафик

На Linux-машине с обычным интерфейсом обратной петли:

$ ifconfig lo
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:36621784 errors:0 dropped:0 overruns:0 frame:0
          TX packets:36621784 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:6752024976 (6.2 GiB)  TX bytes:6752024976 (6.2 GiB)

когда я пингую любой адрес добавления в диапазоне 127.0.0.0/8, я получаю ответ:

$ ping -c1 127.7.23.4
PING 127.7.23.4 (127.7.23.4) 56(84) bytes of data.
64 bytes from 127.7.23.4: icmp_seq=1 ttl=64 time=0.045 ms

--- 127.7.23.4 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.045/0.045/0.045/0.000 ms

Такое поведение характерно для Linux, поскольку я не вижу его на моем компьютере Mac OS X Lion. У меня нет настройки псевдонимов IP для интерфейса обратной связи, чего я ожидал от этой работы.

Почему это происходит и ожидаемое поведение?

В Windows такое же поведение. Думаю, это разные интерпретации RFC 3330

127.0.0.0/8 - этот блок предназначен для использования в качестве адреса обратной связи узла Интернета. Дейтаграмма, отправленная протоколом более высокого уровня на адрес в любом месте этого блока, должна возвращаться внутри хоста. Обычно это реализуется с использованием только 127.0.0.1/32 для обратной связи, но никакие адреса в этом блоке никогда не должны появляться ни в какой сети где-либо [RFC1700, стр. 5].

Похоже, Linux интерпретирует это как означающее, что любой (даже ненастроенный адрес) в диапазоне 127.0.0.0/8 должен быть зациклен, и тогда вы получите ответ от ping.

Поведение задокументировано в RFC 1700. 127.7.23.4 также является адресом обратной связи и также назначается локальному компьютеру. (К чему еще это было бы назначено?)

IP-адрес :: = {<номер-сети>, <номер-хоста>}
...
{127, <любой>}
Внутренний адрес обратной связи хоста. Никогда не должен появляться вне хоста.

Не требуется, чтобы все адреса в этом диапазоне работали, но это особенно удобно при работе с протоколами, которые не позволяют указывать порт, а только IP-адрес. Наличие нескольких локальных IP-адресов позволяет запускать несколько экземпляров этих серверов для локального использования.

Это действительно специфично для Linux (и, возможно, другой ОС).

Но когда вы читаете RFC 1700 или lo netmask, петлевую сеть следует рассматривать как класс A.

Довожу до вашего сведения:

  • Ящики BSD (как Mac OS X) ограничены 127.0.0.1/32 (то есть только 127.0.0.1, согласно RFC 3300 - сентябрь 2002 г.).

  • Окно Windows отвечает на 127.0.0.0/8 (то есть от 127.0.0.1 до 127.254.255.255).

Итак, на этот раз похоже, что Windows была права (до 2002 года);)