2020-12-24 22:24:32 +00:00
# Run Pi-hole on your UDM
2020-05-31 13:40:04 +00:00
2020-07-13 05:37:04 +00:00
## Features
2023-02-22 16:49:54 +00:00
1. Run Pi-hole on your UDM with a completely isolated network stack. This will not port conflict or be influenced by any changes on by Ubiquiti
2020-05-31 17:05:24 +00:00
2. Persists through reboots and firmware updates.
2020-05-31 13:40:04 +00:00
2020-07-13 05:37:04 +00:00
## Requirements
2022-06-24 15:16:09 +00:00
1. You have successfully setup the on boot script described [here ](https://github.com/unifi-utilities/unifios-utilities/tree/main/on-boot-script )
2020-05-31 13:40:04 +00:00
2022-06-08 07:13:19 +00:00
## Customizations
Note: IP and VLAN settings for you pihole network, 20-dns-conflist and 10-dns.sh MUST all match each other.
2023-02-22 16:49:54 +00:00
- Example settings for pihole network:
Network Name: Pihole
Host address: 10.0.5.1
Netmask: 24
VLAN ID: 5
Network Type: Standard
Multicast DNS: Enable
DHCP: None
Ipv6 Interface Type: None
- YOU WILL NEED TO CHANGE [`20-dns.conflist` ](../cni-plugins/20-dns.conflist )
2022-06-08 07:13:19 +00:00
Change the line:
"mac": "add 3 fake hex portions, replacing x's here 00:1c:b4:xx:xx:xx",
2023-02-22 16:49:54 +00:00
to create a legitimate mac address that matches some vendor space(first 6 digits ). It needs to be unique on your network.
The example gives one option. Locally administered mac addresses do not work.
2022-06-08 07:13:19 +00:00
If you are using a different IP address than the example:
Change these lines to match your settings:
2023-02-22 16:49:54 +00:00
"address": "10.0.5.3/24",
"gateway": "10.0.5.1"
2022-06-08 07:13:19 +00:00
If you are using a different VLAN than the example:
Change this line to match your VLAN number:
2023-02-22 16:49:54 +00:00
"master": "br5",
- You MAY need to change[`10-dns.sh`](../dns-common/on_boot.d/10-dns.sh).
2022-06-08 07:13:19 +00:00
If you are using a different IP address than the example:
Change these lines to match your settings:
2023-02-22 16:49:54 +00:00
IPV4_IP="10.0.5.3"
IPV4_GW="10.0.5.1/24"
2022-06-08 07:13:19 +00:00
If you are using a different VLAN than the example:
Change this line to match your VLAN number:
2023-02-22 16:49:54 +00:00
VLAN=5
2022-06-08 07:13:19 +00:00
If you want the pihole container to have a different name than the example:
Change this line to match the different name:
2023-02-22 16:49:54 +00:00
CONTAINER=pihole
- If you want IPv6 support
2022-06-08 07:13:19 +00:00
Use 20-dnsipv6.conflist and update 10-dns.sh with the IPv6 addresses.
2023-02-22 16:49:54 +00:00
Also, please provide IPv6 servers to podman using --dns arguments.
2022-06-08 07:13:19 +00:00
## Steps
2020-07-13 05:37:04 +00:00
2022-06-08 07:13:19 +00:00
### Configuration files and scripts
2020-05-31 16:57:38 +00:00
2023-02-22 16:49:54 +00:00
1.0 Copy [`05-install-cni-plugins.sh` ](../cni-plugins/05-install-cni-plugins.sh ) to `/data/on_boot.d`
1.1 Execute `chmod +x /data/on_boot.d/05-install-cni-plugins.sh`
1.2 Execute `/data/on_boot.d/05-install-cni-plugins.sh`
2020-07-13 05:37:04 +00:00
2022-06-08 07:13:19 +00:00
2.0 On your controller, create a network with no DHCP server and give it a VLAN.(see example settings above).
2023-02-22 16:49:54 +00:00
2.1 Copy YOUR modified [`20-dns.conflist`] to `/data/podman/cni`
2.2 Execute `chmod +x /data/podman/cni/20-dns.conflist`
2.3 Execute `cp /data/podman/cni/20-dns.conflist /etc/cni/net.d/dns.conflist`
2022-06-08 07:13:19 +00:00
To check progress - run the command:
2022-04-13 10:28:56 +00:00
```shell
2022-06-08 07:13:19 +00:00
podman network inspect dns
2022-04-13 10:28:56 +00:00
```
2023-02-22 16:49:54 +00:00
You should see a copy of your 20-dns.conflist displayed.
2022-06-08 07:13:19 +00:00
2023-02-22 16:49:54 +00:00
3.0 Copy your [`10-dns.sh`] to `/data/on_boot.d`
3.1 Execute `chmod +x /data/on_boot.d/10-dns.sh`
3.2 Execute `/data/on_boot.d/10-dns.sh`
2020-12-24 22:24:32 +00:00
2022-06-08 07:13:19 +00:00
### Create directories for persistent Pi-hole configuration
4.0 Execute the following commands:
2023-02-22 16:49:54 +00:00
```sh
mkdir -p /data/etc-pihole
mkdir -p /data/pihole/etc-dnsmasq.d
```
2020-05-31 13:40:04 +00:00
2022-06-08 07:13:19 +00:00
### Create the pihole container
Note:
2023-02-22 16:49:54 +00:00
--name MUST match the name you set in 10-dns.sh
-e FTLCONF_REPLY_ADDR4 MUST be in the range you set for your pihole network
-e TZ MUST match the timezone for your controller
2022-06-08 07:13:19 +00:00
The example uses these upstream DNS servers The following command sets the upstream DNS servers to `1.1.1.1` ([Cloudflare DNS](https://1.1.1.1/)) and `8.8.8.8` ([Google DNS](https://developers.google.com/speed/public-dns/)).
If you want to use different upstream DNS servers, change the following lines:
2023-02-22 16:49:54 +00:00
--dns=1.1.1.1 \
--dns=8.8.8.8 \
2022-06-20 17:54:02 +00:00
If you want to run a DHCP server as well you need to add the following lines:
2023-02-22 16:49:54 +00:00
--cap-add=NET_ADMIN
5.0 Run the following (or your modified version) by copy / pasting the entire set.
2020-07-13 05:37:04 +00:00
```sh
2023-02-22 16:49:54 +00:00
podman run -d \
2022-04-13 10:28:56 +00:00
--network dns \
--restart always \
2020-06-28 13:02:50 +00:00
--name pihole \
-e TZ="America/Los Angeles" \
2023-02-22 16:49:54 +00:00
--cap-add=NET_ADMIN \
-v "/data/etc-pihole/:/etc/pihole/" \
-v "/data/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/" \
2020-12-24 22:24:32 +00:00
--dns=127.0.0.1 \
--dns=1.1.1.1 \
--dns=8.8.8.8 \
2020-06-28 13:02:50 +00:00
--hostname pi.hole \
-e VIRTUAL_HOST="pi.hole" \
-e PROXY_LOCATION="pi.hole" \
2022-06-20 17:54:02 +00:00
-e FTLCONF_REPLY_ADDR4="10.0.5.3" \
2020-06-28 13:02:50 +00:00
-e IPv6="False" \
pihole/pihole:latest
```
2023-02-22 16:49:54 +00:00
2022-04-13 10:28:56 +00:00
The below errors are expected and acceptable:
2023-02-22 16:49:54 +00:00
2022-04-13 10:28:56 +00:00
> ```
> ERRO[0022] unable to get systemd connection to add healthchecks: dial unix /run/systemd/private: connect: no such file or directory
> ERRO[0022] unable to get systemd connection to start healthchecks: dial unix /run/systemd/private: connect: no such file or directory
2023-02-22 16:49:54 +00:00
> ```
2020-07-13 05:37:04 +00:00
2022-06-08 07:13:19 +00:00
6.0 Set the pihole admin password
2020-07-13 05:37:04 +00:00
```sh
2021-05-25 08:44:32 +00:00
podman exec -it pihole pihole -a -p YOURNEWPASSHERE
2020-06-28 13:02:50 +00:00
```
2023-02-22 16:49:54 +00:00
2022-06-08 07:13:19 +00:00
## Set the new DNS in your UDM
2020-07-13 05:37:04 +00:00
2022-06-08 07:13:19 +00:00
7.0 Update your DNS Servers to `10.0.5.3` (or your custom ip) for each of your Networks (UDM GUI | Networks | Advanced | DHCP Name Server)
7.1 Access the pihole web interface like you would normally, e.g. http://10.0.5.3 if using the example
2020-07-13 05:37:04 +00:00
2021-07-03 05:33:55 +00:00
## Upgrading your PiHole container
2022-06-08 07:13:19 +00:00
2023-02-22 16:49:54 +00:00
1. Edit `upd_pihole.sh` script to use the same `podman run` command you used at installation.
2. Copy the `upd_pihole.sh` script to /data/scripts
3. Anytime you want to update your pihole installation, simply run `/data/scripts/upd_pihole.sh`
2021-07-03 05:33:55 +00:00
2022-06-08 07:13:19 +00:00
## Optional Builds
2023-02-22 16:49:54 +00:00
The cloudflared command is written in Go and is not very lightweight. In my
experience, it's not made for long-term running. Instead, the project DoTe
2022-06-08 07:13:19 +00:00
has a tiny memory footprint and operates on an event loop with some major
2023-02-22 16:49:54 +00:00
optimisations for connection caching. It allows you to forward traffic to any
2022-06-08 07:13:19 +00:00
DNS-over-TLS provider.
### PiHole with CloudFlareD Command
2023-02-22 16:49:54 +00:00
2022-04-13 10:28:56 +00:00
podman run -d \
2023-02-22 16:49:54 +00:00
--network dns
2022-04-13 10:28:56 +00:00
--restart always \
2021-05-25 08:44:32 +00:00
--name pihole \
-e TZ="America/Los Angeles" \
2023-02-22 16:49:54 +00:00
-v "/data/etc-pihole/:/etc/pihole/" \
-v "/data/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/" \
2021-05-25 08:44:32 +00:00
--dns=127.0.0.1 \
--dns=1.1.1.1 \
--hostname pi.hole \
-e CLOUDFLARED_OPTS="--port 5053 --address 0.0.0.0" \
-e VIRTUAL_HOST="pi.hole" \
-e PROXY_LOCATION="pi.hole" \
-e ServerIP="10.0.5.3" \
-e PIHOLE_DNS_="127.0.0.1#5053" \
-e IPv6="False" \
boostchicken/pihole:latest
2021-10-21 05:30:34 +00:00
2021-11-16 16:31:33 +00:00
### PiHole with DoTe
2021-10-21 05:30:34 +00:00
2023-02-22 16:49:54 +00:00
Simply copy the `custom_pihole_dote.sh` script to `/data/scripts` and run it
to forward all DNS traffic over TLS to Cloudflare 1.1.1.1 / 1.0.0.1. You can modify the
2022-06-08 07:13:19 +00:00
script to forward to different services with ease and full configuration
options including certificate pinning is available in the DoTe README here:
https://github.com/chrisstaite/DoTe/
2022-04-13 10:28:56 +00:00
podman run -d \
--network dns \
--restart always \
--name pihole \
-e TZ="America/Los Angeles" \
2023-02-22 16:49:54 +00:00
-v "/data/etc-pihole/:/etc/pihole/" \
-v "/data/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/" \
2022-04-13 10:28:56 +00:00
--dns=127.0.0.1 \
--dns=1.1.1.1 \
--hostname pi.hole \
-e CLOUDFLARED_OPTS="--port 5053 --address 0.0.0.0" \
-e VIRTUAL_HOST="pi.hole" \
-e PROXY_LOCATION="pi.hole" \
-e ServerIP="10.0.5.3" \
-e PIHOLE_DNS_="127.0.0.1#5053" \
-e IPv6="False" \
boostchicken/pihole-dote:latest
2021-10-21 05:30:34 +00:00
2023-02-22 16:49:54 +00:00
## New releases will be made when PiHole updates their labels