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 で後から実装できる
- 不安定版チャネルは2種類ある
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 をもはや使用していない
1件のコメント
Hacker Newsのコメント
数年間、自宅ネットワークで競合プロジェクトの Pi-hole[0] を動かしていたが、NextDNS[1] を知った
パフォーマンス面では、リクエストが家の外に出ないという利点は失ったものの、すべてのデバイスが家の内外で使える 携帯性 と、節約できる時間のほうが大きかった
Pi-hole は 90% はうまく動いていたが、止まると直すのに時間がかかり、年 $20 では NextDNS と自前運用で競うのは難しかった
NextDNS の宣伝ではないし、こういうプロジェクトはぜひ存在すべきだと思うが、NextDNS は本当にシンプルな SaaS ツールで、コストパフォーマンスが非常に高い
0 - https://pi-hole.net/
1 - https://nextdns.io
SD カード破損の 99.9% は電力不足の電源アダプターが原因なので、適切な 2.5〜3A の USB 電源を探すのが面倒なら、公式の Raspberry Pi 電源アダプター を買えばいい
年 $20 あれば、毎年予備の RPi Zero 2W と SD カードを買っても、お祝い用の Sheetz サンドイッチ代が残る
Pi-hole + WireGuard + $15 の RPi Zero の一回限り購入という組み合わせは、なかなか勝てないと思う
自分のインスタンスは何年も一度も問題なく動いていて、1年ほど前に OPNSense ボックスで動かしたくて AdGuard Home に移行した
デバイスには自動 WireGuard VPN を設定して、自分の SSID に接続していないときは自宅ネットワークに VPN 接続するようにしてあり、そのためリモートでもローカル DNS が機能する
機内 Wi‑Fi などに接続するときはオフにしなければならないのを覚えておく必要があり、非技術系の友人には勧めにくいと思う
候補は今や 3 つくらいになったようだ
DNS の暗号化とブロックだけのために年 $20 払うくらいなら、DNS 広告ブロックだけでなく IP 匿名性 やトンネリングなども提供する Mullvad にアップグレードするのも検討に値する
最近 Pi-hole を調べていて、AdGuard Home を選んだ
見た目では UI もより良く、全体的にも優れているように見え、こういう洗練されたツールにしては、内部 DNS にローカルのプライベートドメイン問い合わせを渡すなど、意外とカスタマイズ性も高い
AdGuard がなぜこれを無料で提供しているのかははっきりしないし、調べたほうがいいかもしれないが、今のところは比較的リスクの低い選択に見えた
うっとうしい広告が消えることで、NYTimes アプリのようなものを使う体験がはるかに快適になった点は、いくら強調してもし足りない
スプリット DNS 機能には想像できる選択肢がすべて入っている
背後に 2 台目の DNS サーバーが必要になると思っていたが、必要なルールはすべて AdGuard Home の中にそのまま入れられた
DoT と DoH のアップストリームもサポートしていて、多くの家庭用ルーターでは今でもあまり一般的ではない
ドキュメント: https://github.com/AdguardTeam/AdGuardHome/wiki/Configuratio...
デフォルトのアップストリームとして自社の DNS サーバーを設定しておき、多くの人がその初期設定を維持することを期待しているのかもしれない
DNS は データマイニング とデータ販売に最適な技術の 1 つなので、8.8.8.8 や 1.1.1.1 のような覚えやすい DNS サーバーが存在する理由もそこにあると思う
Google や Cloudflare が純粋な善意だけでやっているわけではないはずだ
ただし、AdGuard は顧客データを販売しないと主張している
ドキュメントを読んでインストールし、ちゃんと動くようにしたあと、友人たちに自宅ネットワークにうっとうしい広告がないと自慢することになる
すると友人たちは「自分にも入れて」と言うはずだ
インストールはしてあげられても保守まではできないので、「その複雑さの代わりに、家族全員で年 $29 ですぐ使えるシンプルなアプリベースの設定があるよ」と言うことになる
その晩のうちに友人 5 人がそのサービスをダウンロードして支払いを済ませる、というわけだ
最近の技術系スタートアップの哲学も似たようなものだと思う。オープンソース製品 を持ち、その上に商用ビジネスを築くやり方だ
AdGuard はロシア人エンジニアがいるロシア企業で、開発者や社員の多くがモスクワで働いており、キプロスに登記されている
良い組み合わせではないし、セキュリティ上の理由で避けたい
MacPaw がロシアの開発ソフトウェアをリスクと分類する理由は、政府がいつでもデータにアクセスできるからだが、これはセルフホストのオープンソースだ
FSB が適当な裁判所命令だけでローカルサーバーにアクセスできるわけではない
だから、もっともな懸念というよりロシア嫌悪のように感じられるし、ロシアの開発者たちが自国政府の愚かさのせいでどれほど苦しんでいるかを直接知っているので、なおさら不適切だと思う
py-hole にも関心があるかもしれない
Python スクリプトと dnsmasq の設定だけで構成されていて、OpenWrt で動作し、無料で、CPU 使用量もほぼ 0 に近い
https://github.com/time4tea-net/py-hole
AdGuard のもう 1 つの良い点は、Home Assistant アドオン として提供されていることだ
HA のほかの部分と統合されるので、たとえばダッシュボード上にブロックをオン・オフするスイッチを置ける
AdGuard Homeは素晴らしい
しばらくPi-holeを使っていたが、細かい問題がかなり頻繁にあった
深刻ではなかったが、こういうツールは単に動いているときにこそ本当に有用だ
自分のPi構成ではdocker-compose[1]で問題なく動いており、adguardhome-sync[2]という素晴らしいコンテナを使って2台目のPiをバックアップとして動かし、設定を同期している
今ではネットワーク上で広告が表示されず、どのデバイスがトラッキング/広告リクエストをどれだけ送っているのかを見るのもかなり興味深い
1 - https://thesmarthomejourney.com/2021/05/24/adguard-pihole-dn...
2 - https://thesmarthomejourney.com/2023/02/12/adguardhome-sync-...
数多くのデバイスやアプリが、トラッキングと広告ターゲティングのためにハードコードされたDNSサーバーへ直接出て行こうとする
ここで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を使ってきたので、これにどんな利点があるのか把握しようとしている
少し設定するだけで無料で使える
AdGuardは知らなかったが、良さそうでもわざわざ試したいとは思わない
.NETベースなのでクロスプラットフォームでもある
そのやり方を望むならDockerイメージもある
NextDNSについては概ね肯定的な内容がいくつかあるが、自分はNextDNSから移ろうかと考えているので別に書いておく
理由は、今Mac/Safariを使っていて、「トラッカーからIPアドレスを隠す」機能を有効にしたいのだが、これを有効にするとNextDNSが本来ブロックしていたWebサイト広告が表示され始めるからだ
そのためこのオプションをオフにしなければならず、Appleの機能が使えない
全体としては両者は一緒に使えないようで、NextDNSのヘルプサイトにも関連する問題が上がっている
https://help.nextdns.io/t/q6yq4xy/nextdns-stops-working-prop...
これがAdGuardやPi-holeでも既知の問題なのか知っている人がいれば気になる
リレーを有効にすると接続はプロキシされ、ローカルネットワークのDNSサーバーを使わなくなる
Pi-holeでもNextDNSでもAdGuardでも同じだ
後者の目的が何なのか分からない
HNにはPi-holeやAdGuard Homeの記事が投稿されずにいられる決まった時間があるようだ
いいね
同様に、ネットワークでpfSenseを動かしているなら、pfBlockerNGも確認してみる価値がある。個人的にはかなり気に入っている: https://docs.netgate.com/pfsense/en/latest/packages/pfblocke...