Превращаем 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=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
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
Подключимся к точке доступа
Подключение есть, доступ к интернету — тоже.
Статья по теме
Rathole: подключение Raspberry Pi к Windows через удаленный сервер