# AdGuard Home as container (LXC) in Proxmox VE

After some practical daily challenges, I have decided to give a try to AdGuard Home as local DNS resolver.

One of the big differences is ability to resolve external DNS servers using DNS-over-HTTPS, DNS-over-QUIC, DNSCrypt.


[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/8QjeiUhbVES5rIgR-image-1785609249944.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/8QjeiUhbVES5rIgR-image-1785609249944.png)
ref
```url
https://github.com/AdguardTeam/AdGuardHome
```




Login into Proxmox



?? Download Debian distro template for containers. For some reason it might be cancelled or disrupted. As we now, which one template is expecting to find, let's download that manually. Navigate to containers' templates storage, find suitable and hit [Download] button
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-04/scaled-1680-/jC11M14U0vnzst2w-image-1776047559608.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-04/jC11M14U0vnzst2w-image-1776047559608.png)

Download task itself

??

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-04/scaled-1680-/UsKJgEmTpyDkkL9X-image-1776049815356.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-04/UsKJgEmTpyDkkL9X-image-1776049815356.png)

Template downloaded
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-04/scaled-1680-/i3t7w6bp5XxUEJw2-image-1776049915546.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-04/i3t7w6bp5XxUEJw2-image-1776049915546.png)

Script location:
```url
https://community-scripts.org/scripts/adguard
```



Open node shell

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/4ZYP0GFXSb1tB6oq-image-1785609462863.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/4ZYP0GFXSb1tB6oq-image-1785609462863.png)

Download the script:

```bash
export dir="/root/delme/"
mkdir -p ${dir}
cd ${dir}

curl -O https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/adguard.sh
ls -latr
```


Let's see what is inside of this script

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/5keMkQLFkjPJyXo3-image-1785609749222.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/5keMkQLFkjPJyXo3-image-1785609749222.png)







and invoke it's from the shell, when confident:
```bash
chmod +x adguard.sh
./adguard.sh
```

Installation questions

## Telemetry and diagnostics

Use [Down], [Space], [Enter
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/tRxV4R55WYurcICT-image-1785609911952.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/tRxV4R55WYurcICT-image-1785609911952.png)


## Kind of installation

Choose "Default Install"

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/bBrPFu34kFj0TSgG-image-1785610003042.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/bBrPFu34kFj0TSgG-image-1785610003042.png)

## Installations

Script will search for template, and if it is not found, begin download

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/MVmn31Ifrfs2EnUl-image-1785610077857.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/MVmn31Ifrfs2EnUl-image-1785610077857.png)

Installation successful

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/QWEKOJRsr3T9n51W-image-1785610183739.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/QWEKOJRsr3T9n51W-image-1785610183739.png)





# Applicatin configuration


Check in the browser the URL, which is indicated by installer (HTTPS will not work at this point)
```url
http://10.77.77.184:3000
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/VKrwwhrFRKaCIBdl-image-1785610252765.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/VKrwwhrFRKaCIBdl-image-1785610252765.png)

Do not change anything, proceed with defaults

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/Lw69NW76UsHBJmu6-image-1785610316735.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/Lw69NW76UsHBJmu6-image-1785610316735.png)

Create admin user (and note pass to password manager)

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/HERZeSxRBOGmeanS-image-1785610355742.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/HERZeSxRBOGmeanS-image-1785610355742.png)


Take instructions for other devices. Usually just skip it.

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/yO2EIHK5wlfSdDTv-image-1785610508275.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/yO2EIHK5wlfSdDTv-image-1785610508275.png)

Finalize application initial configuration

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/9vEGXS1KH8A1JPvY-image-1785610534534.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/9vEGXS1KH8A1JPvY-image-1785610534534.png)


Login with user created.

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/hM2U07W6Mp8RmteN-image-1785610675242.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/hM2U07W6Mp8RmteN-image-1785610675242.png)

Dashboard

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/MRRZcNbhNAu5K1TA-image-1785610637018.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/MRRZcNbhNAu5K1TA-image-1785610637018.png)




The only change we want to perform is to change IP address. Locate container, open it's network configuration, change from DHCP to STATIC and define desired IP address (remember do define CIDR mask). Remember default gateway!


[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/WpC1bUMS6ieBfLpB-image-1785612220180.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/WpC1bUMS6ieBfLpB-image-1785612220180.png)


Open container's shell , take a note of network address and perform restart. Verify address (there are still old and new):
```bash
ip -br -a
```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/np3B9EDx2jJAq3VK-image-1785610883427.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/np3B9EDx2jJAq3VK-image-1785610883427.png)

Restart container
```bash
shutdown -r now
```

After reboot, Verify again 
```bash
ip -br -a
```
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/C7jSTlXEb2cD9wrc-image-1785610975867.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/C7jSTlXEb2cD9wrc-image-1785610975867.png)



```bash
ip -br a
shutdown -r now
```


Last thing, before go: verify that container has "Start on boot" tick box enabled. Thus, we shall be sure that DNS server will be started with hypervisor. That applies to all machines, which need to be started (such as main router :)

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/fP03Ye7R85DYcFj1-image-1785611048664.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/fP03Ye7R85DYcFj1-image-1785611048664.png)



# Add public public name servers 

Navigate to DNS settings (upstream servers)
[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/zgPdCbmyVHQfhYXe-image-1785611172866.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/zgPdCbmyVHQfhYXe-image-1785611172866.png)

List available here
```url
https://dox.installanduse.com/books/domain-name-system-dns/page/public-nss-doh-dot-doq
```

Check for "Fastest IP address"

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/v9bO6tS6lbC3BwIs-image-1785611262895.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/v9bO6tS6lbC3BwIs-image-1785611262895.png)


Leave some public NSs to resolve list

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/u9ca6201xoLtO0tp-image-1785611330507.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/u9ca6201xoLtO0tp-image-1785611330507.png)



Save settings

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/scaled-1680-/bRKDroClXYJn8GKI-image-1785611352977.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-08/bRKDroClXYJn8GKI-image-1785611352977.png)



Next morning, after the first day of DNS traffic

(img)


With no filtering lists loads, DNS server serverd 54% of cached traffic to local clients. That is very good, which means, that local clients received DNS response earlier, rather then for original query.

(img)