1 ポイント 投稿者 GN⁺ 2024-02-09 | 1件のコメント | WhatsAppで共有
  • 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 では curlwgetfetch で自動インストールスクリプトを実行できる
    • -c <channel>: 指定チャネルを使用
    • -r: AdGuard Home を再インストール
    • -u: AdGuard Home を削除
    • -v: 詳細出力
    • -r-u は同時に使用できない
  • 手動インストールとデバイス設定は Getting Started ドキュメントで確認できる
  • 公式 Docker イメージは Docker Hub で提供されている
  • Linux ユーザーは Snap Store からインストールできる
  • 連携が必要な場合は REST API を利用でき、python client も提供されている

公開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 4MAKEFLAGS-j 4 を含む設定はビルドを壊す可能性がある
    • 必要なら make -j 1 で上書きできる
  • Go がサポートする OS/ARCH を対象にクロスビルドでき、GOOSGOARCHmake 実行時に指定する
  • リリースビルドの準備には 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 の betaedge チャネル、Docker Hub の betaedge タグ、自動インストールスクリプト、または Wiki のスタンドアロンビルドからインストールできる
  • AdGuard と提携していないサードパーティ開発者やファンが作成した関連プロジェクトがある

プライバシーと使用技術

  • AdGuard Home の中心的な考え方は、ユーザーが自分のデータを制御すべきだということ
  • AdGuard Home は利用統計を収集せず、ユーザーが設定しない限りウェブサービスを使用しない
  • 完全な privacy policy には、理論上 AdGuard Home が送信し得るすべての項目が含まれている
  • 主な基盤技術は Go と Node.js エコシステム
    • Go ライブラリとして gcachemiekg's dnsgo-yamlservicednsproxyurlfilter を使用する
    • Node.js 側では React.js、Tabler、および複数の Node.js パッケージを使用する
    • whotracks.me データも使用する
  • AdGuard Home は、以前言及されていた CoreDNS をもはや使用していない

1件のコメント

 
GN⁺ 2024-02-09
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 で有効にしていると キャプティブポータル を処理できないという、かなり大きな問題がある
      機内 Wi‑Fi などに接続するときはオフにしなければならないのを覚えておく必要があり、非技術系の友人には勧めにくいと思う
    • 自分の場合、Pi-hole は長い間あまりにもうまく動いていたので、ログイン情報すら忘れてしまったが、近いうちに自宅ネットワークを再構成するときには選択肢を改めて評価するつもりだ
      候補は今や 3 つくらいになったようだ
    • NextDNS は使ったことがなく、Pi-hole は使ったことがあり、今は AdGuard Home を動かしている
      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 人がそのサービスをダウンロードして支払いを済ませる、というわけだ
      最近の技術系スタートアップの哲学も似たようなものだと思う。オープンソース製品 を持ち、その上に商用ビジネスを築くやり方だ
    • Pi-hole も 条件付きフォワーディング をサポートしている
  • AdGuard はロシア人エンジニアがいるロシア企業で、開発者や社員の多くがモスクワで働いており、キプロスに登記されている
    良い組み合わせではないし、セキュリティ上の理由で避けたい

    • これは オープンソースソフトウェア
      MacPaw がロシアの開発ソフトウェアをリスクと分類する理由は、政府がいつでもデータにアクセスできるからだが、これはセルフホストのオープンソースだ
      FSB が適当な裁判所命令だけでローカルサーバーにアクセスできるわけではない
      だから、もっともな懸念というよりロシア嫌悪のように感じられるし、ロシアの開発者たちが自国政府の愚かさのせいでどれほど苦しんでいるかを直接知っているので、なおさら不適切だと思う
    • オープンソースなので自分で検証できる
    • MacBook も中国で作られている
  • py-hole にも関心があるかもしれない
    Python スクリプトと dnsmasq の設定だけで構成されていて、OpenWrt で動作し、無料で、CPU 使用量もほぼ 0 に近い
    https://github.com/time4tea-net/py-hole

  • AdGuard のもう 1 つの良い点は、Home Assistant アドオン として提供されていることだ
    HA のほかの部分と統合されるので、たとえばダッシュボード上にブロックをオン・オフするスイッチを置ける

    • NextDNS でもできるし、今ちょうど設定したところだ
  • 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 53リクエストを自分のDNSサーバーへリダイレクトし、DoT/DoQ/DoHをブロックし始めたときだ
      数多くのデバイスやアプリが、トラッキングと広告ターゲティングのためにハードコードされた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を使ってきたので、これにどんな利点があるのか把握しようとしている
    • 広告ブロックリストを入れられるので、堅牢なDNSと広告ブロックの両方が得られ、ランダムなDNS問題でYouTubeがぐるぐる回ることもなくなる
      少し設定するだけで無料で使える
    • Pi 4で動かしていて、設定と利用が簡単なので満足している
      AdGuardは知らなかったが、良さそうでもわざわざ試したいとは思わない
    • 数年前から使っていて気に入っている
      .NETベースなのでクロスプラットフォームでもある
      そのやり方を望むならDockerイメージもある
    • C#/.NETで書かれていて比較的新しいという理由で選ばず、Unboundにした
  • NextDNSについては概ね肯定的な内容がいくつかあるが、自分はNextDNSから移ろうかと考えているので別に書いておく
    理由は、今Mac/Safariを使っていて、「トラッカーからIPアドレスを隠す」機能を有効にしたいのだが、これを有効にするとNextDNSが本来ブロックしていたWebサイト広告が表示され始めるからだ
    そのためこのオプションをオフにしなければならず、Appleの機能が使えない
    全体としては両者は一緒に使えないようで、NextDNSのヘルプサイトにも関連する問題が上がっている
    https://help.nextdns.io/t/q6yq4xy/nextdns-stops-working-prop...
    これがAdGuardやPi-holeでも既知の問題なのか知っている人がいれば気になる

    • iCloud Private Relayのことを言っているなら、DNSベースの広告ブロッカーでは想定される動作だ
      リレーを有効にすると接続はプロキシされ、ローカルネットワークのDNSサーバーを使わなくなる
      Pi-holeでもNextDNSでもAdGuardでも同じだ
    • 広告とトラッカーをブロックする製品を使いながら、別の製品でそれを迂回して広告やトラッカーにアクセスしつつ、しかも第三者を経由させることになる
      後者の目的が何なのか分からない
  • HNにはPi-holeやAdGuard Homeの記事が投稿されずにいられる決まった時間があるようだ

    • カレンダーに半年ごとの繰り返しタスクを入れてある: HN: Pi-hole / AdGuard? ;-)
  • いいね
    同様に、ネットワークでpfSenseを動かしているなら、pfBlockerNGも確認してみる価値がある。個人的にはかなり気に入っている: https://docs.netgate.com/pfsense/en/latest/packages/pfblocke...