I’ve been playing around a lot with my FreeNAS installation since assembling it last year as my “Pandemic Project” (which, of course, would become the first of many), and I’m constantly looking for new things to implement. Advertising has been a thorn in my side since the early days of the internet, so it seemed only logical that I should see what all the fuss with Pi-Hole was about!
Pi-Hole is most readily installed on a Raspberry Pi, but I’m trying to consolidate as much of my infrastructure as possible, so I thought I might have a go getting it working on the server. Unfortunately, FreeNAS is based on BSD while Pi-Hole is written for Linux (so there’s no plugin available), so we’ll have to install it on a virtual machine.
Installing Ubuntu Server on a Virtual Machine
The first thing we’ll need, of course, is the installation media. There’s a flavor of Pi-Hole written specifically for Ubuntu, so that seems to be the logical choice! My recommendation is to install the most compact version available, and the netboot installer image allows you to pick Ubuntu Server with minimal options. It’s a little difficult to find the correct download, so just grab the URL below:
Of course, if Bionic Beaver is outdated, just change the /bionic directory to the current version!
Back in FreeNAS, go to the Virtual Machines menu and add a new Linux VM. Give it a name that you’ll remember (“pihole” is a solid choice) and set the virtual CPU count to 1 and the memory size to 512MiB. On the Disks page, create a new AHCI disk and set its Zvol location to /data/pihole and size to 4GiB. When you get to the options for installation media, select “Upload an installer image file” and choose the mini.iso file you downloaded earlier. Once all your settings are configured, you can boot the virtual machine and install Ubuntu. The VNC option opens a virtual terminal that will allow you to connect to and interact with the virtual machine through the installation process.
If you are prompted for DNS servers, use Google’s (22.214.171.124 and 126.96.36.199) as a default for now.
When the install completes, Ubuntu will prompt you to remove installation media and reboot. Once you are disconnected from the VNC, stop the virtual machine and remove the installation media by deleting the CDROM from the “Devices” list under the virtual machine options.
Setting up Pi-Hole
Restart the virtual machine and connect to the VNC. Log into Ubuntu and invoke the following commands:
sudo apt update
sudo apt upgrade
sudo apt install net-tools
sudo apt install wget
The first thing we need to do is set up a static IP address for the virtual machine. Use
ifconfig to find the local IP address.
In this example, the device is called ‘enp0s4’.
We will now need to change the settings for this device by editing the netplan config. Invoke the following command:
sudo nano /etc/netplan/01-netcfg.yaml
You will need to change edit the file so that it look like the image below. Pay special attention to the number of spaces for each indentation.
Once this is complete, reboot the VM.
After rebooting and logging back into Ubuntu, install Pi-Hole using the automatic installation script, just like you normally would.
wget -O basic-install.sh https://install.pi-hole.net
sudo bash basic-install.sh
Once the script finishes, you can access the web UI by navigating to [PIHOLEIPADDRESS]/admin. Make sure to change your password!
The last thing you’ll need to do is set up your router’s DHCP settings, but that’s best explained by Pi-Hole’s own documentation.