Thursday, 16 November 2017 21:25

Raspberry Pi - Hotspot/Access Point dhcpcd method

Written by 
Raspberry Pi Static WiFi Access Point Hotspot Raspberry Pi Static WiFi Access Point Hotspot
  • Author Type: Individual

There are many guides for creating a Raspberry Pi Access Point but from Raspbian 9 Stretch the network setup has changed, which means a lot of guides are out of date. So this guide is about setting up a Raspberry Pi Hotspot for Raspbian 9 Stretch onwards, it also works for Raspbian 8 Jessie.

I have two other guides on how to set up an automatic Raspberry Pi Access Point, which connects to your home network when you are at home and generates a hotspot when you are out.

For the Autohotspot guide to setup an internet routed hotspot suitable for RPi3, RPi2 & Rpi: Click Here
For the Autohotspot guide to setup a non internet routed hotspot suitable for RPi ZeroW and RPi Zero: Click Here


  • This guide will go through how to set up a permanent hotspot for both internet routed, for RPi's with network ports, and non internet routed hotspots for Pi Zero/W 


This has been tested on Raspbian Jessie and Raspbian Stretch. To see which version you have enter the command lsb_release -a

  • Raspberry Pi 3
  • Raspberry Pi 1,2 with a Wifi Dongle*,
  • Raspberry Pi Zero W and Zero with WiFi Dongle* (internet hotspot not useable as it has no ethernet port.


*some WiFi dongles don't work in adhoc mode or don't work with with the nl80211 driver used in this guide for RPi 3 & zero W inbuilt wifi, so you may want to check this first before starting.

To see if your usb WiFi dongle can be used as an access point enter the command; iw dev ,scroll to section "Supported interface modes:" and look for * AP



Dnsmasq bug: in versions below 2.77 there is a recent bug that may cause the hotspot not to start for some users. This can be resolved by removing the dns-root-data. It may be benificial to do this before you start the rest of the installation as it has been reported that doing it after installation for effected users does not work but you won't know if it is an issue until after the installation is complete.

check your version with : dpkg -s dnsmasq

versions 2.77 and above are ok. If not then try the command:

sudo apt-get purge dns-root-data

thanks to danny for highlighting this.


Note about Raspbian Stretch Network Device Names

For Raspbian Stretch there has been changes to how the network drivers are named, called Predictable Network Interface Names,  and may be different for the usual wlan0 and wlan1 for wifi and eth0 for ethernet connections. Though the official Foundation version of Raspbian Stretch seems to be keeping to the old standard names, at least at the time of writing,  this may not always be the case. For this guide I will use wlan0 as the device that is used.  

To check the device name for your setup enter the commmand iw dev and take a note of the "Interface" name. For wifi it should start with wl , replace your device name with any reference to wlan0 in the article, scripts and config files.


Step 1:

To start with hostapd hotspot client and dnsmasq lightweight dns server need to be installed.

Open a Terminal session.

Update Raspbian with the latest updates by entering the commands:

sudo apt-get update
sudo apt-get upgrade

 To install hostapd enter the command:

sudo apt-get install hostapd

enter Y when prompted.

To install dnsmasq enter the command:

sudo apt-get install dnsmasq

enter Y when prompted

The installers will have set up the programme so they run when the pi is started and activated them. While we set the hotspot we should stop them running. This is done with the following commands:

sudo systemctl stop hostapd
sudo systemctl stop dnsmasq

Now the hostspot configuration file can be setup. This contains the name of the WiFi signal you will need to connect to (SSID) and the security password.

To edit the configuration files I will be using the nano text editor but if you prefer an editor with an point and click interface then replace nano with leafpad in the following instructions.

Hostapd Configuration

Using a text editor edit the hostapd configuration file. This file won't exist at this stage so will be blank.

sudo nano /etc/hostapd/hostapd.conf

download file here:


  • The interface will be wlan0
  • The driver nl80211 works with the Raspberry Pi 3 & Zero W onboard WiFi but you will need to check that your wifi dongle is compatable and can use Access Point mode.

For more information on wifi dongles see

  • The SSID is the name of the WiFi signal broadcast from the RPi, which you will connect to with your Tablet or phones WiFi settings.
  • Channel can be set between 1 and 13. If you are having trouble connection because of to many wifi signals in your area are using channel 6 then try another channel.
  • Wpa_passphrase is the password you will need to enter when you first connect a device to your Raspberry Pi's hotspot. This should be at least 8 characters and a bit more difficult to guess than my example.

To save the config file press ctrl & o and to exit nano press Ctrl & x

Now the defaults file needs to be updated to point to where the config file is stored.
In terminal enter the command

sudo nano /etc/default/hostapd


Check the DAEMON_OPTS="" is preceded by a #, so is #DAEMON_OPTS=""

And save.

DNSmasq configuration

Next we need to update the DNSmasq.conf file. There are two setups depending if you need internet access or not.

DNSmasq Config 1 - No Internet

Open the dnsmasq.conf file with

sudo nano /etc/dnsmasq.conf

Go to the bottom of the file and add the following lines (download here)


#RPiHotspot config - No Intenet

and the save (ctl & o) and exit (ctrl & x)

DNSmasq Config 2 - Internet Routed

Open the dnsmasq.conf file with

sudo nano /etc/dnsmasq.conf

Go to the bottom of the file and add the following lines (download here)

#RPiHotspot config - Internet

and the save (ctl & o) and exit (ctrl & x)


Step 2:

Now that hostapd and dnsmasq are configured we now need to make some changes to the interfaces file, the dhcpcd.conf file, setup ip_forwarding.

Interfaces File

The interfaces file is not required and should be empty of any network config. Depending which version of Raspbian you have this file may still contain network config.


sudo nano /etc/network/interfaces

If your file shows more than the standard top 5 lines like this

# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

then make a copy of your file and then remove any excess lines from the interfaces file.

To make a backup of your interfaces file first, use the command

sudo cp /etc/network/interfaces /etc/network/interfaces-backup


Next we need to update the dhcpcd.conf file. Open the file with

sudo nano /etc/dhcpcd.conf

then scroll to the bottom of the file and add the line (Download here)

nohook wpa_supplicant
interface wlan0
static ip_address=
static routers=

If you are setting up the Internet routed hotspot then also include

static domain_name_servers=

now save (ctrl & o) and exit (ctrl & x)

The line 'nohooks wpa_supplicant' will stop the network wifi from starting if you have an entry in /etc/wpa_supplicant/wpa_supplicant.conf . If this is not done then network wifi will override the hotspot.

This next bit is only if you would like devices to have internet access. If not skip to "Testing the Hotspot".

 ip forwarding

For the internet to be available when an Ethernet cable is attached, IP forwarding needs to be activated. To do this enter

sudo nano /etc/sysctl.conf

look for the line

# Uncomment the next line to enable packet forwarding for IPv4

and remove the # so it is

# Uncomment the next line to enable packet forwarding for IPv4

now save (ctrl & o) and exit (ctrl & x)

Next the rules need to be added that will allow any device connected to the access point to be able to use the internet. This is done with IP Table rules which will need to be loaded every time the Raspberry Pi starts up. So a service file can be setup to do this.

There is a program called netfilter-persistent that can do this but I didn't have much luck with it and it is simple to setup a custom service instead.

First create the file for the ip table rules.

sudo nano /etc/iptables-hs

add the lines below or download from here

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

now save (ctrl & o) and exit (ctrl & x)

Update the permissions so it can be run with

sudo chmod +x /etc/iptables-hs

Now the service file can be created which will activate the ip tables each time the Raspberry Pi starts up

Create the following file

sudo nano /etc/systemd/system/hs-iptables.service

Then add the lines below of download from here

Description=Activate IPtables for Hotspot



now save (ctrl & o) and exit (ctrl & x)

To activate the service file, so it starts at every boot up, enter the command

sudo systemctl enable hs-iptables


Testing the Hotspot

The hotspot setup is now complete. To test that the setup is ok reboot the RPi.

 Once the RPi is up and running the wifi icon near the clock should now be two arrows facing opposite directions Raspbian Pixel AP mode icon This means it is an access point. On a Tablet, phone or Laptop scan for wifi signals. You should see one for RPiHotSpot.

Select this as the wifi signal to connect to. The password is what you setup in the hostapd.conf file. From my example it is 1234567890

android wifi in range list

Local wifi signals in range on Android. You will see RPiHotSpot and not RPiHotN

For SSH and VNC the connection ip is also if you have setup the RPi as a webserver use the same ip to see the webpage.

For ssh use ssh This email address is being protected from spambots. You need JavaScript enabled to view it.

For vnc use

If you have setup the Internet routed configuration. Connect an ethernet cable to the Raspbery Pi and your router and wait a few seconds. The hotspot will now allow connected wifi devices to use the internet as well as the Raspberry Pi

 Once you are happy the setup is working ok then your done.


Script Removal

If you don't wish to continue using the Hotspot then the Raspberry Pi can be revered back to a standard wifi setup with the following steps.

Stop the Hostapd and dnsmasq services with the commands

sudo systemctl disable dnsmasq

sudo systemctl disable hostapd

In the /etc/dhcpcd.conf file remove the lines added at the bottom of the file.

#Static Hotspot
nohook wpa_supplicant
interface wlan0
static ip_address=
static routers=
static domain_name_servers=

If you had previous config in your interfaces file and made a backup you can restore your original interfaces file with the command

sudo mv /etc/network/interfaces-backup /etc/network/interfaces

If you didn't setup an internet routed hotspot then your done, after a reboot your RPi will not longer be an Access Point. For Internet routed Hotspots you also need to do the following;

Disable the hs-iptables service with the command

sudo systemctl disable hs-iptables

Then disable ip forwarding

sudo nano /etc/sysctl.conf

look for the entry

# Uncomment the next line to enable packet forwarding for IPv4

and add a # as follows

# Uncomment the next line to enable packet forwarding for IPv4
# net.ipv4.ip_forward=1

Then reboot and the Raspberry Pi will be back to the standard wifi setup.


 Trouble Shooting

  • If you get no wifi connection or no hotspot and have this icon Network Downthen it is most likley there is an error in one of the configuration files.
  • If you don't get an internet connection when an ethernet cable has been attached, with the Internet routed setup, then you can check the ip table rules have been activated with the command sudo iptables -S If you don't see any rules but just get

    then make sure the service was enabled with the command sudo systemctl enable hs-iptables and the iptables file has the correct prmissions with sud chmod +x /etc/iptables-hs
  • You can connect to the hotspot via an Android Phone but you can't get a ssh connection. Some users have found this issue where Android uses there data connection rather than the wifi. Disabeling data has allowed them to use ssh.  
Last modified on Sunday, 19 November 2017 11:31
roboberry SuperUser.  Contactable via the site admin e-mail in the Contact Us link.


Leave a comment

Comments for Guest and account owners. Account owners will need to login to use registered e-mail address.


  • Comment Link Vandan Kumbhat Monday, 19 March 2018 18:50 posted by Vandan Kumbhat

    A advice to all- Whenever you guys search for online tutorials or any process do add a time range in your google search to prevent waste of time. I wasted days for this one.
    Thanks a lot man, your note on clearing dns-root-data saved me probably. I have repeated these kinds of tutorials roughly a dozen times failing in a different manner every time. Bingo !

  • Comment Link Vandan Kumbhat Monday, 19 March 2018 10:42 posted by Vandan Kumbhat

    Hey there, Thanks for the tutorial. I have a request, if you could please append a section at end of tutorial that tells how to revert in case this fails. Reason being, I have followed at least 5 tutorials and there is no way to revert, evverytime I end up reinstalling raspbian or whatever the os. In case you do this, please mail me at (removed)

  • Comment Link roboberry Monday, 12 March 2018 20:58 posted by roboberry

    Hi Elias, sorry the command should have been sudo systemctl -i status hostapd,

    From your last log it seems dnsmasq is not finding wlan0 so didn't start the wifi but found eth0. so we need to find what config is causing an issue so wlan0 is not available.

    If wlan0 is not starting up then there also could be an issue in /etc/dhcpcd.conf.
    Double check the line; interface wlan0 is correct and ends in a zero not the letter O

    Can you do the output of sudo systemctl -i status hostapd and sudo systemctl -i status dnsmasq again please and also sudo systemctl -i status dhcpcd Could you paste them into the "Leave a comment" box, the Report link you have used makes a mess of the text so it is not very readable, thanks :)

    Also manually start dnsmasq and hostapd and see what happens,
    enter: sudo systemctl restart dnsmasq then sudo systemctl restart hostapd
    and see if there is any issues with the commands sudo systemctl -i status hostapd and sudo systemctl -i status dnsmasq

    if you can't see the issue you are welcome to send me you config file to admin@ this site

    and I will check it out on my pi.

  • Comment Link Elias Monday, 12 March 2018 20:35 posted by Elias

    Hi Roboberry, Thank you for your help. The command sudo systemctl -i hostapd, it doesn't work for me pi@raspberrypi:~ $ sudo systemctl -i hostapd Unknown operation hostapd. Here is the output of sudo systemctl status hostapd (which is different from yesterday - but still doesn't work)

    pi@raspberrypi:~ $ sudo systemctl status hostapd ● hostapd.service - LSB: Advanced IEEE 802.11 management daemon Loaded: loaded (/etc/init.d/hostapd; generated; vendor preset: enabled) Active: active (exited) since Fri 2018-03-09 19:48:39 UTC; 2min 47s ago Docs: man:systemd-sysv-generator(8) Process: 451 ExecStart=/etc/init.d/hostapd start (code=exited, status=0/SUCCESS) CGroup: /system.slice/hostapd.service
    Mar 09 19:48:39 raspberrypi systemd[1]: Starting LSB: Advanced IEEE 802.11 management daemon...
    Mar 09 19:48:39 raspberrypi hostapd[451]: Starting advanced IEEE 802.11 management: hostapd failed!

    Mar 09 19:48:39 raspberrypi systemd[1]: Started LSB: Advanced IEEE 802.11 management daemon. Output of sudo systemctl status dnsmasq pi@raspberrypi:~ $

    sudo systemctl status dnsmasq ● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2018-03-09 19:48:40 UTC; 3min 13s ago
    Process: 501 ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf (code=exited, status=0/SUCCESS) Process: 487 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=0/SUCCESS)
    Process: 456 ExecStartPre=/usr/sbin/dnsmasq --test (code=exited, status=0/SUCCESS)
    Main PID: 500 (dnsmasq) CGroup: /system.slice/dnsmasq.service └─500 /usr/sbin/dnsmasq -x /run/dnsmasq/ -u dnsmasq -r /run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.d
    Mar 09 19:48:39 raspberrypi dnsmasq[500]: warning: interface wlan0 does not currently exist
    Mar 09 19:48:39 raspberrypi dnsmasq-dhcp[500]: DHCP, IP range --, lease time 1d
    Mar 09 19:48:39 raspberrypi dnsmasq[500]: read /etc/hosts - 5 addresses
    Mar 09 19:48:39 raspberrypi dnsmasq[500]: no servers found in /run/dnsmasq/resolv.conf, will retry
    Mar 09 19:48:39 raspberrypi dnsmasq[501]: Too few arguments.

    Mar 09 19:48:40 raspberrypi dnsmasq[501]: Too few arguments.
    Mar 09 19:48:40 raspberrypi systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.
    Mar 09 19:48:44 raspberrypi dnsmasq-dhcp[500]: DHCP packet received on eth0 which has no address
    Mar 09 19:48:48 raspberrypi dnsmasq[500]: reading /run/dnsmasq/resolv.conf
    Mar 09 19:48:48 raspberrypi dnsmasq[500]: using nameserver

  • Comment Link roboberry Friday, 09 March 2018 17:44 posted by roboberry

    Hi Elias,
    Could you send me the full output of; sudo systemctl -i hostapd ,please.
    Another area to double check is the default file as that can cause hostapd to exit.
    in /etc/default/hostapd

    check the last line #DAEMON_OPTS="" starts with a #, and the DAEMON_CONF="/etc/hostapd/hostapd.conf" line has the correct path. I know this is in the guide but just want to eliminate common config errors.

    I have tried a few things but not getting the error ostapderror: unexpectedly disconnected from boot.that you are, but Hostapd is the cause of the problem, we just need to determine whats causing it to exit.

  • Comment Link Elias Friday, 09 March 2018 17:36 posted by Elias

    Thank you for your response. The ip address are good and the nohook spa_supplicant is entered as per your instructions. The dnsmasq.service is Active Running. The hosted.service it show "Active (exited) and few lines below i see "hostapderror: unexpectedly disconnected from boot.."

  • Comment Link roboberry Thursday, 08 March 2018 20:52 posted by roboberry

    Hi Elias, It may be that there is a config issue somewhere. Firstly check that dnsmasq is running ok, in terminal enter sudo systemctl status dnsmasq, you should see some green text within the output that says running.
    If thats ok check hostpd is ok as well, sudo systemctl status hostapd.

    If there is an issue with either just double check their config files.
    If you try the command ip addr you should see the ip address for the hotspot displayed

    if not also check that the ip addresses in /etc/dnsmasq.conf and /etc/dhcpcd.conf all start with 192.168.50

    Check that wpa_supplicant is not running, enter wpa_cli -i wlan0 status, if it returns information about your wifi like IP numbers, then it is still running. Make sure that in /etc/dhcpcd.conf that the line nohook wpa_supplicant is entered.

    if you have no luck, let me know if you are using Jessie or Stretch and if you are using the Internet or non Internet setup.

  • Comment Link Elias K Thursday, 08 March 2018 05:19 posted by Elias K


    I am newbie in this space, I followed your instructions but i can't see the hotspot from my mobile devices, i checked with multiple devices and the ssid is not advertised. In the task bar I have the up&down arrow instead of the wifi symbol and if a hover my mouse over i see (eth0: configured , wlan0: Not associated).
    I don't know where to start troubleshooting it, any help will be appreciated.


  • Comment Link Stefano Saturday, 10 February 2018 17:52 posted by Stefano

    Hi roboberry, thanks for answering me.
    During this days I found another guide (also published by yiu) that respond better to my issue: “Raspberry Pi - Auto WiFi Hotspot Switch - Direct Connection” (with no ethernet routing”). works fine and now Ikm about to follow the other one you made to add the ethernet routing while, in the hotspot mode, I’ll connect the ethernet cable.
    I’ll let you know if it works...
    As you can imagine I’ve deleted old configs so I can’t do tests you suggest....but I’m quite sure I wrote something wrong....

  • Comment Link roboberry Friday, 09 February 2018 20:23 posted by roboberry

    Hi Granpino, thanks for sharing the script. Should make a hotspot easier to setup for people who don't want to use the command line :)
    As you say it was the result of various guides online it would be nice to reference those sites that was most help to you. Thanks

  • Comment Link Granpino Thursday, 08 February 2018 11:04 posted by Granpino

    I put together a script following these steps for easy installation. I tested it with Raspberry pi 2 only. .

  • Comment Link roboberry Sunday, 04 February 2018 21:17 posted by roboberry

    Hi Stefano, As long as the Ethernet cable is connected to the Pi you should have Internet access, as that side of the configuration is not changed. If you enter the command: ip addr ,you should see a line for eth0: with a ip address, something like
    eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b6:11:bc:3f:2e:3b brd ff:ff:ff:ff:ff:ff
    inet brd scope global eth0

    for me the IP address is what my router has given to the Pi through the eth0 port. If there is no IP address then there is an issue between the pi and the router.

    I'm not sure why you needed to clear your routers details from the wpa_supplicant file as the line
    nohook wpa_supplicant
    in the dhcpcd.conf stops the wpa_supplicant file from being read. Check that there is no entry in /etc/network/interfaces file as any entry for wpa_supplicant in this file will also start it up which will work against the hotspot setup.

    If you are getting a eth0 ip address from your router but can't access the Internet then let me know and I will look into it further.

  • Comment Link roboberry Sunday, 04 February 2018 14:30 posted by roboberry

    Hi Emmanuel Z, As the ngnix server is running on the pi you would be able to access it at or if the ip is important and also available on the pi then you could try adding this line to dnsmasq
    This is untested but should redirect any requests for to the ip

    Or you could change the hotspots IP to that what you need the webserver to be.

    In /etc/dhcpcd.con change
    static ip_address=
    static routers=

    static ip_address=
    static routers=

    and in /etc/dnsmasq.conf change


    Then any device connected to the hotspot will be able to access the webserver with in the web browser or the machines hostname ie raspberrypi.local

    Hope this helps

  • Comment Link Emmanuel Z. Saturday, 03 February 2018 15:07 posted by Emmanuel Z.

    Thanks for this great tuto!
    Would it be possible to serve content from a nginx server running on the pi at when the users are connected to the Wifi Hotspot and access address for example in their browser and let them access internet for all other queries and domains? -> serving local content on the pi
    all other domains -> normal internet access

    Maybe by changing settings in iptables?

    Thanks for your help

  • Comment Link Stefano Saturday, 03 February 2018 13:08 posted by Stefano

    First of all congratulations for you guide, very clear and simple also for me (new for Linux..).
    I've tried to setup the configuration with Internet access (not the autohotspot). Everything goes fine (dhcp, hotspot, etc.) and from my laptop, connected to the new hotspot, I'm able to connect to RPi via VNC Viewer...But, neither from my laptop and neither from the RPi itself, I'm able to browse the web.
    First of all I've to say that, in order to have the HotSpot up (two opposite green arrow in the upper right corner of the screen), I had to delete, in wpa_supplicant.conf, rows related to the configration of my home wiFi...
    This is the config I have at my home:
    And this is the config with my little RPi 3b:

    As I told you, I wasn't able to navigate also from the RPi...any test I can make in order to understand the problem?
    I've alredy tried to:
    1) connect PC directly to HomeRouter --> OK
    2) open a web page from RPi --> enable to find addr
    3) open a web page from PC ---> request time out
    4) ping a www.something from RPi ---> seems to resolve the IP addr but wasn't able to perform ping
    5) ping a www.something from PC --> same as above
    Does make sense try to PING Pubblic IP given by my provider?

    Thanks a lot

  • Comment Link Roboberry Monday, 25 December 2017 22:03 posted by Roboberry

    Hi Vaibhav, what issues are you having on reboot. This guide is for a permanent static hotspot so it will always boot as a hotspot.

  • Comment Link Vaibhav V Sunday, 24 December 2017 05:21 posted by Vaibhav V

    Hi Roboberry,
    Thanks for this informative guide on setting up Hotspot on a RPI. My question is whether is it possible for the pi to automatically become a Hotspot on reboot?? Because I want the Pi to instantly become a hotspot once it is turned on. I donot want to make these settings everytime when the PI gets booted.Is that possible?? Please help.
    Eagerly awaiting for your reply.

    Thanks and Regards
    Vaibhav V.


Additional information