+++ title = "Access Point on a Raspberry Pi" date = 2020-09-26 tags = ["admin"] +++ 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 : ``` systemd [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]: {% post_url computing/2020-09-26-Arch-on-RPi %} [aw-ap]: https://wiki.archlinux.org/index.php/Software_access_point