- Download Raspbian Lite
- Download and install balenaEtcher
- Flash the Raspbian Lite
.imgor.zipto an SD card using balenaEtcher
-
Turn on the Raspberry Pi and wait for it to boot to the CLI
-
Enter
sudo raspi-config- Select
1 Change User Passwordand create a unique password - Optional: Select
2 Network Options>N1 Hostname - Optional: Select
2 Network Options>N2 Wi-fi - Select
3 Boot Options>B1 Desktop / CLI>B2 Console Autologin - Select
4 Localisation Options>I1 Change Locale(I useen_US.UTF-8 UTF-8) - Select
4 Localisation Options>I2 Change Timezone(I usePacific-New) - Select
4 Localisation Options>I3 Change Keyboard Layout - Select
5 Interfacing Options>P2 SSH>Yes - Optional: Reduce the amount of memory dedicated to the GPU to the minimum.
- Select
7 Advanced Options>A3 Memory Splitand then enter16 - If you'll need more GPU performance for your application, skip this step.
- Select
- Optional:
8 Update - Exit raspi-config and save
- Select
-
Optional: Force apt-get to use IPv4 (Mine would fail using IPv6)
- Enter
sudo nano /etc/apt/apt.conf.d/99force-ipv4 - Add to file:
Acquire::ForceIPv4 "true"; - Exit and save (
^XthenYthenenter)
- Enter
-
Update all of the things using
sudo apt-get update && sudo apt-get upgrade -
Optional: Enable accessing the Raspberry Pi using
.localdomains- Enter
sudo apt-get install avahi-daemon - This step is entirely optional, but I have a bunch of Raspberry Pis on my network and like to access them via ssh using the .local domain
- Enter
-
Optional: Disable Wi-Fi on the Raspberry Pi
- Enter
sudo nano /boot/config.txt - Scroll to the bottom and add
dtoverlay=pi3-disable-wifion a new line - Exit and save (
^XthenYthenenter)
- Enter
- Install Pi-hole using
curl -sSL https://install.pi-hole.net | bash. If you don't trust piping tobash, use:git clone --depth 1 https://github.com/pi-hole/pi-hole.git pihole cd "pihole/automated install/" sudo bash basic-install.sh - Configure your router to use Pi-hole
- I use a Netgear Orbi with Method #1 ("Define Pi-hole’s IP address as the only DNS entry in the router"). In an ideal world, I would use Method #2.
- Unfortunately, I also had to disable IPv6 to eliminate some pesky logging. You may want to do the same if you see a ton of IPv6 traffic logged in Pi-hole.
- Optional: Use Pi-hole's built-in DHCP server instead of your router.
- This allows you to monitor traffic from individual devices on your network. You can skip this step if you're fine having all traffic logged to your router's IP address.
- This step isn't necessary if your router supports Method #2 from the prior step.
- Optional: Set static IP addresses for known devices on your network
- Via admin panel (use this if you're not comfortable with the command line):
- Go to
http://pi.hole/adminin your browser - Select
Settings>DHCP - Enter you static IPs under
Static DHCP leases configuration
- Go to
- Via CLI (use this if you're comfortable with the command line and want to save some time):
sudo nano /etc/dnsmasq.d/04-pihole-static-dhcp.conf- Add one entry per line in the following format:
dhcp-host=<MAC address>,<IP address>,<host name> - Exit and save (
^XthenYthenenter) sudo service pihole-FTL restart
- Via admin panel (use this if you're not comfortable with the command line):
- Optional: Enable DNSSEC
- Go to
http://pi.hole/adminin your browser - Select
Settings>DNS - Check
Use DNSSECand clickSave
- Go to
- Enter
cd /opt - Download the latest pre-built linux_arm binary.
- As of writing, the latest binary is dnscrypt-proxy-linux_arm64-2.0.23.tar.gz
sudo wget https://github.com/jedisct1/dnscrypt-proxy/releases/download/2.0.23/dnscrypt-proxy-linux_arm-2.0.23.tar.gz
- Enter
sudo tar -xzvf dnscrypt-proxy-linux_arm-2.0.23.tar.gz(replace with your file name) - Delete the archive using
sudo rm dnscrypt-proxy-linux_arm-2.0.23.tar.gz(replace with your file name) - Rename the dnscrypt-proxy folder using
sudo mv linux-arm dnscrypt-proxy - Enter
cd dnscrypt-proxy - Create a configuration file based on the example with
sudo cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml - Edit the configuration file with
sudo nano dnscrypt-proxy.toml - Change the listening port because the default (
53) is already used by Pi-hole. I changed the port to 5053 by changinglisten_addresses = ['127.0.0.1:53', '[::1]:53']tolisten_addresses = ['127.0.0.1:5053', '[::1]:5053']. - Optional: Change other settings. You can learn about them here. My preferences are below:
require_dnssec = trueserver_names = ['cloudflare']fallback_resolver = '1.1.1.1:53'ignore_system_dns = true
- Install a dnscrypt-proxy service with
sudo ./dnscrypt-proxy -service install - Start the dnscrypt-proxy service with
sudo ./dnscrypt-proxy -service start
- Go to
http://pi.hole/adminin your browser - Select
Settings>DNS - Make sure
Custom 1 (IPv4)is the only box checked - Enter
127.0.0.1#5053in theCustom 1 (IPv4)box - Optional: Setup IPv6
- Check the box next to
Custom 3 (IPv6) - Enter
::1#5053in theCustom 3 (IPv6)box
- Check the box next to
- Click "Save"