Делаем роутер из Raspberry Pi

 Публичный пост для комнаты «Тех»
25 апреля 2025  32

По существу, без рассказа о том, как мы с кошкой проснулись до рассвета, окинули взглядом комнату, хлебнули, кто молока, кто кипятка, и вспомнили о пылившейся на одной из дальних полок среди транзисторов, самокруток, микроконтроллеров предпоследней версии «Малины». Просто инструкция, просто команды.

Эта инструкция пригодится для следующей инструкции «Как передать сообщение азбукой Морзе по Wi-Fi с Raspberry Pi на NodeMCU (ESP8266)»

Опубликовано также в моем блоге.

ПС: Курсы не продаю.


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

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

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

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

sudo apt update
sudo apt upgrade

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

sudo apt install hostapd dnsmasq dhcpcd5

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

sudo systemctl stop hostapd
sudo systemctl stop dnsmasq

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

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

sudo nano /etc/dhcpcd.conf

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

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

sudo nano /etc/dnsmasq.conf

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

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

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

sudo nano /etc/hostapd/hostapd.conf

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

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=CCMP
rsn_pairwise=CCMP
  • interface=wlan0: указывает сетевой интерфейс, который будет использоваться для беспроводного соединения. В данном случае это интерфейс wlan0.
  • driver=nl80211: задает драйвер, который будет использоваться hostapd для взаимодействия с беспроводным интерфейсом.
  • ssid=RaspberryPi_Eon: имя беспроводной сети (SSID), которое будет видно пользователям при поиске доступных сетей. В данном случае имя сети — RaspberryPi_Eon.
  • hw_mode=g: определяет режим работы беспроводной сети. g означает использование стандарта 802.11g, работающего на частоте 2.4 ГГц.
  • 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=CCMP: для шифрования будет использоваться CCMP.
  • rsn_pairwise=CCMP: для шифрования будет использоваться CCMP.

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

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

sudo nano /etc/default/hostapd

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

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

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

sudo systemctl restart hostapd

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

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

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

Отключим NetworkManager

sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

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

sudo reboot

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


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

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

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

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

sudo nano /etc/sysctl.conf

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

net.ipv4.ip_forward=1

Установим iptables

sudo apt install iptables

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

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

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

sudo nano /etc/iptables-rules

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

*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

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

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

[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

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

sudo systemctl enable iptables-restore

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

sudo iptables-restore < /etc/iptables-rules

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

sudo reboot

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

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

Откомментируйте первым 👇

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб