Вы ничего не сказали о конфигурации 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
.
Настройте Пис
Сконфигурируйте ваш RPis ' wlan1
(открытый интерфейс) для использования фиксированного IP 172.17.xxx.254
где xxx
уникален среди всех ваших RPis, а не 0 (см. Выше). Маска подсети 255.255.255.0
.
Сконфигурируйте свой RPis wlan0
(частный интерфейс) для использования фиксированного IP 172.17.0.xxx
где xxx
такой же, как указано выше. Маска подсети 255.255.255.0
.
На каждом 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-сервера для публичных сетей. Для того, чтобы пользовательские устройства были настроены правильно, вам необходимо настроить его параметры.
Настройте DHCP так, чтобы он обслуживал адреса в диапазоне, адаптированном к сети, от IE 172.17.xxx.1
до 172.17.xxx.253
.
Добавьте статический маршрут в DHCP-часть конфигурации dnsmasq (снова заменяя xxx
соответствующим образом):
dhcp-option=121,16.172.17.0.0,172.17.xxx.254
Используя статический маршрут, избегайте перезаписи шлюза по умолчанию ваших клиентов. Таким образом, если они все еще подключены к другой сети (например, к ноутбуку с подключенным Ethernet), у них не должно возникнуть никаких проблем.
Убедитесь, что вы проверили это с 1 или 2 Pis и 1 или 2 клиентами, прежде чем совершать настройку для всех ваших RPis.