AdGuard Home: 네트워크 전체 광고 및 추적기 차단 DNS 서버
(github.com/AdguardTeam)- 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를 더 이상 사용하지 않음
댓글과 토론
Hacker News 의견들
-
몇 년 동안 집 네트워크에서 경쟁 프로젝트인 Pi-hole[0]을 돌리다가 NextDNS[1]를 알게 됨
성능 면에서는 요청이 집 밖으로 나가지 않는 장점을 잃었지만, 모든 기기가 집 안팎에서 쓸 수 있는 이식성과 절약되는 시간이 더 컸음
Pi-hole은 90%는 잘 동작했지만 멈추면 고치는 데 시간이 들었고, 연 $20이면 NextDNS와 직접 운영으로 경쟁하기 어려웠음
NextDNS 홍보는 아니고 이런 프로젝트는 꼭 존재해야 한다고 보지만, NextDNS는 정말 단순한 SaaS 도구로 가성비가 매우 좋음
0 - https://pi-hole.net/
1 - https://nextdns.io- Pi-hole이 10%나 중단될 정도로 어떤 문제가 있었는지는 모르겠지만, 그런 과장은 홍보처럼 들림
SD 카드 손상의 99.9%는 전원이 부족한 전원 어댑터 때문이니, 적절한 2.5~3A USB 전원을 찾기 귀찮으면 공식 Raspberry Pi 전원 어댑터를 사면 됨
연 $20이면 매년 예비용 RPi Zero 2W와 SD 카드를 사고도 축하용 Sheetz 샌드위치 값이 남음
Pi-hole + WireGuard + $15짜리 RPi Zero 일회성 구매 조합은 이기기 어렵다 봄 - Pi-hole에서 어떤 문제를 겪었는지 궁금함
내 인스턴스는 몇 년 동안 한 번도 문제 없이 돌아갔고, 1년 전쯤 OPNSense 박스에서 돌리고 싶어서 AdGuard Home으로 옮겼음
기기에는 자동 WireGuard VPN을 설정해서 내 SSID에 연결되어 있지 않을 때 집 네트워크로 VPN 접속하게 해뒀고, 그래서 원격에서도 로컬 DNS가 동작함 - NextDNS를 좋아하지만, iPhone에서 켜져 있으면 캡티브 포털을 처리하지 못하는 꽤 큰 문제가 있음
비행기 와이파이 등에 접속할 때는 꺼야 한다는 걸 기억해야 해서, 비기술자 친구들에게는 추천하기 어렵다 봄 - 내 경우 Pi-hole이 너무 오래 잘 돌아가서 로그인조차 잊어버렸지만, 조만간 집 네트워크를 다시 구성할 때는 선택지를 다시 평가할 생각임
이제 후보가 3개쯤 된 듯함 - NextDNS는 써보지 않았고 Pi-hole을 써봤으며 지금은 AdGuard Home을 돌리는 중임
DNS 암호화와 차단만을 위해 연 $20을 낸다면, DNS 광고 차단뿐 아니라 IP 익명성과 터널링 등을 제공하는 Mullvad로 올리는 것도 고려할 만함
- Pi-hole이 10%나 중단될 정도로 어떤 문제가 있었는지는 모르겠지만, 그런 과장은 홍보처럼 들림
-
최근 Pi-hole을 살펴보다가 AdGuard Home을 선택했음
겉보기에는 UI도 더 좋고 전반적으로 더 나아 보였으며, 이렇게 매끈한 도구치고는 내부 DNS로 로컬 사설 도메인 질의를 넘기는 등 커스터마이징도 의외로 많음
AdGuard가 왜 이걸 무료로 제공하는지는 확실하지 않고 알아봐야 할지도 모르지만, 지금은 비교적 낮은 위험의 선택으로 보였음
성가신 광고가 사라지니 NYTimes 앱 같은 것을 쓰는 경험이 훨씬 쾌적해진 점은 아무리 말해도 부족함- 정말 훌륭함
분할 DNS 기능에는 상상할 만한 옵션이 다 들어 있음
뒤에 두 번째 DNS 서버가 필요할 줄 알았는데, 필요한 규칙을 전부 AdGuard Home 안에 바로 넣을 수 있었음
DoT와 DoH 업스트림도 지원하는데, 많은 가정용 라우터에서는 아직도 흔하지 않음
문서: https://github.com/AdguardTeam/AdGuardHome/wiki/Configuratio... - 무료 제공 부분은 나도 궁금했음
기본 업스트림으로 자기 DNS 서버를 설정해두고 많은 사람이 기본값을 유지하길 바라는 걸 수도 있음
DNS는 데이터 마이닝과 데이터 판매에 가장 좋은 기술 중 하나라서, 8.8.8.8이나 1.1.1.1처럼 외우기 쉬운 DNS 서버들이 존재하는 이유도 그 때문이라 봄
Google과 Cloudflare가 단지 선의로만 하는 건 아닐 것임
단, AdGuard는 고객 데이터를 판매하지 않는다고 주장함 - 사용자 기반을 넓힌 뒤 충분한 이용자를 확보하면 라이선스 모델로 전환할 수도 있음
- 내가 보기엔 이런 흐름임
문서를 읽고 설치해 잘 동작하게 만든 뒤, 친구들에게 집 네트워크에 짜증 나는 광고가 없다고 자랑하게 됨
그러면 친구들이 “나도 설치해줘”라고 할 것임
설치는 해줄 수 있어도 유지보수까지 해줄 수는 없으니, “그 복잡함 대신 가족 전체가 연 $29에 바로 되는 간단한 앱 기반 설정이 있다”고 말하게 됨
그 저녁 자리에서 친구 다섯 명이 서비스를 내려받고 결제하게 되는 셈임
요즘 기술 스타트업의 철학도 비슷하다고 봄. 오픈소스 제품을 갖고 그 위에 상용 비즈니스를 만드는 방식임 - Pi-hole도 조건부 포워딩을 지원함
- 정말 훌륭함
-
AdGuard는 러시아 엔지니어가 있는 러시아 회사이고, 개발자와 직원 다수가 모스크바에서 일하며 키프로스에 등록되어 있음
좋은 조합이 아니고, 보안상 이유로 피하겠음- 이건 오픈소스 소프트웨어임
MacPaw가 러시아 개발 소프트웨어를 위험으로 분류하는 이유는 정부가 언제든 데이터에 접근할 수 있기 때문인데, 이건 자체 호스팅 오픈소스임
FSB가 임의의 법원 명령만으로 로컬 서버에 접근할 수는 없음
그래서 정당한 우려라기보다는 러시아 혐오처럼 느껴지고, 러시아 개발자들이 자기 정부의 어리석음 때문에 얼마나 고통받는지 직접 알고 있어서 더 부적절하다고 봄 - 오픈소스라서 직접 검증할 수 있음
- MacBook도 중국에서 만들어졌음
- 이건 오픈소스 소프트웨어임
-
py-hole에도 관심이 있을 수 있음
Python 스크립트와 dnsmasq 설정만으로 되어 있고, OpenWrt에서 돌아가며 무료이고 CPU 사용량도 거의 0에 가까움
https://github.com/time4tea-net/py-hole -
AdGuard의 또 다른 괜찮은 점은 Home Assistant 애드온으로 제공된다는 것임
HA의 나머지와 통합되기 때문에, 예를 들어 대시보드에서 차단을 켜고 끄는 스위치를 둘 수 있음- NextDNS도 가능하고, 방금 설정했음
-
AdGuard Home은 훌륭함
한동안 Pi-hole을 썼지만 사소한 문제가 꽤 자주 있었음
심각한 건 아니었지만, 이런 도구는 그냥 동작할 때만 진짜 유용함
내 Pi 구성에서는 docker-compose[1]로 문제 없이 돌아가고, adguardhome-sync[2]라는 멋진 컨테이너를 써서 두 번째 Pi를 백업으로 돌리며 설정을 동기화함
이제 네트워크에서 광고가 보이지 않고, 어떤 기기들이 추적/광고 요청을 얼마나 많이 보내는지 보는 것도 꽤 흥미로움
1 - https://thesmarthomejourney.com/2021/05/24/adguard-pihole-dn...
2 - https://thesmarthomejourney.com/2023/02/12/adguardhome-sync-...- 진짜 눈이 뜨이는 순간은 DNS 53 요청을 내 DNS 서버로 리다이렉트하고 DoT/DoQ/DoH를 차단하기 시작할 때임
수많은 기기와 앱이 추적과 광고 타기팅을 위해 하드코딩된 DNS 서버로 직접 나가려 함
- 진짜 눈이 뜨이는 순간은 DNS 53 요청을 내 DNS 서버로 리다이렉트하고 DoT/DoQ/DoH를 차단하기 시작할 때임
-
여기서 Technitium DNS를 쓰는 사람이 있는지 모르겠음
오픈소스이고 무료이며, 최소한의 하드웨어에서도 동작함
나는 Orange Pi 3 LTS에서 돌리고 있음
https://technitium.com/dns/- 좋아 보임
“Technitium DNS Server is an open source authoritative as well as recursive DNS server”라고 되어 있는데, Pi-hole이나 AdGuard도 재귀 DNS 서버인지 아니면 단순 차단기인지 궁금함
오래 Pi-hole을 써왔고, 이게 어떤 장점이 있는지 파악하려는 중임 - 광고 차단 목록을 넣을 수 있어서 견고한 DNS와 광고 차단을 얻고, 랜덤한 DNS 문제로 YouTube가 빙빙 도는 일도 없어짐
약간의 설정만 하면 무료로 가능함 - Pi 4에서 돌리고 있고 설정과 사용이 간단해서 만족함
AdGuard는 몰랐지만 좋아 보여도 굳이 시도하고 싶지는 않음 - 몇 년째 쓰고 있고 마음에 듦
.NET 기반이라 크로스 플랫폼이기도 함
그 방식을 원하면 Docker 이미지도 있음 - C#/.NET으로 작성됐고 비교적 새롭다는 이유로 선택하지 않았고, Unbound로 갔음
- 좋아 보임
-
NextDNS에 대한 대체로 긍정적인 내용이 몇 개 있지만, 나는 NextDNS에서 옮길까 생각 중이라 따로 남김
이유는 지금 Mac/Safari를 쓰고 있고, “추적기로부터 IP 주소 가리기” 기능을 켜고 싶은데 이걸 켜면 NextDNS가 원래 차단하던 웹사이트 광고가 보이기 시작하기 때문임
그래서 이 옵션을 꺼야 하고 Apple 기능을 쓸 수 없음
전반적으로 둘은 함께 쓸 수 없는 듯하며, NextDNS 도움말 사이트에도 관련 이슈가 올라와 있음
https://help.nextdns.io/t/q6yq4xy/nextdns-stops-working-prop...
혹시 이게 AdGuard나 Pi-hole에서도 알려진 문제인지 아는 사람이 있는지 궁금함- iCloud Private Relay를 말하는 거라면, DNS 기반 광고 차단기에서는 예상되는 동작임
릴레이를 켜면 연결이 프록시되고 로컬 네트워크의 DNS 서버를 쓰지 않음
Pi-hole이든 NextDNS든 AdGuard든 마찬가지임 - 광고와 추적기를 차단하는 제품을 쓰면서, 다른 제품으로 그걸 우회해 광고와 추적기에 접근하되 제3자를 거치게 만드는 셈임
후자의 목적이 무엇인지 모르겠음
- iCloud Private Relay를 말하는 거라면, DNS 기반 광고 차단기에서는 예상되는 동작임
-
HN에는 Pi-hole이나 AdGuard Home 글이 올라오지 않고 버틸 수 있는 정해진 시간이 있는 것 같음
- 달력에 반년마다 반복되는 할 일을 넣어둠: HN: Pi-hole / AdGuard? ;-)
-
좋음
비슷하게, 네트워크에서 pfSense를 돌린다면 pfBlockerNG도 확인해볼 만함. 개인적으로 꽤 좋아함: https://docs.netgate.com/pfsense/en/latest/packages/pfblocke...