Настройка Wi-Fi
Wi-Fi адаптер на Raspberry Pi имеет два основных режима работы:
- Режим клиента – RPi подключается к существующей Wi-Fi сети.
- Режим точки доступа – RPi создает Wi-Fi сеть, к которой вы можете подключиться.
При использовании образа для RPi по умолчанию Wi-Fi адаптер работает в режиме точки доступа.
Инструкция для переключения адаптера в режим клиента
1. Выключите службу dnsmasq
.
sudo systemctl stop dnsmasq
sudo systemctl disable dnsmasq
2. Включите получение IP адреса на беспроводном интерфейсе DHCP клиентом.
Для этого удалите следующие строки
interface wlan0
static ip_address=192.168.11.1/24
из файла /etc/dhcpcd.conf
вручную или введите следующие команды.
sudo sed -i 's/interface wlan0//' /etc/dhcpcd.conf
sudo sed -i 's/static ip_address=192.168.11.1\/24//' /etc/dhcpcd.conf
3. Настройте wpa_supplicant
для подключения к существующей точке доступа.
cat << EOF | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=GB
network={
ssid="CLEVER"
psk="cleverwifi"
}
EOF
где CLEVER
– название сети, а cleverwifi
– пароль.
4. Перезапустите службу dhcpcd
.
sudo systemctl restart dhcpcd
Инструкция для переключения адаптера в режим точки доступа
1. Включите статический IP адрес на беспроводном интерфейсе.
Для этого добавьте следующие строки
interface wlan0
static ip_address=192.168.11.1/24
в файл /etc/dhcpcd.conf
вручную или введите следующую команду
cat << EOF | sudo tee -a /etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.11.1/24
EOF
2. Настроите wpa_supplicant на работу в режиме точки доступа.
cat << EOF | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=GB
network={
ssid="CLEVER-$(head -c 100 /dev/urandom | xxd -ps -c 100 | sed -e 's/[^0-9]//g' | cut -c 1-4)"
psk="cleverwifi"
mode=2
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
group=CCMP
auth_alg=OPEN
}
EOF
3. Перезагрузите службу dhcpcd
.
sudo systemctl restart dhcpcd
4. Включите службу dnsmasq
.
sudo systemctl enable dnsmasq
sudo systemctl start dnsmasq
Ниже вы можете узнать больше о том, как устроена работа с сетью на RPi.
Устройство сети RPi
Работа сети на образе 2017-11-29-raspbian-stretch-lite поддерживается двумя предустановленными службами:
- networking — служба включает все сетевые интерфейсы в момент запуска [5].
- dhcpcd — служба обеспечивает настройку адресации и маршрутризации на интерфейсах, полученных динамически или указаных в файле настроек статически.
Для работы в режиме роутера (точки доступа) RPi необходим DHCP сервер. Он служит для автоматической выдачи настроек текущей сети подключившимся клиентам. В роли такого сервера может выступать isc-dhcp-server
или dnsmasq
.
dhcpcd
Начиная с Raspbian Jesse настройки сети больше не задаются в файле /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=\"CLEVER-SMIRNOV\"
psk=\"cleverwifi\"
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=/clever/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=/clever/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 WIFI ACCESS POINT WITH HOSTAPD (также здесь есть инструкция по настройке форвардинга для использования 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)