━━━ Konfigurowanie punktu dostępu ━━━
Mówimy o punkcie dostępu wraz z portem ethernetowym eth0 .
Jeśli chcesz punktu dostępu wraz z połączeniem klienta wlan0 z inną siecią Wi-Fi (repeater wlan), spójrz na punkt dostępu jako router / repeater WiFi, opcjonalnie z mostkiem .
Możliwe jest skonfigurowanie Raspbian Stretch jako punktu dostępu Wi-Fi bez instalowania dodatkowego oprogramowania. Wszystkie potrzebne komponenty są dostępne: sieć, serwer DHCP i mostkowanie są dostarczane z systemd-networkd, a Wi - Fi można skonfigurować za pomocą wpa_supplicant . Łączenie dwóch interfejsów eth0 i wlan0 można wykonać przez routing lub mostkowanie. Poniżej najpierw konfiguracja do szybkiej instalacji, a następnie szczegóły. Najpierw musimy przejść na systemd-networkd .
Testowany z
Raspbian Buster Lite 26.09.2019 na Raspberry Pi 4B zaktualizowany 18.01.2018.
Aktualizacje wykonane za pomocą sudo apt update && sudo apt full-upgrade && sudo reboot
.
Tutaj możesz znaleźć ostatnią przetestowaną wersję dla poprzednich wersji Raspbian .
♦ Ogólna konfiguracja
Przełącz na systemd-networkd
Aby uzyskać szczegółowe informacje, patrz (1) i Jak skonfigurować rozpoznawanie nazw za pomocą systemd-networkd . Tutaj tylko w skrócie. Wykonaj następujące polecenia:
# 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
Skonfiguruj wpa_supplicant jako punkt dostępu
Aby skonfigurować wpa_supplicant jako punkt dostępowy utworzyć ten plik z ustawieniami do country=
, ssid=
, psk=
i może frequency=
. Możesz po prostu skopiować i wkleić to w jednym bloku do linii poleceń, zaczynając od cat
i włączając zarówno EOF (separator EOF nie otrzyma części pliku):
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
Zakończono konfigurację ogólną. Wróć.
♦ Konfigurowanie samodzielnego punktu dostępu
Przykład tej konfiguracji:
wifi
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0)
\ /
(dhcp) 192.168.4.1
Wykonaj „Ustawienia ogólne”, a następnie utwórz następujący plik, aby skonfigurować wlan0 . Mamy tylko punkt dostępu. Nie ma skonfigurowanego urządzenia 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
Jeśli chcesz, uruchom ponownie.
Otóż to.
W przeciwnym razie kontynuuj, nie ma potrzeby ponownego uruchamiania w tym momencie.
♦ Utworzenie punktu dostępu i z eth0, bez routingu
Przykład tej konfiguracji:
|
wifi | wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / | \ /
(dhcp) 192.168.4.1 | (dhcp) 192.168.50.1
Ustawiać
Wykonaj „Konfigurowanie samodzielnego punktu dostępu”, a następnie utwórz następujący plik, aby skonfigurować 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
Restart.
Otóż to.
Detale
Interfejs eth0 jest połączony kablem Ethernet z routerem internetowym i pobiera go przez DHCP z routera internetowego. Bez problemu można nadać mu statyczny adres IP np. Address=192.168.50.2
Zamiast DHCP=yes
.
Bez routingu nie można uzyskać dostępu do Internetu za pomocą telefonu komórkowego. Możesz wejść do niego tylko z samego RPi, aby uzyskać aktualizacje lub coś w tym rodzaju.
♦ Konfigurowanie punktu dostępu iz et0, z NAT (zalecane)
Przykład tej konfiguracji:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \
(dhcp) 192.168.4.1 (dhcp)
Ustawiać
Wykonaj „Ustawienia ogólne”, a następnie utwórz następujące pliki, aby skonfigurować wlan0 i eth0 . Jeśli wypróbowałeś jedną z poprzednich konfiguracji, możesz po prostu zastąpić dwa pliki. Upewnij się, że używasz innej podsieci dla punktu dostępu niż z routera. Router w tym przykładzie nie korzysta z podsieci 192.168.4.0/24. Jeśli potrzebujesz innej podsieci, po prostu zmień linię adresu, np 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
Restart.
Otóż to.
Detale
Jeśli nie masz dostępu do routera internetowego, możesz go sfałszować za pomocą NAT (translacja adresu sieciowego), aby kłamać, że wszystkie pakiety pochodzą z AP RasPi. Ale to nie jest czysty routing i ma ograniczenia. Klienci w podsieci routera nie mogą łączyć się z klientami w sieci Wi-Fi. Ale w większości przypadków nie jest to konieczne, więc ta konfiguracja jest zalecana, ponieważ upraszcza konfigurację. Jeśli musisz połączyć się z klientami Wi-Fi z sieci routera, musisz użyć pełnego routingu, jak opisano w następnej sekcji.
♦ Utworzenie punktu dostępowego i z eth0, z routingiem
Przykład tej konfiguracji:
wifi wired wan
mobile-phone <~.~.~.~.~> (wlan0)RPi(eth0) <---------> router <---> INTERNET
\ / \ /
(dhcp) 192.168.4.1 192.168.50.2 192.168.50.1
Ustawiać
Wykonaj „Ustawienia ogólne”, a następnie utwórz następujące pliki, aby skonfigurować wlan0 i eth0 . Jeśli wypróbowałeś jedną z poprzednich konfiguracji, możesz po prostu zastąpić dwa pliki. Upewnij się, że używasz różnych podsieci dla punktu dostępu i sieci routera. Musimy używać statycznych adresów IP, ponieważ musimy ich używać jako bram.
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
Restart.
Aby routing został zakończony, musisz ustawić statyczną trasę w routerze internetowym, aby mógł on znaleźć trasę do powrotu pakietów przez RasPi do klientów podłączonych przez Wi-Fi do punktu dostępowego. Na większości routerów internetowych można ustawić trasę statyczną, ale sposób jej wykonania różni się w zależności od modelu. Od Ciebie zależy, czy się o tym dowiesz. Na przykład Twój raspi eth0 interfejs ma statyczny adres IP 192.168.50.2. Następnie na routerze brama (następny przeskok) to 192.168.50.2, sieć docelowa to 192.168.4.0/24 (lub 192.168.4.0 maska sieci 255.255.255.0).
To oznacza dla routera internetowego: „wyślij wszystkie pakiety należące do podsieci 192.168.4.0/24
(sieć docelowa z AP) do następnego routera w mojej podsieci, RasPi AP 192.168.50.2
(brama). Wie, gdzie się udać”.
Otóż to.
♦ Utworzenie punktu dostępu z mostem
Przykład tej konfiguracji:
RPi
wifi ┌──────bridge──────┐ wired wan
mobile-phone <.~.~.~> │(wlan0) br0 (eth0)│ <-------> router <-----> INTERNET
\ | / DHCP-server
(dhcp (dhcp 192.168.50.1
from router) from router)
Jeśli masz już sieć Ethernet z serwerem DHCP i routerem internetowym i chcesz ją rozszerzyć o punkt dostępu Wi-Fi, ale z tymi samymi adresami IP, wówczas korzystasz z mostka. Jest to często używane jako łącze nadrzędne do routera.
Ustawiać
Wykonaj „Ustawienia ogólne”, a następnie utwórz następujące trzy pliki, aby skonfigurować interfejsy sieciowe. Jeśli wypróbowałeś jedną z poprzednich konfiguracji, możesz po prostu usunąć wszystkie pliki /etc/systemd/network/
oprócz, 99-default.link
jeśli są obecne. Adresy IP są przykładami. Musisz użyć własnego.
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
Teraz musimy powiedzieć wpa_supplicant, aby używał mostu. Robimy to, modyfikując jego usługę za pomocą:
rpi ~# systemctl edit wpa_supplicant@wlan0.service
W pustym edytorze wstaw te instrukcje, zapisz je i zamknij edytor:
[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
Restart.
Otóż to.
Detale
Musimy powiedzieć wpa_supplicant, że jego interfejs wlan0 jest niewolnikiem mostu. W przeciwnym razie klient odrzuci połączenie z „złym hasłem”, co oznacza, że negocjacja klucza nie działa. Kiedy mówimy / sbin / wpa_supplicant z opcją -dbr0
użycia mostu dla wlan0, interfejs musi już być członkiem mostka. Tak właśnie robimy z plikiem zrzutu (nakładki) dla usługi wpa_supplicant . Pusta instrukcja ExecStart=
usuwa stary wpis. W przeciwnym razie masz dwie linie, ExecStart=
a wpa_supplicant uruchomi się dwa razy. Oryginał, ExecStart=
który możesz wyświetlić systemctl cat wpa_supplicant@wlan0.service
.
Zwykle router, do którego podłączony jest kabel Ethernet, ma włączony serwer DHCP. Most jest również przezroczysty dla żądań DHCP ze stacji (urządzeń podłączonych do punktu dostępu), więc nie musisz się martwić konfiguracją interfejsów z adresami IP i opcjami. Router go obsłuży.
wycieczka:
Jeśli jednak router nie ma serwera DHCP, możesz go skonfigurować na RasPi. systemd-networkd ma opcje konfiguracji wbudowanego serwera DHCP, ale problem polega na tym, że systemd-networkd zakłada, że działa on na samym routerze, co nie jest prawdą w tym przypadku. Będzie obsługiwał złe opcje dla stacji, w szczególności opcję routera . Nie ma sposobu, aby to skonfigurować. Więc musimy zainstalowaćdnsmasq
w takim przypadku można go skonfigurować w razie potrzeby. Zainstaluj i skonfiguruj za pomocą (na przykład użyj własnego adresu 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 ~$
W tym przykładzie są adresy IP od 192.168.50.128 do 192.168.50.164 zarezerwowane dla stacji. W przypadku innych statycznych adresów IP użyj adresu spoza tej puli, również adresu IP samego mostu.
♦ Optymalizacja
Podczas uruchamiania wpa_supplicant najczęściej pojawia się w dzienniku:
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
To nie jest duży problem. wpa_supplicant potrzebuje liczb losowych, aby wygenerować klucze szyfrujące. Odbywa się to trochę powoli, więc musi poczekać. Na szczęście RasPi ma wbudowany T rue R andom N umber G enerator (TRNG). Możemy go użyć i przyspieszyć uzyskiwanie losowych liczb, instalując oprogramowanie (3) z:
rpi ~$ sudo apt install rng-tools
Aktualizacja:
Od Raspbian Stretch 2019-04-08 nie trzeba instalować rng-tools
. Są instalowane domyślnie.
♦ Rozwiązywanie problemów
systemd-networkd
Spójrz na status usługi:
rpi ~$ systemctl status systemd-networkd.service
rpi ~$ systemctl status wpa_supplicant@wlan0.service
A nawet trochę więcej:
rpi ~$ journalctl --boot --pager-end
Uważam, że pomocne jest śledzenie trwającego logowania:
rpi ~$ journalctl --boot --follow
Jeśli zrobiłeś zrzut pliku, możesz spojrzeć na wynik:
rpi ~$ systemctl cat wpa_supplicant@wlan0.service
Aby sprawdzić środowisko wykonawcze jednostki, możesz je pokazać i na przykład sprawdzić, czy są dwie ExecStart=
linie:
rpi ~$ systemctl show wpa_supplicant@wlan0.service
A jeśli nic innego nie pomoże, możesz włączyć opcję debugowania /sbin/wpa_supplicant
za -d
pomocą upuszczonego pliku:
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
Dane wyjściowe znajdują się w dzienniku. W ten sposób znalazłem problem z niewłaściwą negocjacją klucza.
wifi
Jeśli skonfigurowałeś punkt dostępu, powinieneś go znaleźć za pomocą telefonu komórkowego. Pokazuje dostępne sieci, ma nazwę RPiNet i możesz się z nią połączyć. Na RasPi możesz również użyć polecenia:
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
Jak widać, jest to typ AP (punkt dostępu), a także pokaże, jakiego kanału używa. Problemem może być przełożenie kanału na częstotliwość. Częstotliwość musi pasować do kanału. Możesz spojrzeć na (2), aby zobaczyć listę kanałów WLAN. Na przykład do korzystania kanale 36 w paśmie 5,1 GHz, trzeba ustawić frequency=5180
w /etc/wpa_supplicant\wpa_supplicant.conf
. Ale musisz mieć pewność, że twoje WiFi obsługuje pasmo 5,1 GHz. Możesz to sprawdzić za pomocą sudo iw phy
. To da ci mnóstwo informacji. Musi także zawierać obsługiwane częstotliwości powyżej 5000 MHz. Jeśli widzisz tylko częstotliwości 24xx MHz, możesz oczywiście tylko tego użyć.
Kolejnym punktem mogą być liczby losowe. Do szyfrowania kluczy dla bezpiecznych połączeń wpa_supplicant potrzebuje liczb losowych. Generowanie tego jest bardzo wolne na Raspberry Pi. Jeśli nie ma wystarczającej entropii do wygenerowania kluczy szyfrujących, wpa_supplicant odrzuci uwierzytelnienie. Możesz sprawdzić, cat /proc/sys/kernel/random/entropy_avail
ile entropii jest dostępnych. Powinno być> 1000, aby działać wystarczająco szybko. Aby to przyspieszyć, rng-tools
są instalowane domyślnie. Więcej informacji znajduje się w sekcji Optymalizacja .
referencje:
[1] Jak przeprowadzić migrację z sieci do systemd-networkd z dynamicznym przełączaniem awaryjnym
[2] Lista kanałów WLAN
[3] Narzędzia Rng