3.0 KiB
+++ title = "Access Point on a Raspberry Pi" date = 2020-09-26 tags = ["raspberry pi"] +++ The Raspberry Pi family who have wireless capabilities can all serve as wifi Access Points - meaning some other devices connect to it, perhaps accessing internet through it. We'll leave the "forward internet" part for another time, and concentrate on serving wifi connections as a hotspot.
If what you need is a "rescue" Access Point to be able to log back into the
machine, you might rather check my other article on [RPi basics][arch-on-rpi],
where you will see how to let wpa_supplicant
fall back to being an Access
Point if it can't connect to any.
And for now let's use hostapd
, a package to implement and advertise a wifi
access point. It might be a better option for production use since it's a
dedicated tool, whereas wpa_supplicant
is a bit out of its league here.
hostapd
needs the interface to be up and configured with an IP. So we'll
configure systemd-networkd
to do that, and by the way propose an IP address to
clients that get connected to our AP. Change
/etc/systemd/network/05-wlan.network
so that it reads :
[Network]
Address=192.168.1.1
DHCPServer=true
IPMasquerade=true
IPForward=true
[DHCPServer]
PoolOffset=100
PoolSize=20
EmitDNS=true
Now hostapd
won't work (at least in this configuration) if you have
wpa_supplicant
installed. Go on and
# pacman -Rs wpa_supplicant
And last, you will need to tweak /etc/hostapd/hostapd.conf
. This one was taken
from [Archwiki's][aw-ap], and curated for RPi zero W :
interface=wlan0
#bridge=br0
# Country code (ISO/IEC 3166-1)
country_code=FR
# SSID to be used in IEEE 802.11 management frames
ssid=zero
wpa_passphrase=YOUR_PASSWORD_HERE
# Driver interface type (hostap/wired/none/nl80211/bsd) - default hostapd
#driver=rtl871xdrv
#driver=nl80211
# Operation mode (a = IEEE 802.11a (5 GHz), b = IEEE 802.11b (2.4 GHz)
# RPi zero W only supports b
hw_mode=b
# Channel number
channel=5
# Maximum number of stations allowed
max_num_sta=5
# Bit field: bit0 = WPA, bit1 = WPA2
wpa=2
# Bit field: 1=wpa, 2=wep, 3=both
auth_algs=1
# Set of accepted cipher suites; disabling insecure TKIP
wpa_pairwise=CCMP
# Set of accepted key management algorithms
wpa_key_mgmt=WPA-PSK
# hostapd event logger configuration
logger_stdout=-1
# 0 = verbose debugging
# 1 = debugging
# 2 = informational messages
# 3 = notification
# 4 = warning
logger_stdout_level=2
## QoS support
#wmm_enabled=1
## Use "iw list" to show device capabilities and modify ht_capab accordingly
#ht_capab=[HT40+][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40]
ht_capab=[HT20][TX-STBC1][DSSS_CCK-40]
If you use a Realtek-based wifi adapter, there is a specific hostapd package for hosts using rtl871 hardware. You will have to install it from the AUR ; you will have to
$ yay -S hostapd-rtl871xrdv
And modify /etc/hostapd/hostapd.conf
to mention driver=rtl871xdrv
.
[arch-on-rpi]: {{< relref arch-on-rpi >}} [aw-ap]: https://wiki.archlinux.org/index.php/Software_access_point