個人のノートPCにuBlock Originを導入するのはとても簡単です。しかし、家中のスマートフォン5台を1台ずつ設定したり、Samsung製スマートTVに表示され続けるバナー広告に対処したり、監視カメラが不審なサーバーへテレメトリデータを密かに送信するのを防ぐとなると話は別です。そこで、ゲートウェイ層に一元管理型のDNS Sinkhole(DNSシンクホール)を構築するのが最も根本的な解決策となります。Wi-Fiに接続するすべてのデバイスが、アプリを追加インストールすることなく自動的に保護されます。
代表的な広告ブロック手法の比較
実際のところ、主に以下の3つのアプローチで迷うことが多いでしょう。
- Browser Extension(uBlock Origin、AdGuardなど): ブラウザ上のHTML/DOM要素に直接介入します。最も強力なフィルタリングが可能で、YouTubeやFacebookの広告枠(空白ブロック)まで綺麗に除去できます。デメリットは、スマートTVやスマホゲーム、IoTデバイスには一切効果がない点です。
- Pi-hole: オープンソースのDNSシンクホールとして確固たる地位を築いており、Raspberry Pi上で極めて軽量かつ安定して動作します。しかし、標準では暗号化DNSをサポートしていません。プロバイダ(ISP)によるトラッキングを防ぐためにDoHやDoTを利用したい場合、
cloudflaredやunboundといった中間サービスを追加導入する必要があり、構成がやや煩雑になります。 - AdGuard Home: Go言語で開発されており、単一のバイナリファイルとして提供されます。最初からDoH、DoT、DoQがネイティブで組み込まれています。直感的なWeb UIを備えており、わずか数クリックでデバイスごとのブロックルールを設定・管理できます。
AdGuard Homeがホームネットワークや小規模オフィスに最適な理由
接続機器が10台〜100台程度の環境において、AdGuard Homeの利便性は群を抜いています。古いRaspberry Pi 3やx86のミニPC、あるいは月額5ドル程度の安価なVPS上でも快適に運用可能です。
リソース消費量に関しても、約30万件のフィルタリングルールを読み込んだ状態で消費RAMはわずか80MB〜150MB程度です。Pi-holeと比べるとわずかに多いものの、現代のハードウェアであれば何の問題もなく動作します。
インストールの前に注意点が1つあります。LinuxサーバーにはLAN内で固定IP(Static IP)を割り当てておく必要があります。ルーターの再起動時に異なるIPアドレスが再割り当てされてしまうと、家庭内全体のネットワークが不通になるリスクがあるためです。ネットワーク帯を設計する際は、オンラインのサブネット計算ツールなどを活用して、DHCPで自動割り当てする範囲とサーバー用の固定IP範囲を明確に分離し、IPの重複を防ぎましょう。
LinuxサーバーへのAdGuard Home導入手順
ステップ1: systemd-resolvedが占有しているポート53を解放する
これはUbuntuやDebianで初めてインストールするユーザーの多くがつまずく典型的なトラブルです。デフォルトではsystemd-resolvedサービスが内部のstubリスナーとして53/UDPポートを占有しているため、AdGuard Homeの起動がブロックされてしまいます。
まずはroot権限で設定ファイルを開きます。
sudo nano /etc/systemd/resolved.conf
以下の2つのパラメータを探して変更します(行頭に#がある場合は削除してコメントアウトを解除してください)。
DNSStubListener=no
DNS=127.0.0.1
ファイルを保存します(Ctrl+O、Enter、Ctrl+X)。続いて、システムのDNS解決設定ファイルを実際の設定へと向け直すシンボリックリンクを作成し、サービスを再起動します。
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved
ポート53が正しく解放されたかを確認します。
sudo ss -tulpn | grep :53
ターミナルに何もプロセス情報が出力されなければ、ポート53の解放は完了です。
ステップ2: 公式スクリプトによるAdGuard Homeのインストール
以下のコマンドを実行して最新バージョンをダウンロードおよびインストールします。スクリプトがCPUアーキテクチャ(x86_64、ARM64など)を自動検出し、systemdサービスとして登録してくれます。
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
サービスが稼働しているかステータスを確認します。
sudo systemctl status AdGuardHome
緑色でactive (running)と表示されていれば、ターミナルでの作業は無事完了です。
ステップ3: Webセットアップウィザードによる初期設定
同一ローカルネットワーク上のPCからブラウザを開き、以下のアドレスにアクセスします。
http://<IP_SERVER_LINUX>:3000
- Get Startedをクリックして設定を開始します。
- Web Interface: LAN側のネットワークインターフェースを選択します。ポートはデフォルトの
80のままで構いませんが、サーバーで既にNginxやApacheが稼働している場合は8080などに変更してください。 - DNS Server: LAN側のインターフェースでポート
53を選択します。 - 管理者アカウント(UsernameとMaster Password)を作成します。
- 設定が完了するまでNextを進め、Dashboard(ダッシュボード)にログインします。
ステップ4: 暗号化アップストリームDNS(DoH / DoT)の設定
デフォルトではDNSクエリは平文(プレーンテキスト)で送信されるため、プロバイダ(ISP)による盗聴やDNSハイジャック(通信の強制リダイレクト)のリスクに晒されます。プライバシーを保護するために、暗号化プロトコルへ移行しましょう。
Settings > DNS settings を開きます。Upstream DNS serversの入力欄にある既存の設定を削除し、以下のリストを貼り付けます。
https://dns.cloudflare.com/dns-query
https://dns.google/dns-query
tls://1.1.1.1
tls://8.8.8.8
すぐ下のUpstream mode項目で、Parallel requests(並列リクエスト)を選択します。このオプションを有効にすると、AdGuard Homeはすべてのアップストリームサーバーへ同時に問い合わせを行い、最も応答が早かったサーバーの結果を採用するため、名前解決のレイテンシを最小限に抑えられます。
Bootstrap DNS servers項目には、DoHドメインの初期名前解決を行うためのプレーンIPアドレスを入力します。
1.1.1.1:53
8.8.8.8:53
Applyをクリックして保存した後、Test upstreamsを実行します。ミリ秒単位の応答時間(通常は30ms未満)とともにテスト成功のメッセージが表示されれば正常です。
ステップ5: ベトナム向けブロックリストの追加とペアレンタルコントロール機能
AdGuardのデフォルトフィルターは国際的な広告をしっかりブロックしてくれますが、現地の国内広告やトラッキングを見逃すことがあります。ここでは、ベトナム向けに最適化されたABPVNリストを追加してみましょう。
- Filters > DNS blocklists を開き、Add blocklist > Add a custom list を選択します。
- Name:
ABPVN Filter - URL:
https://raw.githubusercontent.com/abpvn/abpvn/master/filter/abpvn_AdGuardHome.txt - Saveをクリックしてルールを読み込みます。
また、子どものインターネット利用を管理したい場合は、Filters > Blocked services を活用しましょう。TikTok、Facebook、Roblox、Discordなどにチェックを入れるだけで、これらのプラットフォームへの接続を一括で遮断できます。
ステップ6: ルーターのDNS参照先をAdGuard Homeへ向ける
各端末で手動設定する代わりに、Wi-Fiルーターから宅内全体へ自動的にDNS設定を配布させます。
- ルーターの管理画面(通常は
192.168.1.1または192.168.0.1)にアクセスします。 - DHCPサーバーの設定項目を探し、Primary DNS(プライマリDNS)の欄を確認します。
- ここにAdGuard Homeサーバーの固定IPアドレスを入力します。デバイスが自動的にプロバイダ提供の予備DNSへフェイルオーバーしてしまうのを防ぐため、Secondary DNS(セカンダリDNS)は空欄にするか、同じIPアドレスを入力してください。
- 設定を保存し、スマートフォンのWi-Fiを一度切断してから再接続して、新しいDNS情報が取得できているか確認します。
安定運用のための実践ノウハウとトラブル回避のコツ
- ブロックリストを追加しすぎない: 10〜20ものリストを登録して数百万件のルールを詰め込んでも、セキュリティが向上するわけではありません。むしろRAM使用量が急増し、誤検知(False Positive)が多発する原因になります。その結果、家族から「Shopeeのアフィリエイトリンクが開かない」「銀行アプリでエラーが出る」「Zaloで画像が読み込めない」といった不満が出る羽目になります。基本的にはデフォルトのフィルターに地域特化リスト(ABPVNなど)を組み合わせるだけで、不要な広告の95〜98%をブロックできます。
- Optimistic Caching(楽観的キャッシュ)を有効化する: DNS設定メニューでこの機能を有効にします。AdGuard HomeはレコードのTTLが切れているかどうかに関わらず、キャッシュ内のIPをクライアントへ即座に返し、その後バックグラウンドで非同期に更新クエリを実行します。これにより、Webサイトの初期読み込みにかかる名前解決時間が通常の40〜70msからわずか1〜3ms程度へと大幅に高速化されます。
- Query Logを活用してトラブルシュートする: 特定のWebサイトに接続できなくなった場合でも、慌ててAdGuardを停止する必要はありません。すぐにQuery Logを開き、不具合の起きている端末のIPアドレスでフィルタリングしてください。赤色で表示されている行がブロックされたリクエストです。対象ドメインのUnblockをクリックしてWhitelist(ホワイトリスト)に追加するだけで簡単に解決します。
- AdGuardHome.yamlファイルを定期バックアップする: すべての設定、追加したルールリスト、クライアントのグループ分け情報は
/opt/AdGuardHome/AdGuardHome.yamlにまとめられています。週に1回このファイルをGoogle DriveやローカルPCへバックアップするcronジョブを設定しておきましょう。万が一サーバーのストレージがクラッシュしても、3分足らずでシステム全体を復元できます。

