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

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

Превращаем 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

Укажем путь к файлу конфигурации 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

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

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

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

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

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