━━━ Настройка точки доступа ━━━
Мы говорим о точке доступа вместе с портом Ethernet eth0 .
Если вам нужна точка доступа вместе с клиентским подключением wlan0 к другой сети Wi-Fi (ретранслятор wlan), тогда смотрите на точку доступа как маршрутизатор / ретранслятор WiFi, опционально с мостом .
Можно настроить Raspbian Stretch в качестве точки доступа Wi-Fi без установки дополнительного программного обеспечения. Доступны все необходимые компоненты: сеть, DHCP-сервер и мостовые соединения поставляются с systemd-networkd, а wifi можно настроить с помощью wpa_supplicant . Соединение двух интерфейсов eth0 и wlan0 может быть выполнено с помощью маршрутизации или моста. Ниже приведены настройки для быстрой установки, а затем подробности. Сначала мы должны переключиться на systemd-networkd .
Протестировано с
Raspbian Buster Lite 2019-09-26 на Raspberry Pi 4B, обновлено в 2020-01-18.
Обновления сделаны с sudo apt update && sudo apt full-upgrade && sudo reboot
.
Здесь вы можете найти последнюю протестированную ревизию для предыдущих версий Raspbian .
♦ Общая настройка
Переключитесь на systemd-networkd
Для получения более подробной информации смотрите (1) и Как настроить разрешение имен с помощью systemd-networkd . Вот только вкратце. Выполните эти команды:
# deinstall classic networking
rpi ~$ sudo -Es
rpi ~# apt --autoremove purge ifupdown dhcpcd5 isc-dhcp-client isc-dhcp-common
rpi ~# rm -r /etc/network /etc/dhcp
# setup systemd-resolved
rpi ~# apt --autoremove purge avahi-daemon
rpi ~# apt install libnss-resolve
rpi ~# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
rpi ~# systemctl enable systemd-resolved.service
# enable systemd-networkd
rpi ~# systemctl enable systemd-networkd.service
Настройте wpa_supplicant в качестве точки доступа
Чтобы настроить wpa_supplicant в качестве точки доступа создать этот файл с вашими настройками для country=
, ssid=
, psk=
и , возможно frequency=
. Вы можете просто скопировать и вставить это в одном блоке в вашу командную строку, начиная с cat
EOF и включая оба (разделитель EOF не получит часть файла):
rpi ~# cat > /etc/wpa_supplicant/wpa_supplicant-wlan0.conf <<EOF
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="RPiNet"
mode=2
frequency=2437
#key_mgmt=NONE # uncomment this for an open hotspot
# delete next 3 lines if key_mgmt=NONE
key_mgmt=WPA-PSK
proto=RSN WPA
psk="password"
}
EOF
rpi ~# chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
rpi ~# systemctl disable wpa_supplicant.service
rpi ~# systemctl enable wpa_supplicant@wlan0.service
Закончена общая настройка. Возвращаться.
♦ Настройка автономной точки доступа
Пример для этой настройки:
wifi
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0)
\ /
(dhcp) 192.168.4.1
Выполните «Общие настройки», затем создайте следующий файл для настройки wlan0 . У нас есть только точка доступа. Устройство Ethernet не настроено.
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
DHCPServer=yes
EOF
Если вы хотите этого, перезагрузите компьютер.
Вот и все.
В противном случае, не нужно перезагружаться в это время.
♦ Настройка точки доступа и с eth0, без маршрутизации
Пример для этой настройки:
|
wifi | wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / | \ /
(dhcp) 192.168.4.1 | (dhcp) 192.168.50.1
Настроить
Выполните «Настройка автономной точки доступа», затем создайте следующий файл для настройки eth0 .
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
EOF
Перезагрузка.
Вот и все.
Детали
Интерфейс eth0 подключается через Ethernet-кабель к интернет-маршрутизатору и получает его настройку по DHCP от интернет-маршрутизатора. Это не проблема, дать ему статический IP-адрес, например, Address=192.168.50.2
вместо DHCP=yes
.
Без маршрутизации вы не можете войти в интернет с мобильного телефона. Вы можете войти в него только из самого RPi, чтобы получать обновления или что-то подобное.
♦ Настройка точки доступа и с eth0, с NAT (рекомендуется)
Пример для этой настройки:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \
(dhcp) 192.168.4.1 (dhcp)
Настроить
Выполните «Общие настройки», затем создайте следующие файлы для настройки wlan0 и eth0 . Если вы попробовали одну из предыдущих установок, вы можете просто перезаписать два файла. Убедитесь, что вы используете подсеть для точки доступа, отличную от подсети маршрутизатора. Маршрутизатор в этом примере не использует подсеть 192.168.4.0/24. Если вам нужна другая подсеть, просто измените адресную строку, например Address=192.168.5.1/24
.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
# IPMasquerade is doing NAT
IPMasquerade=yes
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
DHCP=yes
IPForward=yes
EOF
Перезагрузка.
Вот и все.
Детали
Если у вас нет доступа к интернет-маршрутизатору, вы можете подделать его с помощью NAT (трансляция сетевых адресов), чтобы лгать, что все пакеты поступают с вашей точки доступа RasPi. Но это не чистая маршрутизация и имеет ограничения. Клиенты в подсети маршрутизатора не могут подключаться к клиентам по Wi-Fi. Но в большинстве случаев это не требуется, поэтому рекомендуется выполнить эту настройку, поскольку она упрощает настройку. Если вам необходимо подключиться к Wi-Fi-клиентам из сети маршрутизатора, вам придется использовать полную маршрутизацию, как описано в следующем разделе.
♦ Настройка точки доступа и с eth0, с маршрутизацией
Пример для этой настройки:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \ /
(dhcp) 192.168.4.1 192.168.50.2 192.168.50.1
Настроить
Выполните «Общие настройки», затем создайте следующие файлы для настройки wlan0 и eth0 . Если вы попробовали одну из предыдущих установок, вы можете просто перезаписать два файла. Убедитесь, что вы используете разные подсети для точки доступа и сети маршрутизатора. Мы должны использовать статические IP-адреса, потому что мы должны использовать их в качестве шлюзов.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
Address=192.168.4.1/24
MulticastDNS=yes
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF
rpi ~# cat > /etc/systemd/network/04-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Address=192.168.50.2/24
Gateway=192.168.50.1
DNS=84.200.69.80 1.1.1.1
IPForward=yes
EOF
Перезагрузка.
Чтобы завершить работу маршрутизации, вы должны установить статический маршрут в своем интернет-маршрутизаторе, чтобы он мог найти маршрут для обратных пакетов через RasPi к клиентам, подключенным через Wi-Fi к точке доступа. На большинстве интернет-маршрутизаторов вы можете установить статический маршрут, но как это сделать, зависит от модели. Это зависит от вас, чтобы выяснить это. Например ваш RasPi eth0 интерфейс имеет статический IP-адрес 192.168.50.2. Затем на вашем маршрутизаторе шлюз (следующий переход) - 192.168.50.2, сеть назначения - 192.168.4.0/24 (или 192.168.4.0 маска сети 255.255.255.0).
Для интернет-маршрутизатора это означает: «отправьте все пакеты, принадлежащие подсети 192.168.4.0/24
(сеть назначения от точки доступа), следующему маршрутизатору в моей подсети, точке доступа RasPi 192.168.50.2
(шлюзу). Он знает, куда идти».
Вот и все.
♦ Настройка точки доступа с мостом
Пример для этой настройки:
RPi
wifi ┌──────bridge──────┐ wired wan
mobile-phone <.~.~.~> │(wlan0) br0 (eth0)│ <-------> router <-----> INTERNET
\ | / DHCP-server
(dhcp (dhcp 192.168.50.1
from router) from router)
Если у вас уже есть сеть Ethernet с DHCP-сервером и интернет-маршрутизатором, и вы хотите расширить ее с помощью точки доступа Wi-Fi, но с теми же IP-адресами, то вы используете мост. Это часто используется как восходящая связь с маршрутизатором.
Настроить
Выполните «Общие настройки», затем создайте следующие три файла для настройки сетевых интерфейсов. Если вы попробовали одну из предыдущих установок, вы можете просто удалить все файлы, /etc/systemd/network/
кроме тех 99-default.link
, которые присутствуют. IP-адреса являются примерами. Вы должны использовать свой собственный.
rpi ~$ sudo -Es # if not already executed before
rpi ~# cat > /etc/systemd/network/02-br0.netdev <<EOF
[NetDev]
Name=br0
Kind=bridge
EOF
rpi ~# cat > /etc/systemd/network/04-br0_add-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Bridge=br0
EOF
rpi ~# cat > /etc/systemd/network/12-br0_up.network <<EOF
[Match]
Name=br0
[Network]
MulticastDNS=yes
DHCP=yes
# to use static IP uncomment these and comment DHCP=yes
#Address=192.168.50.60/24
#Gateway=192.168.50.1
#DNS=84.200.69.80 1.1.1.1
EOF
Теперь мы должны сказать wpa_supplicant , чтобы использовать мост. Мы делаем это, изменяя его сервис:
rpi ~# systemctl edit wpa_supplicant@wlan0.service
В пустом редакторе вставьте эти операторы, сохраните их и выйдите из редактора:
[Service]
ExecStartPre=/sbin/iw dev %i set type __ap
ExecStartPre=/bin/ip link set %i master br0
ExecStart=
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -Dnl80211,wext -i%I -bbr0
ExecStopPost=-/bin/ip link set %i nomaster
ExecStopPost=-/sbin/iw dev %i set type managed
Перезагрузка.
Вот и все.
Детали
Мы должны сказать wpa_supplicant, что его интерфейс wlan0 является подчиненным мостом. В противном случае клиент будет отклонять соединения с «неправильным паролем», что означает, что согласование ключей не работает. Когда мы сообщаем / sbin / wpa_supplicant с параметром -dbr0
использовать мост для wlan0, тогда интерфейс уже должен быть членом моста. Вот что мы делаем с добавлением файла (наложением) для службы wpa_supplicant . Пустой оператор ExecStart=
удаляет старую запись. В противном случае у вас есть две строки, ExecStart=
и wpa_supplicant запустится два раза. Оригинал, который ExecStart=
вы можете просмотреть systemctl cat wpa_supplicant@wlan0.service
.
Обычно маршрутизатор, к которому вы подключены с помощью кабеля Ethernet, имеет включенный сервер DHCP. Мост также прозрачен для запросов DHCP от станций (устройств, подключенных к точке доступа), поэтому вам не нужно беспокоиться о настройке его интерфейсов с IP-адресами и опциями. Маршрутизатор будет обслуживать его.
excursus:
Но если у маршрутизатора нет DHCP-сервера, вы можете настроить его на RasPi. В systemd-networkd есть опции для настройки встроенного DHCP-сервера, но проблема в том, что systemd-networkd предполагает, что он работает на самом маршрутизаторе, и в этом случае это не так. Это послужит неправильным опциям для станций, в частности маршрутизатора . Нет способа настроить его. Итак, мы должны установитьdnsmasq
в этом случае это может быть настроено по мере необходимости. Установите и настройте его с помощью (например, используйте свои собственные IP-адреса):
rpi ~$ sudo -Es
rpi ~# apt install dnsmasq
rpi ~# systemctl stop dnsmasq
rpi ~# mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
rpi ~# cat > /etc/dnsmasq.conf <<EOF
interface=br0
dhcp-range=192.168.50.128,192.168.50.164,255.255.255.0,24h
dhcp-option=option:router,192.168.50.1
dhcp-option=option:dns-server,8.8.8.8,1.1.1.1
EOF
rpi ~# systemctl start dnsmasq
rpi ~# exit
rpi ~$
В этом примере ip-адреса с 192.168.50.128 по 192.168.50.164 зарезервированы для предоставления станциям. Для других статических IP-адресов используйте один за пределами этого пула, а также IP-адрес для самого моста.
♦ Оптимизация
При запуске wpa_supplicant вы в основном получаете следующие сообщения в журнале:
wpa_supplicant[427]: random: Cannot read from /dev/random: Resource temporarily unavailable
wpa_supplicant[427]: random: Only 12/20 bytes of strong random data available from /dev/random
wpa_supplicant[427]: random: Not enough entropy pool available for secure operations
wpa_supplicant[427]: WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connects
Это не большая проблема. wpa_supplicant нужны случайные числа для генерации ключей шифрования. Это делается немного медленно, поэтому нужно подождать. К счастью, RasPi имеет встроенный в T Рит R andom N темно - коричневый G enerator (TRNG). Мы можем использовать его и ускорить получение случайных чисел, установив часть программного обеспечения (3) с:
rpi ~$ sudo apt install rng-tools
Обновление:
начиная с Raspbian Stretch 2019-04-08 установка не требуется rng-tools
. Они установлены по умолчанию.
♦ Устранение неисправностей
Systemd-networkd
Посмотрите на статус услуги:
rpi ~$ systemctl status systemd-networkd.service
rpi ~$ systemctl status wpa_supplicant@wlan0.service
Или даже немного больше:
rpi ~$ journalctl --boot --pager-end
Я нашел полезным следить за ведением журнала:
rpi ~$ journalctl --boot --follow
Если вы сделали сброс файла, вы можете посмотреть на результат:
rpi ~$ systemctl cat wpa_supplicant@wlan0.service
Чтобы проверить среду выполнения модуля, вы можете показать его и, например, посмотреть, есть ли две ExecStart=
строки:
rpi ~$ systemctl show wpa_supplicant@wlan0.service
И если ничто не поможет другим, вы можете включить опцию отладки с /sbin/wpa_supplicant
помощью -d
в выпадающем файле:
rpi ~$ sudo systemctl edit wpa_supplicant@wlan0.service
ExecStart=
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -Dnl80211,wext -i%I -bbr0 -d
Вывод в журнал. Таким образом, я нашел проблему с неправильным согласованием ключа.
Wi-Fi
Если вы настроили точку доступа, вы должны найти ее с помощью мобильного телефона. Показаны доступные сети, он представлен с именем RPiNet, и вы можете подключиться к нему. На RasPi вы также можете использовать команду:
rpi ~$ sudo iw dev wlan0 info
phy#0
Interface wlan0
ifindex 3
wdev 0x2
addr b8:27:eb:06:e8:8b
ssid RPiNet
type AP
channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz
Как вы можете видеть, это тип AP (точка доступа), и он также покажет вам, какой канал он использует. Проблема может заключаться в переводе канала на частоту. Частота должна соответствовать каналу. Вы можете посмотреть в (2) список каналов WLAN. Например , чтобы использовать канал 36 на полосе 5,1 ГГц , вы должны установить frequency=5180
в /etc/wpa_supplicant\wpa_supplicant.conf
. Но вы должны быть уверены, что ваш Wi-Fi поддерживает полосу 5,1 ГГц. Вы можете проверить сsudo iw phy
. Это даст вам кучу информации. Он также должен содержать поддерживаемые частоты выше 5000 МГц. Если вы видите только частоты 24xx МГц, то, конечно, вы можете использовать только это.
Другим пунктом могут быть случайные числа. Для шифрования ключей для защищенных соединений wpa_supplicant нужны случайные числа. Генерация этого очень медленно на Raspberry Pi. Если энтропии недостаточно для генерации ключей шифрования, wpa_supplicant отклонит аутентификацию. Вы можете посмотреть, cat /proc/sys/kernel/random/entropy_avail
сколько энтропии доступно. Должно быть> 1000, чтобы работать достаточно быстро. Чтобы ускорить это, rng-tools
они установлены по умолчанию. Посмотрите раздел Оптимизация для получения дополнительной информации.
ссылки:
[1] Как перейти с сети на systemd-networkd с динамическим переключением при сбое
[2] Список каналов WLAN
[3] Rng-tools