[Docker] AdGuard Home으로 광고를 막아보자
나만의 DNS서버 구축으로 광고 차단과 보안을 동시에 해결.
Adguard Home는 DNS서버로 DNS쿼리를 필터하여 연결된 내부 망 클라이언트들의 광고·트래킹을 차단합니다.
이번 포스팅 에서는 Docker를 이용해 AdGuard Home를 설치 해 보겠습니다.
설치 환경:
Ubuntu24.04 / Docker version 28.4.0 / Docker Compose version v2.39.1
docker, docker-compose 설치는 여기로

docker-compose.yml 작성
services:
adguardhome:
image: adguard/adguardhome:v0.107.65
restart: unless-stopped
ports:
#DHCP
# - '67:67/tcp'
# - '67:67/udp'
# - '68:68/udp'
#Web Console
- '3000:3000/tcp'
#DNS
- '53:53/tcp'
- '53:53/udp'
#DNS over HTTPS
- '80:80/tcp'
- '443:443/tcp'
- '443:443/udp'
#DNS over TLS
- '853:853/tcp'
#DNS over QUIC
- '784:784/udp'
- '853:853/udp'
- '8853:8853/udp'
#DNSCrypt
- '5443:5443/tcp'
- '5443:5443/udp'
volumes:
- './work:/opt/adguardhome/work'
- './conf:/opt/adguardhome/conf'Adguard Home은 DNS 암호화 프로토콜로 DNS over HTTPS, DNS over TLS, DNS over QUIC, DNSCrypt를 지원 합니다. DNS 암호화를 사용하고자 한다면 해당 포트를 모두 열어두면 됩니다.
Adguard Home은 자체 DHCP서버도 지원합니다. 대부분 가정에서 사용하는 공유기에서 DHCP서버가 구동되고 있기에 DHCP서버는 사용 포트는 주석 처리 하겠습니다.
systemd-resolved 53번 포트 충돌
resolved데몬이 이미 53번 포트를 사용 중이므로 resolved데몬 설정을 먼저 수정하겠습니다.
DNSStubListener 비활성화 및 DNS서버 주소 변경
/etc/systemd/resolved.conf.d/adguardhome.conf생성 및 편집
sudo mkdir /etc/systemd/resolved.conf.d
sudo nano /etc/systemd/resolved.conf.d/adguardhome.confnano 편집기가 열리면 아래 설정을 붙여넣습니다.
[Resolve]
DNS=127.0.0.1 1.1.1.1
DNSStubListener=no
- 기존 설정 파일 백업 및 새로운 설정 파일 적용
sudo mv /etc/resolv.conf /etc/resolv.conf.backup
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
DNSStubListener중지
systemctl reload-or-restart systemd-resolved
설치 시 문제가 생길 수 있기에 DNS 주소에 1.1.1.1(cloudflare dns)를 추가 해두었습니다. 1.1.1.1은 설치 후 다시 제거 하겠습니다.
초기 설정
docker compose up -d컨테이너를 up 한 뒤 http://[본인 서버 ip]:3000 으로 접속하면 아래 초기 설정 화면이 나옵니다.
관리자 사이트 포트는 docker-compose.yml에서 80:80으로 설정 해 두었으므로 80번 포트를 사용하겠습니다.
공식 DNS 포트는 53번 입니다. docker-compose.yml에서 53번 또한 포트포워딩 해 두었으므로 53번 그대로 사용하겠습니다.
관리자 인터페이스 접속시 사용 할 아이디/비밀번호를 설정합니다.
Docker를 통해 설치 했으므로 위 주소는 docker에서 생성한 network내부의 주소입니다. 추후 설정 시에 사용할 주소는 아래 주소가 아닌 호스트의 주소입니다.

대시보드 열기를 클릭하면 htttp://[호스트ip주소]:[지정 포트]로 자동으로 연결 됩니다.
설정한 아이디/비밀번호를 통해 웹 콘솔에 로그인 합니다.
라우터 설정
사용하고 있는 라우터의 DNS주소를 바꿉니다. 내부 네트워크 구조에 따라 다르지만, 일반적으로 사용하는 공유기가 라우터의 역할을 같이 합니다.
공유기의 관리 페이지에 접속합니다. 일반적으로 192.168.0.1(iptime), 192.168.1.1(tplink), 192.168.45.1(sk) 의 주소를 사용합니다. 사용하는 공유기에 따른 관리자 페이지를 찾고, 해당 주소로 접속합니다.
이번 포스팅 에서는 iptime공유기를 사용하겠습니다.
DNS 주소 수동 입력을 체크한 후 호스트 주소를 입력합니다.
보조 DNS를 비워두지 않으면 해당 DNS서버로 광고의 주소를 찾을 수 있기 때문에 비워둡니다.
연결 확인
라우터의 DNS 주소를 바꾼 후 인터넷에 접속하면 DNS 요청이 들어오며 대쉬보드에 요청들이 나타나기 시작합니다.
systemd-resolved 설정 수정
sudo nano /etc/systemd/resolved.conf.d/adguardhome.confnano 편집기가 열리면
[Resolve]
DNS=127.0.0.1
DNSStubListener=no기존에 DNS에 있던 1.1.1.1을 지우고, ctrl + x -> Enter 로 저장하여 나옵니다.
systemctl reload-or-restart systemd-resolved
데몬을 재시작하여 변경사항을 적용합니다.
추천 설정
업스트림 DNS서버
설정 -> DNS설정 -> 업스트림 DNS서버
#Quad9
https://dns10.quad9.net/dns-query
#Cloudflare
https://dns.cloudflare.com/dns-query
tls://one.one.one.one
#Google
https://dns.google/dns-query
tls://dns.googlehttps로 시작하는 주소는 DoH, tls로 시작하는 주소는 DoT를 사용하는 주소입니다. 혹시 모를 DNS서버 다운과, 빠른 속도를 위해 서버를 더 추가해 두는 게 좋습니다.
사용할 수 있는 DNS 주소는 아래와 같습니다.
내부 DNS서버
설정 -> 필터 -> DNS변경 -> DNS 변환 정보를 추가합니다
내부 DNS서버를 사용하면 홈랩 서비스들을 웹에 노출 시키지 않고도 내부망에서 특정 도메인으로 서비스에 접속할 수 있습니다.
.internal, .lan 도메인을 주로 내부 망에서 사용합니다.
특히 .internal 은 IETF(국제 인터넷 표준화 기구)에서 내부용으로 공식 지정한 TLD입니다.
.local은 과거에 종종 사용되었지만, Apple의 Bonjour나 mDNS에서 사용하는 이름으로 사용하지 않는 것이 좋습니다.
Reference :
Adguard Home 공식 Docker Hub