2

У меня есть несколько плат Raspberry Pi 3 модели B с подключенным к ним внешним адаптером Wi-Fi. Моя цель:

  1. Создайте ячеистую сеть из устройств RSP.
  2. Каждая плата RSP должна иметь свою собственную точку доступа, и к ней могут быть подключены клиенты (мобильные / ноутбуки).
  3. Клиенты этих точек доступа могут перемещаться по разным диапазонам устройств RSP и, тем не менее, должны иметь возможность общаться друг с другом независимо от того, к какой точке доступа они подключены (например, они подключены к одной сети).

Чтобы исправить # 1: я использовал batman-adv на внутреннем интерфейсе wifi (wlan0) RSP3, и теперь все устройства могут пинговать друг друга через свои виртуальные интерфейсы bat0.

Для # 2: я использовал внешний адаптер Wi-Fi (wlan1) и с помощью hostapd и dnsmasq я могу запустить точку доступа (тот же ssid и канал на всех точках доступа) на каждой плате RSP. Я также подключил несколько мобильных устройств в разных точках доступа.

Моя главная проблема блокировки - цель № 3:

Чтобы решить эту проблему, я попытался создать мост между интерфейсами wlan0 и wlan1 с помощью утилиты bridge-utils. Но в RSP оба интерфейса не поддерживают модуль WDS. Поэтому до сих пор я не могу сделать единую сеть для всех клиентов. Я также пытался использовать переадресацию IP между wlan0 и wlan1, но не могу пропинговать подключенных клиентов с других устройств RSP.

Есть ли другой подход (кроме WDS) для создания единой сети для всех подключенных клиентов?

2 ответа2

1

Вы ничего не сказали о конфигурации IP, и конфигурация IP - это именно то, что вам нужно для решения проблемы № 3.

Тщательно выбирайте свой IP-план

Вся ваша сеть будет иметь "общую схему IP". Например, многие сети используют 192.168.*.*

Вы можете использовать любое личное IP-пространство, как в IPv4, так и в IPv6. Убедитесь, что он не столкнется с другими сетями, к которым могут быть подключены ваши пользователи или RPis .

Например, скажем, мы будем использовать глобальную сеть 172.17.*.* Обратите внимание, что «все ноль» (172.17.*.0) и «все единицы» (172.17.*.255) адреса зарезервированы (то есть не используются) в сети и во всех ее подразделениях.

Нам придется разделить эту большую сеть на более мелкие сети, которые каждый RPi будет использовать независимо. Одна из подсетей будет использоваться для связи между RPis, для этого мы оставим 172.17.0.* Для себя. Мы могли бы использовать другое число, но использование 0 облегчает настройку Pis с помощью скрипта.

"Публичная" часть сети будет использовать IP-адреса 172.17.xxx.* Где xxx уникален для каждого RPi. Опять же, чтобы было проще для скрипта, мы начинаем с 1 и увеличиваем.

RPis нужен IP в обеих сетях. Для общедоступной сети рекомендуется использовать .254 , поэтому это будет 172.17.xxx.254 . Но как насчет центральной сети? RPi будет использоваться в качестве шлюза в сеть 172.17.xxx.* Другим RPis. Было бы логично сопоставить IP-адрес с ретранслируемой сетью: мы будем использовать 172.17.0.xxx .

Настройте Пис

  1. Сконфигурируйте ваш RPis ' wlan1 (открытый интерфейс) для использования фиксированного IP 172.17.xxx.254 где xxx уникален среди всех ваших RPis, а не 0 (см. Выше). Маска подсети 255.255.255.0 .

  2. Сконфигурируйте свой RPis wlan0 (частный интерфейс) для использования фиксированного IP 172.17.0.xxx где xxx такой же, как указано выше. Маска подсети 255.255.255.0 .

  3. На каждом RPi запустите следующий скрипт, заменив $END на количество RPis, которое вы используете:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    for i in $(seq 1 $END); do route add -net 172.17.$i.0 netmask 255.255.255.0 gw 172.17.0.$i; done
    iptables -A FORWARD -s 172.17.0.0/16 -d 172.17.0.0/16 -j ACCEPT
    

TL; DR, мы делаем следующее: выбираем большую сеть, здесь 172.17.0.0/16 . Мы подразделяем его на 255 небольших сетей: 172.17.xxx.0/24 . Мы оставляем 0 для себя и даем все остальные номера пользователям. Затем мы сообщаем RPis передавать пакеты, направляемые на другие компьютеры, в соответствующий RPi "шлюза".

Скажите устройствам пользователя искать в нужном месте

Я предполагаю, что вы используете dnsmasq в качестве DHCP-сервера для публичных сетей. Для того, чтобы пользовательские устройства были настроены правильно, вам необходимо настроить его параметры.

  1. Настройте DHCP так, чтобы он обслуживал адреса в диапазоне, адаптированном к сети, от IE 172.17.xxx.1 до 172.17.xxx.253 .

  2. Добавьте статический маршрут в DHCP-часть конфигурации dnsmasq (снова заменяя xxx соответствующим образом):

    dhcp-option=121,16.172.17.0.0,172.17.xxx.254
    

Используя статический маршрут, избегайте перезаписи шлюза по умолчанию ваших клиентов. Таким образом, если они все еще подключены к другой сети (например, к ноутбуку с подключенным Ethernet), у них не должно возникнуть никаких проблем.

Убедитесь, что вы проверили это с 1 или 2 Pis и 1 или 2 клиентами, прежде чем совершать настройку для всех ваших RPis.

1

Есть пара вещей, которые нужно настроить, чтобы заставить это работать.

  • Во-первых, вам не нужно, чтобы каждая точка доступа RPI wlan1 находилась на одном канале, потому что это вызовет значительные помехи между ними.

  • Вам также не нужно использовать WDS. Смотрите это объяснение для получения дополнительной информации об этом. Просто убедитесь, что у каждой точки доступа одинаковый SSID, тип безопасности WiFi и один и тот же пароль.

  • Вы правильно поняли, что вам нужно создать мост между wlan0 и wlan1 на каждом RPI. Я не знаком с утилитами bridge-utils, но, вероятно, было бы лучше просто следовать инструкциям по созданию моста в документации batman-adv здесь.

Следует также отметить, что вам, вероятно, не нужно запускать dnsmasq для служб DHCP. Ваши клиенты могут просто использовать свои автоматически назначенные локальные IPv6-адреса для связи друг с другом через эту беспроводную локальную сеть.

РЕДАКТИРОВАТЬ: Моя ошибка. Похоже, создание настоящего моста с использованием wlan на RPI3 не поддерживается. Похоже , что есть потенциал обходной путь с помощью NAT здесь. Это также возможно, если подключить два внешних адаптера WiFi, которые поддерживают мостовые соединения.

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