Ситуация:
Raspberry Pi 3(одноплатный мини-ПК) с дистрибутивом на основе Debian (Raspbian), с 2 картами Wi-Fi, одна внутренняя (wlan0), другая внешняя (wlan1), во внутреннем интернет-приемнике от моего домашнего маршрутизатора.

Что я хочу:
Другая карта Wi-Fi (wlan1 - внешняя sb) устанавливает соединение между определенными устройствами, которым в моем случае не требуется доступ к Интернету (устройства ESP8266), и Raspberry Pi, поэтому она создает точку доступа / точку доступа

Но как мне это заархивировать?

Как я могу настроить точку доступа без интернета в wlan1?

1 ответ1

1

Решение немного длинное.

  1. Используйте hostapd, чтобы создать точку доступа на wlan1. Есть инструкции о том, как сделать это по всему Интернету, вы можете найти любой, который вам нравится. Вы можете опустить утверждение bridge = br0 согласно предложению Даниэля Б.

  2. Теперь вы можете дать вашему интерфейсу IP-адрес и вызвать его:

    ip addr add 192.168.1.111/24 dev wlan1
    ip link set dev wlan1 up
    

    где 192.168.1.111 - адрес вне пула DHCP вашего маршрутизатора, но в той же подсети.

  3. Теперь нам нужно определиться с диапазоном IP-адресов для клиентов вашей точки доступа. Это необходимо не из-за причин DHCP, а из-за маршрутизации (см. Следующий пункт). Выберите небольшую подсеть вашей основной локальной сети, которая не используется вашим основным маршрутизатором. Например, если маршрутизатор распределяет IP-адреса в диапазоне 192.168.1.2-192.168.1.100, вы можете использовать что-то вроде 192.168.1.112/28, которое включает в себя все адреса в диапазоне 192.168.1.112-192.168.127.

  4. Теперь добавьте все важные маршруты:

    ip route add 192.168.1.112/28 dev wlan1
    

    Это заставляет ваше ядро отправлять пакеты для ваших клиентов Wi-Fi через правильный интерфейс, а не через ваш стандартный интерфейс wlan0, где у вас уже есть правило

    ip route add 192.168.1.0/24 dev wlan0
    

    который приходит с вашего DHCP. Позвольте мне повторить это, потому что это важно: первый маршрут имеет приоритет над вторым, потому что он более конкретен, так что ваше ядро будет знать, как связаться с вашими Wi-Fi-клиентами с помощью интерфейса wlan1.

  5. Теперь вам нужно настроить dnsmasq для работы на интерфейсе wlan1, чтобы распределять адреса в диапазоне 192.168.1.112/28 ; используйте следующий файл /etc/dnsmasq.conf:

    domain-needed
    bogus-priv
    dhcp-authoritative
    interface=wlan1
    server=8.8.8.8
    server=8.8.4.4
    expand-hosts
    domain=YourLanName.lan
    dhcp-range=192.168.1.112,192.168.1.127,12h
    dhcp-option=3,192.168.1.1
    dhcp-host=4C:E6:76:00:11:22,PC_NAME,192.168.1.119,12h
    

    что должно быть само за себя. В следующей за последней строкой dnsmasq передает в качестве шлюза не IP-адрес компьютера, на котором работает dnsmasq, а IP-адрес истинного маршрутизатора / шлюза вашей локальной сети. Если вы не хотите, чтобы клиенты Wi-Fi могли подключаться к Интернету, вы можете пропустить последнюю строку. Запустите dnsmasq,

     systemctl start dnsmasq
    

    Я предполагаю, что вы находитесь на systemd, в противном случае вышеперечисленное должно быть заменено

    service dnsmasq start
    

    Последняя строка показывает, как вывести зарезервированные (= статические) адреса. Если вы хотите назначить одному из ваших клиентов Wi-Fi и IP-адрес вне диапазона 192.168.1.112/28, вы можете сделать это, просто не забудьте указать ядру, где этот адрес может быть найден: например,

    ip route add 192.168.1.200/32 dev wlan1
    
  6. Не забудьте разрешить трафик IPv4 через ваши интерфейсы,

    echo 1 > /proc/sys/net/ipv4/ip_forward
    

    и ЗАПРОСИТЬ ваш трафик,

    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
    

    Эта последняя команда гарантирует, что весь трафик, покидающий интерфейс wlan0, по- видимому, исходит от вашего RPI, что, в свою очередь, означает, что ваши клиенты будут получать ответы на свои запросы; не беспокойтесь о том, чтобы отслеживать, какие возвращаемые пакеты принадлежат RPI, а какие - одному из клиентов, ядро делает это автоматически.

  7. Наконец, мы разрешили только IP-трафик между wlan0 и wlan1 (в этом смысл IPv4-пересылки), что исключает протоколы уровня 2, такие как ARP. Если вы хотите восполнить этот недостаток, вы можете использовать proxy-arp:

    echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp
    echo 1 > /proc/sys/net/ipv4/conf/wlan1/proxy_arp
    

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