Configuring hostapd on Raspberry Pi
The daemon hostapd is a Linux service which enables a “host” computer to become a WiFi Access Point (AP). Thus “host” + “AP” + “d” (for daemon) gives the name hostapd.
I originally learned to set up hostapd from instructions on Pastebin written by user Dryfire117,1 andlater found useful instructions on the Raspberry Pi website.2 The process originally involved building the daemon from source code to get support for the nl80211 driver, but that is now included with the prepackaged version you can install using apt-get. Here are the main steps:
- Install: Install hostapd with the following command
$ sudo apt-get install hostapd
- Configure: Create and edit the configuration file, at /etc/hostapd/hostapd.conf.
For starters, include the following:
interface=wlan1 #If this fails, try rt1871xdrv a driver=nl80211 # Name of the new network: best use the hostname ssid=wifipi # Pick a channel not already in use channel=6 # Change to b for older devices? hw_mode=g macaddr_acl=0 auth_algs=3 # Disable this to insure the AP is visible: ignore_broadcast_ssid=0
This creates an open, unsecured access point. Anybody can connect to it without having to give a password. In some cases that is what you want, but in other cases you will want
to turn on WPA for security and add a password. In that case, add the following to the hostapd.conf file:
wpa=2 wpa_passphrase="RaspberryWiFi" wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
You should, of course, pick a better password. It has to be at least 8 characters long.
There are many, many other options which can be set in this configuration file, but these are the ones needed in most cases to get up and running. Full documentation of the options can be found in a sample configuration file at https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf
A few things I’ve learned from testing options on the Raspberry pi are that trying to enable the Automated Channel Selection (ACS) algorithm via “channel=0” does not work, and setting “hw_mode=any” does not work. At least they didn’t work for me when I tried them, but maybe they have been fixed since then.
- Test: Test it manually to make sure the configuration file is okay:
$ sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
If there are errors it will complain and abort. Unfortunately some older wifi devices don’t support all the features necessary to run an access point. This is where you find out if yours will work.If there are no problems it will run and you can see the network SSID on a nearby device. Simply press ^C to stop it.
- Enable: Have The latest version of hostapd uses systemd startup rather than initd. It also starts out “masked” so you need to first unmask the service. The commands are (as root):
# systemctl unmask hostapd # systemctl enable hostapd
You can test manually that the service will start this way with
# systemctl start hostapd
You can, if you wish, change the location of the configuration file by editing the file /etc/defaults/hostapd and setting the variable DAEMON_CONF to the full path to the alternate configuration file.
Once hostapd is enabled and running, the next step is to enable the DHCP service, so that clients joining the network are automatically assigned IP addresses.
- “How to: Make a Raspberry Pi Powered Wifi Repeater” by Dryfire117, https://pastebin.com/A4jUp2Nq ↩
- “Setting up a Raspberry Pi as a routed wireless access point,” https://www.raspberrypi.org/documentation/configuration/wireless/access-point-routed.md ↩