В моей домашней сети (10.0.0.0/24) я хочу развернуть сетевой принтер, не прокладывая кабель от коммутатора к нему. Поэтому я использовал Raspberry Pi, который подключается через Wi-Fi к моей беспроводной сети и подключил его порт Ethernet к принтеру. Цель состояла в том, чтобы иметь что-то вроде моста Wifi-Ethernet здесь ...
RPi Ethernet IP (eth0): 10.0.0.32
RPi Wifi IP (wlan0): 10.0.0.31
Printer IP: 10.0.0.30
После игры с tcpdump я узнал, что RPi отвечает на ARP-запросы от маршрутизатора (10.0.0.1), только когда у меня было
net.ipv4.ip_forward = 1
net.ipv4.conf.all.proxy_arp = 1
включен. Что-то, что я могу понять, читая man-страницы. Я проверил это с помощью простых пингов от маршрутизатора до IP-адреса принтера.
Теперь, когда я удалил ARP Cache на маршрутизаторе, не открыв tcpdump на RPi, ARP Responses перестали работать. Так что мне было интересно, почему он снова начинает работать, как только я запустил tcpdump на Pi. Оказалось, что tcpdump переводит интерфейс WiFi Raspberry Pi в беспорядочный режим. Для правильной работы я перевел WiFi-интерфейс Pi в постоянный беспорядочный режим.
ip link set wlan0 promisc on
и теперь все работает нормально, но так как у меня есть ощущение, что это решение "пахнет", я хотел бы знать, что здесь происходит и почему proxy_arp не достаточно?
Кроме того, поскольку у меня есть два сетевых интерфейса, работающих в одной подсети, я убедился, применив некоторые политики маршрутизации, что только трафик на принтер направляется через eth0.
localhost ~ # ip rule show
0: from all lookup local
32764: not from all to 10.0.0.30 lookup main
32765: from all to 10.0.0.30 lookup print
32766: from all lookup main
32767: from all lookup default
localhost ~ # ip route show table print
10.0.0.30 dev eth0 scope link