Настройка Wi-Fi

Wi-Fi адаптер на Raspberry Pi имеет два основных режима работы:

  1. Режим клиента – RPi подключается к существующей Wi-Fi сети.
  2. Режим точки доступа – RPi создает Wi-Fi сеть, к которой вы можете подключиться.

При использовании образа для RPi по умолчанию Wi-Fi адаптер работает в режиме точки доступа.

Изменение пароля или SSID (имени сети)

  1. Отредактируйте файл /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
    }
    
  2. Перезагрузите Raspberry Pi.

ВНИМАНИЕ

Длина пароля для Wi-Fi сети должна быть не менее 8 символов.

При некорректных настройках wpa_supplicant.conf Raspberry Pi перестанет раздавать Wi-Fi!

Переключение адаптера в режим клиента

  1. Выключите службу dnsmasq.

    sudo systemctl stop dnsmasq
    sudo systemctl disable dnsmasq
    
  2. Включите получение IP адреса на беспроводном интерфейсе DHCP клиентом. Для этого удалите из файла /etc/dhcpcd.conf строки:

    interface wlan0
    static ip_address=192.168.11.1/24
    
  3. Настройте 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 – пароль.

  4. Перезапустите службу dhcpcd.

    sudo systemctl restart dhcpcd
    

Переключение адаптера в режим точки доступа

  1. Включите статический IP адрес на беспроводном интерфейсе. Для этого добавьте в файл /etc/dhcpcd.conf строки:

    interface wlan0
    static ip_address=192.168.11.1/24
    
  2. Настроите 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 – пароль.

  3. Включите службу dnsmasq.

    sudo systemctl enable dnsmasq
    sudo systemctl start dnsmasq
    
  4. Перезапустите службу 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

Ссылки

  1. habr.com: Linux WiFi из командной строки с wpa_supplicantopen in new window
  2. wiki.archlinux.org: WPA supplicant (Русский)open in new window
  3. blog.hoxnox.com: WiFi access point with wpa_supplicantopen in new window
  4. dmitrysnotes.ru: Raspberry Pi 3. Присвоение статического IP-адресаopen in new window
  5. thegeekdiary.com: Linux OS Service ‘network’open in new window
  6. frillip.com: Using your new Raspberry Pi 3 as a Wi-Fi access point with hostaptopen in new window (также здесь есть инструкция по настройке форвардинга для использования RPi в качестве шлюза для выхода в интернет)
  7. habr.com: Настраиваем ddns-сервер на GNU/Linux Debian 6open in new window (Хорошая статья по настройке ddns-сервера на основе bind и isc-dhcp-server)
  8. pro-gram.ru: Установка и настройка DHCP сервера на Ubuntu 16.04.open in new window (Настройка isc-dhcp-server)
  9. expert-orda.ru: Настройка DHCP-сервера на Ubuntuopen in new window (Настройка isc-dhcp-server)
  10. academicfox.com: Raspberry Pi беспроводная точка доступа (WiFi access point)open in new window (Настройка маршрутов, hostapd, isc-dhcp-server)
  11. weworkweplay.com: Automatically connect a Raspberry Pi to a Wifi networkopen in new window (Есть настройки для создания открытой точки доступа)
  12. wiki.archlinux.org: WPA supplicantopen in new window
  13. wiki.archlinux.org: dhcpcdopen in new window (dhcpcd hook wpa_supplicant)