Почему IP на фиктивном интерфейсе отвечает на запрос ARP на eth0

1403
davidgo

Я установил на своем ноутбуке (Ubuntu 15.10) фиктивный интерфейс с IP-адресом 10.0.3.144, маской 255.255.255.255

У меня есть USB -> Ethernet-адаптер. Когда он подключен, он настроен на предоставление интерфейса «eth0», который получает свой IP-адрес через DHCP в диапазоне 10.0.3.2 - 10.0.3.10 (маска сети 255.255.255.0)

Я замечаю, что когда появляется eth0 - например, на 10.0.3.2, другие машины могут достигать 10.0.3.144 - это желаемое поведение, но я не совсем понимаю, ПОЧЕМУ это происходит. У меня нет никакой настройки моста, поэтому я подумал бы, что машина не ответила бы за фиктивный интерфейс.

Я могу видеть запросы и ответы arp на интерфейсе ноутбука -

tcpdump -n -i eth0 arp tcpdump: подробный вывод подавлен, используйте -v или -vv для прослушивания полного декодирования протокола на eth0, тип канала EN10MB (Ethernet), размер захвата 262144 байта

tcpdump -n -i eth0 arp 14:01:31.948781 ARP, Request who-has 10.0.3.144 tell 10.0.3.254, length 48 14:01:31.948842 ARP, Reply 10.0.3.144 is-at 00:23:55:9c:52:31, length 28 

Это поведение повторяется, если я удаляю запись ARP на 10.0.3.254 (которая является маршрутизатором, также работающим под управлением Linux)

Кто-нибудь может посоветовать, могу ли я положиться на это поведение? (и почему компьютер будет отвечать на интерфейсе для IP-адреса, не связанного с ним - и, соответственно, - будет ли это иметь возможность при определенных обстоятельствах заполнять маршрутизацию в сценариях, где имеется несколько интерфейсов в разных подсетях, и пакеты должны быть вынужденным пересечь брандмауэр?).

2
* «почему компьютер отвечает через интерфейс за IP-адрес, не связанный с ним» * - это не обязательно так на хосте Linux. IP-адрес по умолчанию принадлежит хосту Linux, а не интерфейсу. Поиск "проблема потока ARP". sawdust 8 лет назад 1
Спасибо за это - это именно то, что мне было нужно. Если вы опубликуете это как ответ (может быть, ссылка на http://linux-ip.net/html/ether-arp.html или эквивалент), я приму это. davidgo 8 лет назад 0

2 ответа на вопрос

1
sawdust

почему компьютер отвечает на интерфейсе для IP-адреса, не связанного с ним

Это не обязательно верно для хоста Linux.
IP-адрес по умолчанию принадлежит хосту Linux, а не интерфейсу.
См. Linux рассматривает IP-адрес как принадлежащий хосту, а не интерфейсу

Эту «особенность» Linux иногда называют «проблемой потока ARP», и она описана в разделе 2.1.4 Протокола разрешения адресов (ARP)

Есть несколько способов изменить это поведение в Linux. В прошлом я исправлял ядро, чтобы устранить его. Другие методы менее навязчивы, как указано в LVS HOWTO .
Если вы ничего не делаете, то это поведение ARP должно быть последовательным.

0
TOOGAM

Other devices believe that 10.0.3.144 is part of the network. The 255.255.255.255 subnet mask (a.k.a. /24) specifies the network size of 256 addresses. With the way that subnets are laid out, the 256-address subnet that contains 10.0.3.2-10.0.3.10 is the subnet that goes from 10.0.3.0 through 10.0.3.255. So, when other devices try to communicate to 10.0.3.144, then that address appears to be part of the same subnet. As a result, other devices will try to communicate using Layer 2 (ARP, Ethernet/WiFi), not Layer 3 (routing using IPv4/IPv6).

The computer which receives the Layer 2 traffic is recognizing 10.0.3.144 to be part of a subnet that it uses. So the computer pays attention to the traffic, which is addressed to the computer. Perhaps at a later point, the computer might even realize that 10.0.3.144 is an IP address that is on the other NIC. Because Networking is implemented with different software components, designed to handle one or more of the "layers" of the OSI model, it is entirely possible that the component which recognized 10.0.3.144 to be a Layer 3 IP address is not the same set of instructions/code/programming that determined that the ARP address was acceptable.

Understand that computers do not typically have system-wide IP addresses. Network ports have IP addresses. So each network card typically gets its own IP address.

If you don't want the second network card to be receiving traffic, you may need to do one or more of these things:

  • set the IP address to be part of a different subnet. (Seeing a Variable Length Subnet Mask ("VLSM") chart may help to visualize what addresses are part of what subnets. The common charts typically just focus on the last octet, making the charts easiest to understand for /24 - /32 networks (where the first 3 octets of the IPv4 subnet mask are ("255.255.255").
  • Disabling forwarding may be helpful. I think different computers may act differently about whether traffic to a different NIC, on the same system, is considered to be "forwarding". If forwarding is enabled, then there should be even less surprise that traffic may have reached another NIC.
  • Firewalls may be useful for blocking some types of traffic. (Note that some firewalls may be limited. For instance, I happen to know that in OpenBSD, the DHCP client uses BPFs which don't get blocked by the IP firewall.)

To answer another question: Bridging can often be thought of as "Layer 2 forwarding". Layer 3 forwarding could also result in the traffic crossing to another NIC, even if you're not using Layer 2 bridging.

Regarding whether you can rely on the behavior: I believe so. But you should understand it, and ask questions until you do. Once you understand how things ought to work, you can verify if that is how things are working; if so, it ought to be rather reliable. If there are still mysteries, then surprises may be likely, so do be sure to keep asking about whatever is still unclear.

Спасибо, что ответили. Я уже понимаю (и согласен с) почти все это - но это не отвечает на мой вопрос. FWIW, я просто попытался изменить политику FORWARD на ноутбуке на DROP - без изменений. Я понимаю, почему запрос ARP должен быть виден в интерфейсе Ethernet, но я все еще не понимаю, почему ноутбук реагирует на него некорректно. Составление путаницы (для всех интерфейсов, кроме иногда lo) proxy-arp выключен, rp_filter включен. Я думал, что что-то натолкнуло на параметр «arp_filter», но на удивление это не имело никакого значения на ноутбуке. davidgo 8 лет назад 0

Похожие вопросы