Налаштування точки доступу ━━━
Ми говоримо про точку доступу разом із портом Ethernet eth0 .
Якщо ви хочете точку доступу разом з підключенням wlan0 клієнта до іншої мережі Wi-Fi (wlan repeater), то подивіться на точку доступу як маршрутизатор / ретранслятор WiFi, необов'язково з мостом .
Можна настроїти Raspbian Stretch як точку доступу до Wi-Fi без встановлення додаткового програмного забезпечення. Доступні всі необхідні компоненти: мережа, DHCP-сервер та з'єднання з мережевою системою, а Wi-Fi можна налаштувати за допомогою 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 . У нас є лише точка доступу. Не налаштовано жодного мережевого пристрою.
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 з'єднується з мережевим кабелем до інтернет-маршрутизатора і отримує його конфігурацію 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 (переклад мережевих адрес), щоб сказати неправду, що всі пакети надходять з вашої програми AP RasPi. Але це не є чистою маршрутизацією і має обмеження. Клієнти в підмережі маршрутизатора не можуть підключитися до клієнтів через wifi. Але в більшості випадків це не потрібно, тому така настройка рекомендується, оскільки вона спрощує налаштування. Якщо вам потрібно підключитися до клієнтів 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
(цільова мережа від AP), до наступного маршрутизатора в моїй підмережі, AP 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 та маршрутизатором Інтернету, і ви хочете розширити її за допомогою точки доступу до wifi, але з тими ж 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 адресами та параметрами. Роутер буде його обслуговувати.
екскурс:
Але якщо у маршрутизатора немає сервера 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
Вихід є в журналі. Таким чином я знайшов проблему з неправильним ключовим переговором.
wifi
Якщо у вас налаштована точка доступу, вам слід знайти її за допомогою мобільного телефону. Відображаючи доступні мережі, йому надається ім'я 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
. Але ви повинні бути впевнені, що ваш wifi підтримує діапазон 5,1 ГГц. Ви можете перевірити sudo iw phy
. Це дасть вам купу інформації. Він також повинен містити підтримувані частоти понад 5000 МГц. Якщо ви бачите лише частоти 24xx МГц, то, звичайно, ви можете використовувати це лише.
Іншим моментом можуть бути випадкові числа. Для шифрування ключів для захищених з'єднань wpa_supplicant потрібні випадкові числа. Це створює дуже повільно на Raspberry Pi. Якщо у нього недостатньо ентропії для створення ключів шифрування, wpa_supplicant відхилить автентифікацію. Ви можете подивитися, cat /proc/sys/kernel/random/entropy_avail
скільки ентропії доступно. Для роботи досить швидко. Щоб прискорити це, rng-tools
установки встановлені за замовчуванням. Перегляньте розділ Оптимізація для отримання додаткової інформації.
посилання:
[1] Як перейти від мереж до системних мереж з динамічним відмовою
[2] Список каналів WLAN
[3] Rng-інструменти