VPS에 AdGuard Home을 설정하는 방법
Ubuntu에 AdGuard Home을 설치하고, 첫 실행 마법사를 마치고, 웹 UI를 잠그고, DNS-over-HTTPS와 DNS-over-TLS를 켜고, 기기를 자신의 리졸버로 향하게 하며, 인터넷 전체가 남용할 수 있는 개방 DNS 서버를 피합니다.

AdGuard Home은 웹 인터페이스가 있는 자체 호스팅 DNS 싱크홀이자 재귀에 가까운 리졸버입니다. DNS로 쓰는 모든 기기(휴대폰, 노트북, 스마트 TV, 다른 VPS 프로젝트)에서 광고, 트래커, 악성코드 도메인을 차단할 수 있습니다. 브라우저 확장과 달리 hosts 파일을 무시하는 앱에도 동작합니다. 이동 중에도 같은 필터링을 원하거나 홈 네트워크에 Raspberry Pi를 두고 싶지 않을 때 VPS에서 돌리는 것이 유용합니다.
절대 내보내지 말아야 할 위험한 기본값은 개방 리졸버입니다. UDP/TCP 53이 접근 제어 없이 인터넷 전체에서 닿으면 낯선 사람이 DNS 증폭에 VPS를 쓰고 남용 신고가 옵니다. 이 가이드는 Ubuntu에 AdGuard Home을 설치하고, 암호화 DNS를 의도적으로 노출하지 않는 한 DNS를 localhost 또는 사설 WireGuard 인터페이스에 바인딩하고, 대시보드를 HTTPS에 두고, 고전 포트 53을 세상에 열지 않고 노트북과 폰이 DNS-over-HTTPS(DoH) 또는 DNS-over-TLS(DoT)를 쓰는 방법을 보여 줍니다.
AdGuard Home이 잘 맞는 일
보통 비교 대상은 Pi-hole입니다. AdGuard Home은 내장 웹 UI, 선택적 암호화 DNS 프론트엔드, 클라이언트별 설정이 있는 단일 바이너리입니다. Docker로도, systemd 서비스로도 돌릴 수 있습니다. Hiddence VPS에서는 사설 VPN과 잘 맞습니다. 기기가 WireGuard에 들어가 터널로 VPS에 DNS를 보내고 포트 53을 공개하지 않습니다.
- 모든 기기에 앱을 설치하지 않고 네트워크 전체 차단
- DoH(443)와 DoT(853)로 공용 Wi-Fi에서 DNS가 평문이 되지 않음
- 쿼리 로그와 통계로 어떤 기기가 어떤 도메인과 이야기하는지 확인
- 사용자 지정 업스트림(Quad9, Cloudflare, 또는 자신의 Unbound)
- 발자국이 작음 — 1 GB VPS로 가정과 몇 대의 추가 클라이언트를 필터할 수 있음
요구 사항
DoH/DoT와 대시보드용 신뢰할 수 있는 인증서가 필요하면 도메인이 필요합니다. HTTP와 서버 IP로 먼저 시험할 수 있지만 그대로 두지 마세요. Ubuntu에서 systemd-resolved가 이미 포트 53을 가지고 있으면 AdGuard Home이 DNS를 바인딩하기 전에 비웁니다.
- root/sudo가 있는 Ubuntu 22.04 또는 24.04 VPS
- 개인 용도라면 1 GB RAM이면 충분
- VPS를 가리키는 A 레코드가 있는 도메인 또는 서브도메인(dns.example.com)
- SSH 접근. 터널 안에서만 DNS를 원하면 선택적으로 WireGuard
1단계: 포트 53을 비우고 AdGuard Home 설치
Ubuntu Server는 종종 systemd-resolved를 127.0.0.53:53의 스텁으로 돌립니다. AdGuard Home은 선택한 인터페이스의 53을 원합니다. 설치 프로그램이 할 수 있지만, 명시적으로 하면 VPS 자체의 DNS가 반쯤 깨지는 일을 피합니다(서버는 여전히 패키지를 해석해야 합니다).
ssh root@YOUR_VPS_IP
apt update && apt -y upgrade
apt -y install curl ca-certificates
# See who owns port 53:
ss -tulpn | grep ':53'
# Typical Ubuntu fix: stop stub listener, point the OS at a temporary resolver
mkdir -p /etc/systemd/resolved.conf.d
cat >/etc/systemd/resolved.conf.d/adguardhome.conf <<'EOF'
[Resolve]
DNS=1.1.1.1
DNSStubListener=no
EOF
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl restart systemd-resolved
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v2단계: 첫 실행 마법사
설치 프로그램은 URL을 출력합니다. 보통 http://YOUR_IP:3000/ 입니다. 열고 긴 비밀번호의 관리자 사용자를 만들고 수신 주소를 고르세요. 공용 VPS에서 안전한 첫 설정은 Admin Web을 127.0.0.1:3000(앞에 Caddy를 둠) 또는 TLS 이후 80/443, DNS 수신을 127.0.0.1:53과 VPN 인터페이스로 하고 0.0.0.0:53에는 두지 않는 것입니다. 친구에게 LAN 스타일 DNS가 정말 필요하면 열린 53/udp가 아니라 인증이 있는 443/853의 DoH/DoT를 우선하세요.
신뢰하는 업스트림 DNS 서버를 고르세요. 많은 사람이 https://dns.quad9.net/dns-query 또는 Cloudflare를 씁니다. 더 빠른 장애 조치를 원하면 병렬 요청을 켜세요. 기본 필터 목록을 켠 다음 나중에 더 추가하세요. 첫날에 목록 쉰 개를 켜면 사이트가 깨졌을 때 디버깅이 불가능해집니다.
3단계: 대시보드용 리버스 프록시와 HTTPS
마법사가 끝나면 AdGuard Home은 보통 UI를 포트 80으로 옮깁니다. 사이트도 호스팅하면 Caddy나 Nginx와 충돌합니다. 깨끗한 패턴은 AdGuard Home 웹을 127.0.0.1:8080, DNS를 127.0.0.1:53, Caddy를 443에서 대시보드와 DoH 모두에 두는 것입니다.
# In AdGuard Home settings, bind the web UI to 127.0.0.1:8080
# Example Caddyfile:
dns.example.com {
reverse_proxy 127.0.0.1:8080
}
# After Caddy is up:
curl -I https://dns.example.com4단계: DNS-over-HTTPS와 DNS-over-TLS 켜기
Encryption 설정에서 암호화를 켜고 서버 이름을 dns.example.com으로 두고, AdGuard Home이 인증서 파일을 가리키게 하세요. Caddy가 저장한 것이든, 443에서 수신할 때 AdGuard Home이 직접 얻는 것이든 됩니다. DoH는 보통 https://dns.example.com/dns-query 입니다. DoT는 dns.example.com:853 입니다. Caddy가 이미 443을 가지고 있으면 Caddy가 TLS를 종료하고 DoH 경로를 AdGuard Home의 평문 HTTP DoH 포트로 리버스 프록시하거나, AdGuard Home이 443을 듣고 대시보드를 다른 서브도메인에 두세요.
모든 기기를 바꾸기 전에 클라이언트로 확인하세요. 최신 curl이 있는 노트북에서:
curl -H 'accept: application/dns-json' 'https://dns.example.com/dns-query?name=example.com&type=A'
# DoT test (kdig from knot-dnsutils, if installed):
# kdig @dns.example.com +tls-ca +tls-host=dns.example.com example.com5단계: 실제 기기를 리졸버로 향하게 하기
Windows 11과 최근 Android는 DoH 템플릿을 쓸 수 있습니다. iOS는 구성 프로필이나 DoH를 지원하는 클라이언트입니다. Firefox와 Chromium도 사용자 지정 DoH URL을 허용합니다. 홈 라우터는 라우터가 DoT/DoH를 지원할 때만 WAN DNS를 설정하세요. 그렇지 않으면 WireGuard를 돌리고 DNS를 VPS VPN IP로 두어 고전 DNS가 인터넷을 건너지 않게 하세요.
- Android 9+: 비공개 DNS(DoT) → dns.example.com
- Firefox: 설정 → 네트워크 → DNS over HTTPS → 사용자 지정 URL https://dns.example.com/dns-query
- Apple 기기: 서명된 mobileconfig 또는 DoH/DoT를 지원하는 앱
- 다른 VPS: resolv.conf 또는 systemd-resolved를 이 AdGuard 인스턴스의 WireGuard IP로
- 암호화 없이 무작위 공용 네트워크의 DNS로 이 VPS IP를 설정하지 않음
6단계: 방화벽 — 열린 재귀 DNS 닫기
이 절이 불쾌한 놀라움을 막습니다. SSH, HTTPS, 선택적으로 DoT용 853/tcp를 허용하세요. 매우 구체적이고 속도 제한과 인증이 있는 설계가 아니면 0.0.0.0/0에서 53/udp를 허용하지 마세요. 그때도 아마 하지 말아야 합니다.
ufw allow OpenSSH
ufw allow 443/tcp comment 'dashboard + DoH'
ufw allow 853/tcp comment 'DoT'
# If DNS is only on WireGuard (example iface wg0, 10.8.0.1):
# ufw allow in on wg0 to any port 53 proto udp
ufw enable
ufw status verbose
# Confirm 53 is not public:
ss -tulpn | grep ':53'필터, 허용 목록, 클라이언트
AdGuard 기본 DNS 필터와 악성코드 목록 하나로 시작하세요. 사이트가 이상하면 쿼리 로그를 본 뒤 차단을 전부 끄지 말고 구체적인 허용 규칙을 추가하세요. 클라이언트 이름(IP 또는 DoH URL의 ClientID)을 쓰면 스마트 TV에는 더 엄격하고 업무 노트북에는 더 느슨한 목록을 적용할 수 있습니다. 안전 검색은 정말 원할 때만 켜세요. 요청하지 않은 Google 결과 재작성에 사람들이 놀랍니다.
- 쿼리 로그: 차단된 도메인을 찾고 오탐이면 화이트리스트
- 클라이언트 설정: 기기마다 다른 차단 목록
- 허용하지 않는 클라이언트: 소유하지 않은 범위 차단
- 속도 제한: 소수가 아닌 사용자에게 노출하면 켜기
문제 해결
VPS 자체가 apt update를 못하면 포트 53을 비우면서 로컬 DNS를 깨뜨린 것입니다. 위와 같이 resolved.conf에 정적 리졸버를 넣으세요. 기기에 '인터넷이 있는데' 광고가 여전히 뜨면 DNS를 우회하는 것입니다(하드코딩된 리졸버, 브라우저 DoH, 자체 DNS를 쓰는 앱). 대시보드가 비어 있으면 잘못된 인스턴스를 보고 있거나 마법사가 UI를 옮긴 뒤에도 포트 3000을 치고 있습니다.
- apt 실패: /etc/resolv.conf와 systemd-resolved 확인
- 포트 53 사용 중: ss -tulpn, 스텁 리스너 비활성화
- DoH 인증서 오류: 호스트 이름이 인증서 SAN과 일치해야 함
- 광고가 여전히 보임: 브라우저 DoH가 다른 제공자로 OS를 덮어씀
- RAM이 높음: 쿼리 로그 + 너무 많은 필터 목록 — 목록을 줄이고 로그 보존을 짧게
보안 체크리스트
웹 UI는 관리 패널입니다. 고유 비밀번호, HTTPS만, URL을 공개하지 마세요. AdGuard Home을 업데이트하세요. 설치 스크립트와 UI 모두 업데이트 경로를 제공합니다. 자신의 기기만 DoH를 써야 하면 443을 제한하세요. 유명한 개방 리졸버보다 DoH 경로의 HTTP basic auth나 WireGuard 전용 접근이 훨씬 안전합니다.
- 공개 53/udp 없음
- 대시보드에 HTTPS
- 강력한 관리자 비밀번호를 비밀번호 관리자에 저장
- 가족 기기는 WireGuard + 내부 DNS를 우선
- AdGuardHome.yaml을 서버 밖으로 백업
팁
- 업그레이드 전에 매번 /opt/AdGuardHome/AdGuardHome.yaml 백업
- 전용 서브도메인을 쓰고 관련 없는 CMS와 공유하지 않음
- 이미 Caddy를 돌리면 443은 Caddy가 갖고 AdGuard Home은 localhost에
- 기기용 DoH URL을 적어 두세요. 잊습니다
- SSH 강화와 방화벽 가이드와 짝을 맞춰 VPS가 'DNS만 안전'하지 않게
VPS의 AdGuard Home은 직설적입니다. 로컬에서 포트 53을 비우고, 설치 프로그램을 실행하고, 강한 관리자 비밀번호로 마법사를 마치고, UI를 HTTPS에 두고, DoH/DoT를 켜고, 고전 DNS를 공용 인터넷에서 빼세요. 기기를 암호화 엔드포인트나 VPN IP로 향하게 하고, 작은 필터 세트로 시작하고, 깨지면 쿼리 로그를 쓰세요. 그것이 실제로 제어하는 사설 리졸버입니다. 남용 데이터베이스에 VPS를 올리는 공개 개방 DNS가 아닙니다.