In the age of the internet, Wi-Fi has become more than just prevalent and is seen as a necessity for many people, be it households or in a business environment. We cannot function without the internet, which is a resource for most of our activities. But the problem with conventional Wi-Fi devices is that their signals are weak, so we don’t seem to get a proper connection when we are relatively far away from it. This problem is solved with the use of Wi-Fi extenders, which receives a signal from your original Wi-Fi device and sends it to wherever you want it.
Markets today are flooded with devices such as these. There are products for outdoor use (Outdoor CPE devices) and these products help broadcast over large areas. They are relatively big in size and also designed to be rugged and tough, so as to withstand any weather conditions. Indoor extenders, in comparison, are usually much smaller and have a much more user friendly interface. While some of them can starting from just tens of USD, it’s not surprising to see some premium products have a price of hundreds and even thousands of USD.
But tech savvy people would know a cheaper and a much more fun way to navigate around the Wi-Fi problem. Yes, you guessed it right! We are talking about the DIY alternative which can save you many valuable USD, being even less than $10 USD! What’s more, the software used to set up your extender is highly customisable and can also run ad-blocking software and VPN services as well. Firewalls? Of course, should you want them.
The speeds that you achieve on this will be slightly lower than a commercial product. But, when for the price of a burger meal at McDonald’s you can stream your favourite Netflix movies regardless of where you are, it surely brings in some food for thought! You even get to learn from the experience, and if you are interested, with a little more research you can make a better extender as well!
Moreover, DIY electronics today have come a long way from their initial days, and now sites like GitHub and Instructables give you step-by-step instructions for almost any electronic item you want to make.
So with that being said, we shall explain how you can make a simple Wi-Fi extender at home for less than $10 USD! We shall be using Raspberry Pi, which is a single board computer chip and a bit of programming to do the trick.
Hardware Components
- Raspberry Pi Board – any model which has a Wi-Fi module in it will work (basically anything after 2 or 3). If you are using an older model then make sure you have two USB Wi-Fi adapters. In this case, we shall use a Raspberry Pi Zero W. (Amazon link for the same)
- USB Adapter – as mentioned above, most models today have an inbuilt Wi-Fi module, but in case your model doesn’t, you’d want to get one of these. We shall be using one in our project, because it is an older but cheaper model.
- Micro SD Card – for flashing image which will later be used in the USB adapter.
Software Components
- Raspberry Pi OS Lite– this will be the software used to configure the Raspberry Pi. You can get this software from the official Raspberry Pi Website. We would like to point out that since the Raspberry Pi is Linux based and uses wpa_supplicant as the accompanying package, we don’t need a hostapd (a Host Access Point Daemon which allows your host device, in this case the Raspberry Pi module, to become an Access Point or AP) as the computer itself becomes the Access Point for your Wi-Fi.
- Packages to use – only wpa_supplicant and systemd-networkd are the packages to install
- BalenaEtcher – or flashing the image onto the SD card

1. Prerequisites
- From the website mentioned above, download the .iso file from the Raspberry Pi Website.
- Then once downloaded and setup, select the .iso file, select the SD card you have inserted into your computer terminal and click the flash button and then wait till it is done (the process can take a while to be completed).
- Then, open the boot partition (which is basically your SD card, which will be in a separate drive in your PC), and then create a blank text file and name it SSH (with no extension).
- Next, create another text file called wpa_supplicant.conf in the same drive and paste the following. This is used to connect to the Wi-Fi for the first time.
Ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev<br>update_config=1
country=US
network={
ssid=”mywifissid”
psk=”mywifipassword”
key_mgmt=WPA-PSK
}
Note: here, just write the country to be your own country of residence. The ‘mywifissid’ is the name of your Wi-Fi device, and ‘mywifipassword’ the password for your Wi-Fi device. The key_mgmt should be set to None if you don’t have a password for your Wi-Fi.
- Now turn the power of the Raspberry Pi on. To find its IP, tools like Angry IP Scanner can be used and you can scan the subnet.
- Open your computer Terminal and then go to the directory where your Raspberry Pi OS Lite is installed. Then simply
ssh pi@raspberrypi.local
after which you’ll be prompted to connect or not, for which you type in ‘yes’. Then you’ll be prompted for the password, and the default password is raspberry.
7. Now you finally would want to update your package list and upgrade the packages and then reboot Pi. For this, just enter the commands given below, wait for them to process and then you’re ready for the next step.
sudo apt update -y
sudo apt upgrade -y
sudo reboot
2. Setting Up system -network
Before we begin this step, from ArchWiki – “system -network is a system daemon that manages network configurations. It detects and configures network devices as they appear; it can also create virtual network devices.”
Now usually in many builds, we use a software to provide a Domain Name System (DNS) caching and dynamic host configuration protocol (DHCP) for smaller networks. This basically allows us to assign IP addresses to devices connecting to the AP. And the DNS then maps host names to the IP addresses. To do so, we need to assign a static IP address to the DHCP and configure it.
But in our case, the networkd is already built into the init system. Therefore, we don’t need to configure the DHCP or the dhcpd configuration step. This is especially useful which helps us minimize the need of additional packages. We are basically using the systemd-networkd instead of the hostapd. So now, moving on to the steps.
- Prevent the use of dhcpd
Note: it is required that you run this step as a root
In this step, we are first masking the dhcp and networking services through the first command. Then we are removing the networking interfaces like wlan0 in the next line of code. Finally we are replacing the text in the codes which are present in the resolve conf file of the system.
Copy the lines of code one by one from the following, wait for the processes to happen and proceed to the next step.
sudo systemctl mask networking.service dhcpcd.service
sudo mv /etc/network/interfaces /etc/network/interfaces~
sudo sed -I ‘1i resolvconf=NO’ /etc/resolvconf.conf
2.Use the inbuilt systemd-networkd
In this step, there are two lines of code to run. First you run the systemd-networkd command which helps run the package. The next line of code then helps set up a network and then we can proceed onwards towards the third step.
As always, wait for the program to finish the particular line of code, and once you’ve confirmed that the setup is finished, you can move ahead.
sudo systemctl enable systemd-networkd.service system-resolved.service
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

3. Configuring wpa-supplicant (wlan0 as client)
First of all, take note that in the following steps, wlan0 is the Wi-Fi carrier (AP) and wlan1 is the USB adapter that you have used. We are now going to create a wpa-supplicant for both of them separately.
Recall that initially we had created a wpa-supplicant conf file. Now we will create 2 conf files so that one will connect to our access point and the other will connect to the Wi-Fi. First we will configure the on-board Wi-Fi. This is used to create an AP.
- Create a new file
Use the command given below to create a new file. Once this command is successfully executed, you will be taken to the file, after which you should look at the step below.
sudo nano /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
2. Add the following content from below in the created file, and then press Ctrl X,Y and Enter. Note that you can change the country in the given text to the country of your residence. It isn’t required to be changed as such, only in cases where there are different channels used perhaps should you pay attention to this. SSID can be any name that you choose to keep, in our case, we have gone with the name ‘Extender’. The psk field is the password field, which also can be set to whatever meets your needs. In our case, we have set it to ‘12345678’. Usually, it is seen that people keep the same password for the extender as their Wi-Fi’s, but it is totally up to you!
country=IN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid=”Extender”
mode=2
key_mgmt=WPA-PSK
psk=”12345678”
frequency=2412
}
The frequency to be used can also be set to either a 5Ghz or a 2.4Ghz value, and this depends on whatever your Wi-Fi’s frequency channel is. We have set it to 2.4 as an example in this case.
Remember, this configuration is to be used for the onboard wifi Adapter wlan0 which will be used to create a wireless access point.
3. Give users permissions to read and write to the file
Copy the following line of code. Once confirmed, move onto the next step.
sudo chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
4. Here, first we disable and then enable the service. We can directly use reload, but sometimes the changes are not reflected – so the old method is better.
sudo systemctl disable wpa_supplicant.service
sudo systemctl enable wpa_supplicant@wlan0.service
4. Configuring wpa-supplicant (wlan1 as client)
Same procedure as the previous step, in this, we are just setting the wpa-supplicant file for the USB adapter that will be connected to the client.
- Create a new file
Use the command below to create a new file, to which you’ll be taken to upon execution
sudo nano /etc/wpa_supplicant/wpa_supplicant-wlan1.conf
Add the following content in the file and then press Ctrl X,Y and Enter
country=US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid=”RouterSSID”
psk=”12345678”
}
Change the SSID and psk to your Router SSID and password. This should be the SSID and password of the device you want your extender to connect to.
3. Give user permissions to read and write to the file
Copy the given line of code
sudo chmod 600 /etc/wpa_supplicant-wlan1.conf
4. Restart wpa-supplicant service
Disable and Enable, just like before.
sudo systemctl disable wpa_supplicant.service
sudo systemctl enable wpa_supplicant@wlan1.service

5. Configuring Interfaces
These are some of the properties that the Wi-Fi card will use. First for the on-board Wi-Fi, then for the router.
- Create a new file
Copy this line of code to your terminal
sudo nano /etc/systemd/network/08-wlan0.network
2. Add the following content
Copy this content in the file and save the file by Ctrl X,Y and Enter
[Match]
Name=wlan0
[Network]
Adress=192.168.7.1/24
IPMasquerade=yes
IPForward=yes
DHCPServer=yes
[DHCPServer]
DNS=1.1.1.1
You can change the DNS to whatever DNS you want. Keep the rest same
3. Create a new file
This is for the client you will be connecting to
sudo nano /etc/systemd/network/12-wlan1.network
4. Add the following content
Copy this content in the file and save the file by Ctrl X,Y and Enter
[Match]
Name=wlan1
[Network]
DHCP=yes
5. Reboot Raspberry Pi
Use the following command to reboot
sudo reboot