Как создать Wi-Fi точку доступа на Raspberry Pi

Превращаем Raspberry Pi в Wi-Fi точку доступа с возможностью раздачи интернета и подключения периферийных устройств, используя инструменты hostapd, dnsmasq и iptables.

Настройка точки доступа Wi-Fi

Обновим систему

Введем команду

Bash
sudo apt update
sudo apt upgrade

Установим hostapd, dnsmasq и dhcpcd5

Bash
sudo apt install hostapd dnsmasq dhcpcd5

Остановим hostapd и dnsmasq

Bash
sudo systemctl stop hostapd
sudo systemctl stop dnsmasq

Настроим статический IP-адрес

Настроим статический IP-адрес для интерфейса wlan0. Отредактируем файл /etc/dhcpcd.conf

Bash
sudo nano /etc/dhcpcd.conf

Добавим в файл:

INI
interface wlan0
static ip_address=192.168.4.1/24
nohook wpa_supplicant

interface eth0
dhcp

Из-за конфликта (после перезагрузки не получается подключиться к малине по LAN, по крайней мере, у меня так) NetworkManager и DHCP мы добавили две последние строчки, чтобы Raspberry Pi получил IP-адрес автоматически через DHCP. А NetworkManager мы отключим в конце.

Настроим DHCP-сервер

Отредактируем файл /etc/dnsmasq.conf

Bash
sudo nano /etc/dnsmasq.conf

Добавим следующие строки:

INI
interface=wlan0
dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h

Настроим точку доступа

Bash
sudo nano /etc/hostapd/hostapd.conf

Добавим следующее содержимое

INI
interface=wlan0
driver=nl80211
ssid=RaspberryPi_Eon
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=password
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
  • interface=wlan0: Указывает сетевой интерфейс, который будет использоваться для беспроводного соединения. В данном случае это интерфейс wlan0.
  • driver=nl80211: Задает драйвер, который будет использоваться hostapd для взаимодействия с беспроводным интерфейсом. 
  • ssid=RaspberryPi_Eon: Имя беспроводной сети (SSID), которое будет видно пользователям при поиске доступных сетей. В данном случае имя сети — RaspberryPi_Eon.
  • hw_mode=g: Определяет режим работы беспроводной сети. g означает использование стандарта 802.11g, работающего на частоте 2.4 ГГц с максимальной скоростью до 54 Мбит/с.
  • channel=7: Устанавливает канал беспроводной сети. Канал 7 находится в диапазоне 2.4 ГГц. Выбор канала может зависеть от доступности и помех от других сетей.
  • wmm_enabled=0: Отключает поддержку WMM (Wi-Fi Multimedia), которая используется для улучшения качества передачи мультимедийного контента.
  • macaddr_acl=0: Отключает контроль доступа по MAC-адресам. Все устройства могут подключаться без проверки MAC-адреса.
  • auth_algs=1: Определяет алгоритмы аутентификации, используемые в сети. Значение 1 указывает на использование только алгоритма Open System аутентификации.
  • ignore_broadcast_ssid=0: Указывает, что SSID будет транслироваться и отображаться для обнаружения другими устройствами (не скрытая сеть).
  • wpa=2: Включает использование WPA2 для шифрования.
  • wpa_passphrase=password: Задает пароль для подключения к сети. Здесь указан простой пароль password, который следует заменить на более сложный для повышения безопасности.
  • wpa_key_mgmt=WPA-PSK: Указывает, что для управления ключами будет использоваться предварительно общий ключ (Pre-Shared Key).
  • wpa_pairwise=TKIP: Указывает, что для шифрования будет использоваться TKIP (Temporal Key Integrity Protocol).
  • rsn_pairwise=CCMP: Указывает, что для шифрования будет использоваться CCMP.

Укажем путь к файлу конфигурации hostapd

Отредактируем файл /etc/default/hostapd

Bash
sudo nano /etc/default/hostapd

Заменим строчку #DAEMON_CONF="" на

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

Если внесли изменения (изменили пароль т. д.), нужно перезапустить сервис hostapd

Bash
sudo systemctl restart hostapd

Настройка автозапуска точки доступа Wi-Fi

Включим сервисы hostapd и dnsmasq

Bash
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl enable dnsmasq

Отключим NetworkManager

Bash
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

Если доступ к интернету (IP-форвардинг и iptables) через малину не нужен, то перезагрузим малину

Bash
sudo reboot

Подключимся к точке доступа

Подключение к точке доступа Wi-Fi Raspberry Pi без доступа в интернет
Подключение к точке доступа Wi-Fi Raspberry Pi без доступа в интернет

Подключение к малине есть, доступа к интернету нет.

Настроим IP-форвардинг

IP-форвардинг позволяет устройству перенаправлять сетевой трафик между разными интерфейсами. В контексте точки доступа Wi-Fi на Raspberry Pi, это означает, что трафик, поступающий на интерфейс wlan0 (беспроводной), может быть перенаправлен на интерфейс eth0 (проводной), который подключен к интернету. Это необходимо для того, чтобы устройства, подключенные к точке доступа, могли использовать интернет-соединение Raspberry Pi.

Отредактируем файл /etc/sysctl.conf

Bash
sudo nano /etc/sysctl.conf

Раскомментируем или добавим строку

INI
net.ipv4.ip_forward=1

Установим iptables

Bash
sudo apt install iptables

Добавим правила iptables

Iptables используется для настройки правил фильтрации и маршрутизации пакетов в Linux. В данном случае, iptables настраивается для выполнения NAT (Network Address Translation), что позволяет устройствам, подключенным к точке доступа, использовать IP-адрес Raspberry Pi для доступа в интернет.

Добавим правила iptables для форвардинга трафика. Создадим файл /etc/iptables-rules

Bash
sudo nano /etc/iptables-rules

Добавим следующие правила

INI
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT
COMMIT

Создадим сервис iptables

Создадим сервис для применения правил iptables при загрузке. Создадим файл /etc/systemd/system/iptables-restore.service

Bash
sudo nano /etc/systemd/system/iptables-restore.service

Добавим следующее содержимое

INI
[Unit]
Description=Restore iptables firewall rules
Before=network-pre.target

[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables-rules

[Install]
WantedBy=multi-user.target

Включим созданный сервис

Bash
sudo systemctl enable iptables-restore

Применим правила

Bash
sudo iptables-restore < /etc/iptables-rules

Перезагрузимся

Bash
sudo reboot

Подключимся к точке доступа

Подключение к точке доступа Wi-Fi Raspberry Pi c доступом в интернет
Подключение к точке доступа Wi-Fi Raspberry Pi c доступом в интернет

Подключение есть, доступ к интернету — тоже.

Статья по теме

Rathole: подключение Raspberry Pi к Windows через удаленный сервер