3

В моей домашней сети (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

1 ответ1

2

Есть два основных способа сделать то, что вы пытаетесь сделать: маршрутизация и мостовое соединение.

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

Моя рекомендация заключается в том, что вам необходимо полностью понять решение как для маршрутизации, так и для мостов, и понять, почему ни один из них не будет работать для вас, прежде чем вы прибегнете к proxy_arp .

Ваш вариант использования не похож на один из тех, где proxy_arp был бы необходим.

Решение проблемы с мостовым соединением

WiFi использует MAC-адреса на двух уровнях стека. У вас будет пара MAC-адресов для конечных точек, как в проводном Ethernet. И у вас будет пара MAC-адресов, указывающих конечные точки беспроводного соединения.

К сожалению, исходный стандарт WiFi предполагал, что конкретная пара из этих четырех MAC-адресов всегда будет идентична, и это предположение неверно при соединении. Таким образом, новый стандарт под названием WDS был введен, чтобы исправить это.

Таким образом, для настройки мостового соединения необходимо убедиться, что оборудование на обоих концах вашего Wi-Fi-соединения поддерживает WDS и что оно включено. Затем вам нужно отменить те два изменения sysctl которые вы внесли, потому что они не используются для соединения.

Наконец, вам нужно настроить мост на Pi, который объединяет проводной и беспроводной интерфейсы в мост. Если вы хотите, чтобы Pi также говорил по IP, вы настраиваете его на интерфейсе моста, а не на базовых физических интерфейсах.

Это куча вещей для настройки, и существует риск того, что WDS не поддерживается аппаратным обеспечением.

Решение проблемы с маршрутизацией

Если вы хотите сделать маршрутизацию, вам все равно нужно отменить настройку proxy_arp . Однако net.ipv4.ip_forward = 1 является правильной для настройки маршрутизации.

На Пи нужно настроить два сетевых интерфейса с разными префиксами. Беспроводную связь, которую вы уже настроили с 10.0.0.0/24 вы, вероятно, можете оставить как есть, так как эта часть уже работает.

Однако проводной интерфейс необходимо настроить с другим префиксом. Возможный выбор - 10.0.1.0/24 . И вы можете назначить 10.0.1.1 для проводного интерфейса на Pi.

Принтер может быть настроен на статический IP-адрес, такой как 10.0.1.2 или вы можете разрешить его динамическую настройку, что потребует установки DHCP-сервера на Pi, который раздает адреса в префиксе 10.0.1.1 .

Наконец, вам нужно сообщить существующему маршрутизатору об этой новой сети, добавив запись в таблицу маршрутизации. В конфигурации на существующем маршрутизаторе добавьте запись таблицы маршрутизации для префикса 10.0.1.0/24 (альтернативно записанного как 10.0.1.0/255.255.255.0) с адресом шлюза 10.0.0.31 . Вы должны убедиться, что адрес 10.0.0.31 как-то остается неизменным, иначе ваша запись в таблице маршрутизации станет неправильной.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .