====== Install Pi-hole with recursive DNS server on Ubuntu 20.04 LTS as Unraid Virtual Machine ====== This will guide you through the setup of Pi-hole with a recursive DNS server using Unbound on an installation of [[Ubuntu 20.04 LTS]] as an Unraid Virtual Machine. ===== VM Settings ===== * Autostart: Yes * Name: pihole.20.04vX * Description: Pi Hole * CPU Mode: Host Passthrough * Logical CPUs: 3 * Internal Memory: 1024 * Max Memory: 1024 * Machine: Q35-4.1 * BIOS: OVMF * USB Controller: 2.0 (EHCI) (I don't have USB 3.0 on current hardware) * OS Install ISO: select the ubuntu - 20.04 iso * OS Install CDRom Bus: SATA * Primary vDisk Location: Auto if on the array, below options for ssd */mnt/disks/samsung_nvme/vms/pihole.20.04vX/vdisk1.img --> This one is vDisk on SSD (Current setup uses this) */dev/disk/by-id/ata-"ID OF DRIVE" --> This one is passthrough * Primary vDisk Size: 10G * Primary vDisk Type: raw * Primary vDisk Bus: VirtIO if on the array, below options for ssd * VirtIO --> This one is vDisk on SSD (Current setup uses this) * SATA --> This one is passthrough * Graphics Card: VNC * VNC Video Driver: QXL (best) * VNC Password: leave this blank (or set password if concerned folks will get access to unraid!) * VNC Keyboard: English-United States * Sound Card: none * Network MAC: whatever it is * Network Bridge: br0 * USB Devices: none * Other PCI Devices: none ===== Install to Virtual Machine ===== * Full Name: Dirk Rockface * Server: pihole * User Name: dirk * Finish installing. I didn't install any "common packages" from the setup CD. ===== Setup ===== ==== Update Packages ==== sudo apt-get update sudo apt-get dist-upgrade ==== Install SSH Server ==== sudo apt-get install openssh-server ==== Create ssh-rsa key auth ==== * In home directory mkdir .ssh * authorized_keys file needs to have keys in them. Copy over from harddrive, external drive, or create them. * When making keys on clients ssh-keygen -t rsa * New things for keys: * So, ssh-keygen no longer creates the keys with the headers on them. Seems to be no big deal for ssh but Cyberduck borked. * To make private keys with headers for Cyberduck:openssl genrsa -aes128 -out id_rsa 2048 openssl rsa -in id_rsa -pubout -out id_rsa.test ssh-keygen -f id_rsa.test -i -mPKCS8 * Links: * https://rietta.com/blog/2012/01/27/openssl-generating-rsa-key-from-command/ * https://stackoverflow.com/questions/1011572/convert-pem-key-to-ssh-rsa-format * Turn off Password Authsudo vim /etc/ssh/sshd_configUsePAM yes PasswordAuthentication no ==== Reboot ==== sudo reboot -h now ==== Install Pi-hole ==== curl -sSL https://install.pi-hole.net | bash * Select Google (we will remove it later) * Ok to default "StevenBlock" * Ok to IPv4 and IPv6 * Yes to Static * Yes to Web Admin Interface * Yes to Web Server * Yes to queries * Show everything * Change password pihole -a -p password ==== Install Unbound ==== sudo apt-get install unbound * write config file sudo vim /etc/unbound/unbound.conf.d/pi-hole.conf server: # If no logfile is specified, syslog is used # logfile: "/var/log/unbound/unbound.log" verbosity: 0 interface: 127.0.0.1 port: 5335 do-ip4: yes do-udp: yes do-tcp: yes # May be set to yes if you have IPv6 connectivity do-ip6: no # You want to leave this to no unless you have *native* IPv6. With 6to4 and # Terredo tunnels your web browser should favor IPv4 for the same reasons prefer-ip6: no # Use this only when you downloaded the list of primary root servers! # If you use the default dns-root-data package, unbound will find it automatically #root-hints: "/var/lib/unbound/root.hints" # Trust glue only if it is within the server's authority harden-glue: yes # Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS harden-dnssec-stripped: yes # Don't use Capitalization randomization as it known to cause DNSSEC issues sometimes # see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details use-caps-for-id: no # Reduce EDNS reassembly buffer size. # Suggested by the unbound man page to reduce fragmentation reassembly problems edns-buffer-size: 1472 # Perform prefetching of close to expired message cache entries # This only applies to domains that have been frequently queried prefetch: yes # One thread should be sufficient, can be increased on beefy machines. In reality for most users running on small networks or on a single machine, it should be unnecessary to seek performance enhancement by increasing num-threads above 1. num-threads: 1 # Ensure kernel buffer is large enough to not lose messages in traffic spikes so-rcvbuf: 1m # Ensure privacy of local IP ranges private-address: 192.168.0.0/16 private-address: 169.254.0.0/16 private-address: 172.16.0.0/12 private-address: 10.0.0.0/8 private-address: fd00::/8 private-address: fe80::/10 ==== Point Pi-hole to Unbound ==== * log into pi-hole * go to Settings -> DNS * uncheck Google servers and add Custom 127.0.0.1#5335 * Save ==== Fix domain pointing to /admin page ==== * To redirect the root address to /admin, add the following line to /etc/lighttpd/external.conf: (it used to be /etc/lighttpd/lighttpd.conf but it is recommended to use /etc/lighttpd/external.conf so that it isn't overwritten by updates) url.redirect = ( "^/$" => "/admin" ) * Links: * https://www.youtube.com/watch?v=FnFtWsZ8IP0 * https://www.reddit.com/r/pihole/comments/4eirjz/is_it_possible_to_forward_a_domain_to_the_pihole/ ==== Setup sync between two piholes ==== * Links: * https://www.youtube.com/watch?v=IFVYe3riDRA ==== Setup High Availability between to piholes ==== * Links: * https://www.youtube.com/watch?v=hPfk0qd4xEY * https://www.reddit.com/r/pihole/comments/d5056q/tutorial_v2_how_to_run_2_pihole_servers_in_ha/