Other
July 4

Настройка Raspberry Pi в качестве беспроводной точки доступа

Оглавление



Введение

В рамках маленького проекта внутри клуба мне предстояло настроить Raspberry Pi zero W так, чтобы на нём располагался небольшой веб-сервер, доступ к которому был бы через точку доступа Wi-Fi. С веб-серверами я уже знаком очень близко, а вот настройка Raspberry Pi как точки доступа — это дело другое, так как я не имел большого опыта работы с ней. Соответственно, я пошёл изучать различные гайды по настройке точки доступа и столкнулся с тем, что в каждом таком гайде некоторые шаги противоречили друг другу, поэтому я и решил написать данную статью, где опишу свой процесс успешной настройки, который был скомпонован из разных гайдов.

Надеюсь, он кому-нибудь поможет. Приятного чтения!


Установка Raspberry OS

Сразу хотел бы сконцентрировать внимание на том, что систему нужно устанавливать через BalenaEtcher, а не через Raspberry Pi Imager, иначе у вас возникнут проблемы на этапе настройки сетевого адаптера, который просто-напросто заблокирует rfkill.

Wi-Fi is currently blocked by rfkill.
Use raspi-config to set the country before use.

Насколько я знаю, данная проблема решаема, но если есть способ её изначально избежать, то почему бы и нет.


1 Шаг. Установка утилит

Для начала устанавливаем все основные утилиты:

- Hostapd — Daemon, который позволяет плате выступать в качестве точки доступа и сервера аутентификации.
- Dnsmasq — Лёгкий и быстрый DNS, DHCP и TFTP-сервер, который используется для обеспечения доменными именами и связанными с ними сервисами небольших сетей.
- Dhcpcd — Клиент DHCP (по идее должен быть установлен по умолчанию, но у меня его не было).

sudo apt install hostapd dnsmasq dhcpcd

2 Шаг. Настройка DHCP

Для работы точки доступа нужно полностью выделить беспроводной интерфейс и сделать так, чтобы никакая другая служба не вмешивалась в его работу, в том числе и сам DHCP.

Поэтому в файле /etc/dhcpcd.conf в конец добавляем следующую строку:

denyinterfaces wlan0

3 Шаг. Настройка интерфейса

Теперь перейдём к настройке самого беспроводного интерфейса. Он должен иметь статический IP, иначе другие устройства при попытке подключения не смогут её найти.

Для этого в файл /etc/network/interfaces добавляем настройку wlan0 или же изменяем, если она уже существует, на следующую:

allow-hotplug wlan0
iface wlan0 inet static
    wireless-mode Master
    address 192.168.52.1
    netmask 255.255.255.0
    network 192.168.52.0
    broadcast 192.168.52.255
#   wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

4 Шаг. Настройка DNS сервера

Для нормального функционирования DNS-сервера можно воспользоваться следующей конфигурацией, которую необходимо поместить в /etc/dnsmasq.conf:

interface=wlan0

listen-address=192.168.52.1

bind-interfaces

server=8.8.8.8

domain-needed

bogus-priv

dhcp-range=192.168.52.5,192.168.52.250,12h

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

Это можно решить, добавив параметр Restart в [Service] сервисный файл (/lib/systemd/system/dnsmasq.service):

Restart=always
RestartSec=5s

5 Шаг. Настройка hostapd

В настройках hostapd (/etc/hostapd/hostapd.conf) необходимо прописать параметры точки доступа, её параметры безопасности и имя:

interface=wlan0

ssid=[Имя сети]

hw_mode=g

channel=6

macaddr_acl=0

auth_algs=1

ignore_broadcast_ssid=0

wpa=2

wpa_key_mgmt=WPA-PSK

wpa_passphrase=[Пароль сети]

rsn_pairwise=CCMP

Также, чтобы данные настройки работали, нужно добавить путь к ним в переменную DAEMON_CONF в /etc/default/hostapd:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

6 Шаг. Активация служб

Последним шагом остаётся только включить все необходимые службы:

sudo systemctl enable hostapd
sudo systemctl start hostapd

sudo systemctl enable dnsmasq
sudo systemctl start dnsmasq

Заключение

На этом настройка точки завершена, и можно её протестировать, подключившись по SSH или, как в моём случае, попробовав зайти на поднятый Web-сервер:

Всё отлично работает! Надеюсь, моя статья принесёт вам пользу.