Today we are going to install AdGuard Home on OpenMediaVault using Docker and Portainer.
AdGuard Home is fairly straight forward to set up on OpenMediaVault and we will be using Portainer to configure it. Portainer is a web interface that manages docker containers, so it’s a powerful tool to get accustomed to using!
Before we get started, it is incredibly important to note that having redundant DNS servers is very important. I highly suggest that you purchase a cheap Raspberry Pi Zero and configure AdGuard Home on it so that you have two Pi-hole DNS servers. This will ensure that when your NAS is rebooted, your clients do not lose DNS resolution services.
Instructions – AdGuard Home OpenMediaVault
1. Login to OpenMediaVault and select OMV-Extras on the left-hand side. If you don’t have OMV-Extras, you will need to install it from the Plugins section.
2. Select the Docker tab, then click the Docker drop-down and select Install. Docker will now install.
3. Select the Portainer drop-down and select Install. We will be using Portainer to install AdGuard Home.
4. When Portainer finishes, restart your Raspberry Pi and when it comes back up, Open Portainer.
5. Set up your username and password for Portainer.
6. Select Docker and then Connect.
7. Select Local. Leave this up in the background and we will get back to it in a few steps.
8. Now that Portainer is set up, we need to create a docker macvlan network interface. SSH into your OpenMediaVault server. We need to determine what network interfaces currently exist and note down the adapter name. To do this, run the command below and note down the network interface name that has your Raspberry Pi’s IP address (in this example, mine is enxb827eb03ae0e).
9. Next, you need to run the command below while substituting the correct subnet (most are 192.168.1.0/24 by default) and network interface ID (mine is enxb827eb03ae0e). You also need to pick an IP address that you’d like to use that’s not currently in use. I will be using 192.168.1.195. NOTE: ag_network will be the name of the network (you can substitute this as you’d like). The items listed below in pink might need to be updated when you run this command.
sudo docker network create -d macvlan -o parent=enxb827eb03ae0e --subnet=192.168.1.0/24 --gateway=192.168.1.1 --ip-range=192.168.1.195/32 ag_network
10. The network interface is now setup. Go back to Portainer and select Volumes.
11. Select Add Volume and add two total volumes. One with the name ag-work and one with the name ag-conf.
12. Select Containers and then Add Container.
13. Give the container a Name and then in the Image section, enter adguard/adguardhome.
14. Select Publish a new network port nine total times and match the ports as the screenshot below shows. NOTE: Ensure that you have the three top ports (53, 67, 68) set as UDP ports and the rest (53, 68, 80, 443, 853, 3000) are set as TCP.
15. Select Volumes and select map additional volume twice. Enter the first container as /opt/adguardhome/conf and select the ag-conf volume. Enter the second container as /opt/adguardhome/work and select the ag-work volume.
16. In the Network tab, select the macvlan network we created earlier.
17. In the Restart Policy, change this to Always. This will force AdGuard Home to always start when Docker starts.
18. Select Deploy the container. The container will take a few minutes to fully download and install, but when it’s done and reporting running, you will be able to access the AdGuard Home web admin interface using the macvlan IP address you assigned and port 3000!
19. Select Get Started to start the configuration process.
20. Change the listen interface to the IP address of OpenMediaVault.
21. Specify a username and password.
22. The next screen will show you how to configure different devices. My preferred approach is setting AdGuard Home to be my router’s DNS server. If you aren’t interested in doing that, this is a great section to learn how to set up the DNS server on your local device (Windows, Mac, etc.).
23. Select Next and then Open Dashboard. Sign in when prompted.
24. AdGuard Home is now set up and installed. Please note that you will no longer use port 3000 when navigating to the web portal. After the setup process is complete, you will be able to access the management portal using the IP address only (as it uses port 80).
Setting up AdGuard Home on OpenMediaVault is fairly straight forward and is a great alternative to Pi-Hole. Once again, I recommend that you set up a second instance of AdGuard Home so that you have redundant DNS servers.
Thank you for reading the tutorial! As always, if you have any questions, please leave them in the comments!
This Post Has 36 Comments
This is also something I was wondering and investigating.
You say you are not entirely sure what ip address, but in adguard or pihole in this case, both are assigned static ip addresses in the docker images.
Then that should work?
I’m also fairly new to this.
Or should we just make /32 macvlans for each docker (so one for pihole and one for adguard?)
The /32 makes it a static IP address, but it can only be assigned to one container. Technically, you can use that one macvlan network interface for both containers, but only one of them can be started at a time. If you want to run both at the same time, creating a second macvlan network interface might be your best bet, but you’ll need a second NIC potentially.
Found a way to use the macvlan with a subnet and add multiple docker containers with each their own ip:
First create macvlan: (I have a bond setup, you chould choose eth0 or …)
docker network create -d macvlan -o parent=bond0 –subnet=192.168.1.0/24 –gateway=192.168.1.1 –ip-range=192.168.1.192/28 Local-LAN
Then create a NEW container with an assigned ip:
docker run –name adguardhome –ip 192.168.1.198 –network Local-LAN -v /volume1/docker/adguard/work:/opt/adguardhome/work -v /volume1/docker/adguard/conf:/opt/adguardhome/conf -p 53:53/tcp -p 53:53/udp -p 3000:3000/tcp -p 3001:3001/tcp -p 80:80/tcp -p 443:443/tcp -p 67:67/udp -p 68:68/tcp -p 68:68/udp -p 853:853/tcp -d adguard/adguardhome
This works for me
Thanks for sharing!
How excatly are you doing it? For me port 53 68, 67, 80, 443 etc. are already used by the OMV configuration webpage and i dont know what 53, 68 and 67 are used, but I cant start the stack because it says those ports are in use.
Did you create the macvlan network interface? That avoids all port conflicts.
I tried to follow your instructions. But when click ‘Deploy’ I get this error:
“failed to create the macvlan port. device or resource busy”
I used this command for Network creation:
sudo docker network create -d macvlan -o parent=vethd542ccb –subnet=172.16.1.0/24 –gateway=172.16.1.1 –ip-range=172.16.1.195/32 ag_network
Note: 172.16.1.* is my local network and 172.16.1.195 is not in use otherwise DHCP range for my router ends at *.190)
Any ideas what I could have done wrong?
Have you created any other macvlan network interfaces? If so, that could be the problem.
I did not.
However, I got it to work by using ‘parent=eth0’ instead of ‘parent=vethd542ccb’.
(No idea why – I just tried….)
Thanks for the great tutorial. works great!
Thank you for for your quick feedback!
But no, this is the only macvlan I have created.
However, I got it finally running by not using ‘parent=vethd542ccb’´ when creating the Network (the name ‘vethd542ccb’ I got as per your instructions via ifconfig), but using ‘parent=eth0’. As I am not so deep in the IT trenches, I am following your instrucions pretty much blindly (and tried eth0 as per some information here in the comment section), so I have no idea why it works this way and if it might have some negative side effects (?).
Othe than that: Thank you for this great turorial.
Glad you got it working!
Comments are closed.