Настройка Wi-Fi
Wi-Fi адаптер на Raspberry Pi имеет два основных режима работы:
- Режим клиента – RPi подключается к существующей Wi-Fi сети.
- Режим точки доступа – RPi создает Wi-Fi сеть, к которой вы можете подключиться.
При использовании образа для RPi по умолчанию Wi-Fi адаптер работает в режиме точки доступа.
Изменение пароля или SSID (имени сети)
Отредактируйте файл
/etc/wpa_supplicant/wpa_supplicant.conf
(используя SSH-соединение):sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
Измените значение параметра
ssid
, чтобы изменить название Wi-Fi сети, и параметраpsk
, чтобы изменить пароль. Например:network={ ssid="my-super-ssid" psk="cloverwifi123" mode=2 proto=RSN key_mgmt=WPA-PSK pairwise=CCMP group=CCMP auth_alg=OPEN }
Перезагрузите Raspberry Pi.
ВНИМАНИЕ
Длина пароля для Wi-Fi сети должна быть не менее 8 символов.
При некорректных настройках wpa_supplicant.conf
Raspberry Pi перестанет раздавать Wi-Fi!
Переключение адаптера в режим клиента
Выключите службу
dnsmasq
.sudo systemctl stop dnsmasq sudo systemctl disable dnsmasq
Включите получение IP адреса на беспроводном интерфейсе DHCP клиентом. Для этого удалите из файла
/etc/dhcpcd.conf
строки:interface wlan0 static ip_address=192.168.11.1/24
Настройте
wpa_supplicant
для подключения к существующей точке доступа. Для этого замените содержимое файла/etc/wpa_supplicant/wpa_supplicant.conf
на:ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=GB network={ ssid="SSID" psk="password" }
где
SSID
– название сети, аpassword
– пароль.Перезапустите службу
dhcpcd
.sudo systemctl restart dhcpcd
Переключение адаптера в режим точки доступа
Включите статический IP адрес на беспроводном интерфейсе. Для этого добавьте в файл
/etc/dhcpcd.conf
строки:interface wlan0 static ip_address=192.168.11.1/24
Настроите
wpa_supplicant
на работу в режиме точки доступа. Для этого замените содержимое файла/etc/wpa_supplicant/wpa_supplicant.conf
на:ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=GB network={ ssid="clover-1234" psk="cloverwifi" mode=2 proto=RSN key_mgmt=WPA-PSK pairwise=CCMP group=CCMP auth_alg=OPEN }
где
clover-1234
– название сети, аcloverwifi
– пароль.Включите службу
dnsmasq
.sudo systemctl enable dnsmasq sudo systemctl start dnsmasq
Перезапустите службу
dhcpcd
.sudo systemctl start dhcpcd
Ниже вы можете узнать больше о том, как устроена работа с сетью на RPi.
Устройство сети RPi
Работа сети на образе поддерживается двумя предустановленными службами:
- networking — служба включает все сетевые интерфейсы в момент запуска [5].
- dhcpcd — служба обеспечивает настройку адресации и маршрутизации на интерфейсах, полученных динамически или указанных в файле настроек статически.
Для работы в режиме роутера (точки доступа) RPi необходим DHCP сервер. Он служит для автоматической выдачи настроек текущей сети подключившимся клиентам. В роли такого сервера может выступать isc-dhcp-server
или dnsmasq
.
dhcpcd
Начиная с Raspbian Jessie настройки сети больше не задаются в файле /etc/network/interfaces
. Теперь за выдачу адресации и настройку маршрутизации отвечает dhcpcd
[4].
По умолчанию на всех интерфейсах включен dhcp-клиент. Настройки интерфейсов меняются в файле /etc/dhcpcd.conf
. Для того, чтобы поднять точку доступа необходимо прописать статический ip-адрес. Для этого в конец файла необходимо добавить следующие строки:
interface wlan0
static ip_address=192.168.11.1/24
СОВЕТ
Если интерфейс является беспроводным (wlan), то служба dhcpcd
триггерит wpa_supplicant
[13], который в свою очередь работает непосредственно с wifi-адаптером и переводит его в заданное состояние.
wpa_supplicant
wpa_supplicant – служба конфигурирует Wi-Fi адаптер. Служба wpa_supplicant
работает не как самостоятельная (хотя как таковая существует), а запускается как дочерний процесс от dhcpcd
.
Конфигурационный файл по умолчанию должен иметь путь /etc/wpa_supplicant/wpa_supplicant.conf
. Пример конфигурационного файла:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=GB
network={
ssid=\"my-clover\"
psk=\"cloverwifi\"
mode=2
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
group=CCMP
auth_alg=OPEN
}
Внутри конфига указываются общие настройки wpa_supplicant
и параметры для настройки адаптера. Также конфигурационный файл содержит секции network
– основные настройки Wi-Fi сети такие как SSID сети, пароль, режим работы адаптера. Таких блоков может быть несколько, но используется первый рабочий. Например, если вы указали в первом блоке подключение к некоторой недоступной сети, то адаптер будет настроен следующей удачной секцией, если такая есть. Подробнее о синтаксисе wpa_supplicant.conf
[TODO WIKI].
wpa_passphrase
wpa_passphrase
– утилита для создания секции network
.
wpa_passphrase SSID PASSWORD
После выполнения команды скопируйте полученную секцию в ваш конфигурационный файл. Можно удалить закомментированное поле psk
и оставить только поле с хешем пароля, либо наоборот.
network={
ssid="SSID"
#psk="PASSWORD"
psk=c2161655c6ba444d8df94cbbf4e9c5c4c61fc37702b9c66ed37aee1545a5a333
}
Несколько Wi-Fi адаптеров
В системе может быть несколько Wi-Fi адаптеров. Если для них корректно подключены драйвера, то их можно увидеть вызвав ifconfig
(например wlan0
и wlan1
).
Если у вас несколько адаптеров, для всех будет использоваться одна и та же самая рабочая секция network
. Это связано с тем, что для каждого интерфейса, dhcpcd
отдельно создает по дочернему процессу wpa_supplicant
, в котором выполняется один тот же код (т. к. конфиг один и тот же).
Для работы нескольких адаптеров с отдельными настройками для каждого, в стандартном вызываемом скрипте dhcpcd
реализован механизм запуска разных конфигурационных скриптов. Для его использования необходимо переименовать стандартный файл конфига по следующему образцу: wpa_supplicant-<имя интерфейса>.conf
, например wpa_supplicant-wlan0.conf
.
Для применения настроек необходимо перезапустить родительский процесс – службу dhcpcd
. Сделать это можно следующей командой:
sudo systemctl restart dhcpcd
DHCP сервер
dnsmasq-base
dnsmasq-base
– консольная утилита, не являющаяся службой, для использования dnsmasq как службы надо установить пакет dnsmasq
.
sudo apt install dnsmasq-base
# Вызов dnsmasq-base
sudo dnsmasq --interface=wlan0 --address=/clover/coex/192.168.11.1 --no-daemon --dhcp-range=192.168.11.100,192.168.11.200,12h --no-hosts --filterwin2k --bogus-priv --domain-needed --quiet-dhcp6 --log-queries
# Подробнее о dnsmasq-base
dnsmasq --help
# или
man dnsmasq
dnsmasq
sudo apt install dnsmasq
cat << EOF | sudo tee -a /etc/dnsmasq.conf
interface=wlan0
address=/clover/coex/192.168.11.1
dhcp-range=192.168.11.100,192.168.11.200,12h
no-hosts
filterwin2k
bogus-priv
domain-needed
quiet-dhcp6
EOF
isc-dhcp-server
sudo apt install isc-dhcp-server
# https://www.shellhacks.com/ru/sed-find-replace-string-in-file/
sed -i 's/INTERFACESv4=\"\"/INTERFACESv4=\"wlan0\"/' /etc/default/isc-dhcp-server
cat << EOF | sudo tee /etc/dhcp/dhcpd.conf
subnet 192.168.11.0 netmask 255.255.255.0 {
range 192.168.11.11 192.168.11.254;
#option domain-name-servers 8.8.8.8;
#option domain-name "rpi.local";
option routers 192.168.11.1;
option broadcast-address 192.168.11.255;
default-lease-time 600;
max-lease-time 7200;
}
EOF
cat << EOF | sudo tee /etc/network/if-up.d/isc-dhcp-server && sudo chmod +x /etc/network/if-up.d/isc-dhcp-server
#!/bin/sh
if [ "\$IFACE" = "--all" ];
then sleep 10 && systemctl start isc-dhcp-server.service &
fi
EOF
Ссылки
- habr.com: Linux WiFi из командной строки с wpa_supplicant
- wiki.archlinux.org: WPA supplicant (Русский)
- blog.hoxnox.com: WiFi access point with wpa_supplicant
- dmitrysnotes.ru: Raspberry Pi 3. Присвоение статического IP-адреса
- thegeekdiary.com: Linux OS Service ‘network’
- frillip.com: Using your new Raspberry Pi 3 as a Wi-Fi access point with hostapt (также здесь есть инструкция по настройке форвардинга для использования RPi в качестве шлюза для выхода в интернет)
- habr.com: Настраиваем ddns-сервер на GNU/Linux Debian 6 (Хорошая статья по настройке ddns-сервера на основе
bind
иisc-dhcp-server
) - pro-gram.ru: Установка и настройка DHCP сервера на Ubuntu 16.04. (Настройка isc-dhcp-server)
- expert-orda.ru: Настройка DHCP-сервера на Ubuntu (Настройка isc-dhcp-server)
- academicfox.com: Raspberry Pi беспроводная точка доступа (WiFi access point) (Настройка маршрутов, hostapd, isc-dhcp-server)
- weworkweplay.com: Automatically connect a Raspberry Pi to a Wifi network (Есть настройки для создания открытой точки доступа)
- wiki.archlinux.org: WPA supplicant
- wiki.archlinux.org: dhcpcd (dhcpcd hook wpa_supplicant)