- AdGuard Home은 설치 후 홈 네트워크의 모든 기기에 적용되는 무료 오픈소스 DNS 서버로, 클라이언트 측 소프트웨어 없이 광고와 추적을 차단함
- 동작 방식은 추적 도메인을 DNS sinkholing으로 “black hole”에 재라우팅해 기기가 해당 서버에 연결하지 못하게 하는 구조이며, 공개 AdGuard DNS 서버와 많은 코드를 공유함
- 자체 서버로 운영하면 공개 DNS보다 차단·허용 대상을 직접 고르고, 네트워크 활동을 모니터링하며, 사용자 정의 필터링 규칙을 추가할 수 있음
- Pi-Hole과 유사하게 광고·추적기 차단과 차단 목록 커스터마이징을 지원하지만, AdGuard Home은 암호화 DNS 업스트림, DoH/DoT 서버 실행, 피싱·멀웨어 도메인 차단, 자녀 보호, Safe Search 강제 등을 기본 기능으로 제공함
- DNS 수준 차단은 YouTube·Twitch 광고나 Facebook·Twitter·Instagram 스폰서 게시물처럼 콘텐츠와 같은 도메인을 쓰는 광고를 차단할 수 없으며, 향후 콘텐츠 차단 프록시 지원도 모든 사례를 해결하지는 못함
AdGuard Home의 역할과 동작 방식
- AdGuard Home은 사용자와 기기를 위한 프라이버시 보호 센터를 표방하는 네트워크 전체 광고·추적기 차단 DNS 서버임
- 설치 후 홈 네트워크의 모든 기기를 커버하며, 각 기기에 별도 클라이언트 소프트웨어를 설치할 필요가 없음
- DNS 서버로 동작하면서 추적 도메인을 “black hole”로 재라우팅해 기기가 해당 서버에 연결하지 못하게 함
- 공개 AdGuard DNS 서버에 쓰이는 소프트웨어를 기반으로 하며, 두 제품은 많은 코드를 공유함
설치와 연동
- Linux, Unix, macOS, FreeBSD, OpenBSD에서는
curl,wget,fetch로 자동 설치 스크립트를 실행할 수 있음-c <channel>: 지정 채널 사용-r: AdGuard Home 재설치-u: AdGuard Home 제거-v: 자세한 출력-r과-u는 동시에 사용할 수 없음
- 수동 설치와 기기 설정은 Getting Started 문서에서 확인할 수 있음
- 공식 Docker 이미지는 Docker Hub에서 제공됨
- Linux 사용자는 Snap Store를 통해 설치할 수 있음
- 연동이 필요한 경우 REST API를 사용할 수 있고, python client도 제공됨
- 이 Python 클라이언트는 AdGuard Home Hass.io Add-on을 만드는 데 사용됨
공개 AdGuard DNS와의 차이
- 자체 AdGuard Home 서버를 운영하면 공개 DNS 서버 사용보다 더 많은 제어가 가능함
- 사용자가 직접 서버가 무엇을 차단하고 허용할지 선택할 수 있음
- 네트워크 활동을 모니터링할 수 있음
- 사용자 정의 필터링 규칙을 추가할 수 있음
- 서버가 사용자 자신의 것이므로 제어권이 사용자에게 있음
Pi-Hole 및 전통적 광고 차단기와의 비교
- AdGuard Home과 Pi-Hole은 모두 DNS sinkholing 방식으로 광고와 추적기를 차단하고, 차단 대상을 커스터마이징할 수 있음
- AdGuard Home은 추가 소프트웨어 설치나 수동 설정 없이 많은 기능을 기본 제공하는 방향을 목표로 함
- README의 비교 표 기준으로 AdGuard Home은 다음 기능을 제공함
- 광고·추적기 차단
- 차단 목록 커스터마이징
- 내장 DHCP 서버
- 관리자 인터페이스용 HTTPS
- DNS-over-HTTPS, DNS-over-TLS, DNSCrypt 암호화 DNS 업스트림
- 크로스플랫폼 실행
- DNS-over-HTTPS 또는 DNS-over-TLS 서버로 실행
- 피싱·멀웨어 도메인 차단
- 성인 도메인 차단 자녀 보호
- 검색 엔진 Safe Search 강제
- 기기별 설정
- AGH DNS 사용자를 고르는 접근 설정
- root 권한 없이 실행
- 전통적 광고 차단기와 비교하면 DNS sinkholing은 광고의 큰 비율을 차단할 수 있지만, 전통적 광고 차단기의 유연성과 강력함은 부족함
- DNS 기반 차단기는 전통적 광고 차단기를 설치할 수 없는 SmartTV, 스마트 스피커, IoT 기기에서 광고·추적·분석 요청 차단에 도움이 될 수 있음
알려진 한계와 향후 방향
- DNS 수준 차단기는 다음 예시를 차단할 수 없음
- YouTube, Twitch 광고
- Facebook, Twitter, Instagram 스폰서 게시물
- 콘텐츠와 같은 도메인을 공유하는 광고는 DNS 수준 차단기로 차단할 수 없음
- DNS만으로는 이 문제를 처리할 수 없으며, 독립형 AdGuard 애플리케이션처럼 콘텐츠 차단 프록시가 필요함
- AdGuard Home은 향후 콘텐츠 차단 프록시 기능 지원을 가져올 예정임
- 이 경우에도 충분하지 않거나 복잡한 설정이 필요한 사례가 남을 수 있음
소스 빌드와 개발
- 개발 환경 준비에는
make init을 실행함 - 빌드에는 다음이 필요함
- 기본 빌드는 저장소를 클론한 뒤
make를 실행함 - 비표준
-j플래그는 현재 지원되지 않아make -j 4나MAKEFLAGS에-j 4가 포함된 설정은 빌드를 깨뜨릴 가능성이 있음- 필요하면
make -j 1로 덮어쓸 수 있음
- 필요하면
- Go가 지원하는 OS/ARCH 대상으로 교차 빌드할 수 있으며,
GOOS와GOARCH를make실행 시 지정함 - 릴리스 빌드 준비에는
snapcraft가 필요하며,make build-release CHANNEL='...' VERSION='...'를 사용함 - 로컬 Docker 이미지는
make build-docker로 빌드하며, 공식 이미지는 Docker Buildx를 사용함 - 프론트엔드 디버깅 시
client디렉터리에서 개발 빌드를 watch로 실행하고,AdGuardHome바이너리에--local-frontend플래그를 지정해 내장 프론트엔드 파일 대신./build/디렉터리 파일을 사용함 - E2E 프론트엔드 테스트는 Playwright를 사용하며, 테스트는
tests/e2e에 있음npm run test:e2e: 전체 테스트를 headless로 실행npm run test:e2e:interactive: 인터랙티브 테스트npm run test:e2e:debug: 디버그 모드npm run test:e2e:codegen: 새 테스트 코드 생성- Playwright는 시스템에 설치된 브라우저와 다를 수 있는 자체 브라우저 바이너리를 다운로드해 설치함
기여, 불안정 채널, 외부 프로젝트
- 기여자는 저장소를 포크해 변경한 뒤 pull request를 보낼 수 있으며, code guidelines를 따라야 함
- UI와 백엔드를 동시에 기여할 필요는 없으며, 이상적으로는 설정·API·기능을 포함한 백엔드 구현이 먼저 들어가고 UI는 다른 pull request에서 나중에 구현될 수 있음
- 불안정 버전 채널은 두 가지임
beta: 비교적 안정적인 베타 버전이며 보통 2주마다 또는 더 자주 릴리스됨edge: 개발 브랜치의 최신 버전이며 매일 새 업데이트가 푸시됨
- 불안정 버전은 Snap Store의
beta·edge채널, Docker Hub의beta·edge태그, 자동 설치 스크립트 또는 Wiki의 독립 실행 빌드로 설치할 수 있음 - AdGuard와 제휴하지 않은 서드파티 개발자와 팬이 만든 관련 프로젝트가 있음
- AdGuard Home Remote: iOS 앱
- Python library
- Home Assistant add-on
- OpenWrt LUCI app
- AdGuardHome sync
- AdGuardian-Term: 터미널 기반 실시간 트래픽 모니터링과 통계
- Chocolatey package
프라이버시와 사용 기술
- AdGuard Home의 중심 아이디어는 사용자가 자신의 데이터를 제어해야 한다는 것임
- AdGuard Home은 사용 통계를 수집하지 않으며, 사용자가 설정하지 않는 한 웹 서비스를 사용하지 않음
- 전체 privacy policy는 이론적으로 AdGuard Home이 보낼 수 있는 모든 항목을 포함함
- 주요 기반 기술은 Go와 Node.js 생태계임
- Go 라이브러리로
gcache,miekg's dns,go-yaml,service,dnsproxy,urlfilter를 사용함 - Node.js 쪽에서는 React.js, Tabler 및 여러 Node.js 패키지를 사용함
whotracks.me데이터도 사용함
- Go 라이브러리로
- AdGuard Home은 이전에 언급됐던 CoreDNS를 더 이상 사용하지 않음