VPS上のAdGuard Home:インストールと広告ブロック

読了時間 6分
Tropic
VPS上のAdGuard Home:インストールと広告ブロック

H1: VPSにAdGuard Homeをインストールして設定する方法

AdGuard Homeは、広告ドメイン、トラッカー、その他の不要なリソースへのリクエストをブロックする無料のDNSサーバーです。パソコン、スマートフォン、テレビなどのDNSリクエストをAdGuard Home経由にし、1つの管理画面からフィルタリングを管理できます。以下では、UbuntuまたはDebianのVPSへのインストール、初期設定、クライアントの接続、公開サーバーの保護について説明します。

必要なもの

個人利用であれば、通常は1 vCPU、512 MB~1 GBのRAM、数GBの空き容量で十分です。また、固定IPアドレス、SSHアクセス、rootまたはsudo権限が必要です。

AdGuard Homeは次のポートを使用します。

  • 初期設定ウィザード用の3000/TCP
  • 通常のDNS用の53/UDP53/TCP
  • 管理画面へ継続的にアクセスするために選択したポート。

ポート53を制限なしでインターネット全体に公開してはいけません。安全な構成については別の項目で説明します。

UbuntuまたはDebianへのAdGuard Homeのインストール

SSHでVPSに接続し、curlをインストールします。

sudo apt update
sudo apt install -y curl

公式のインストールスクリプトを実行します。

curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sudo sh -s -- -v

スクリプトはサーバーのアーキテクチャを判別し、安定版をダウンロードして/opt/AdGuardHomeにインストールし、システムサービスを作成します。状態は次のコマンドで確認できます。

sudo /opt/AdGuardHome/AdGuardHome -s status

次に、ブラウザーで以下を開きます。

http://SERVER_IP:3000

ページを開けない場合は、システムのファイアウォールとホスティング事業者の管理画面にあるルールを確認してください。

初期設定

設定ウィザードでは、管理画面とDNSサーバーのアドレスおよびポートを選択します。

管理画面にはポート3000をそのまま使用し、インターフェースとしてVPSのIPアドレスを選択できます。専用のユーザー名と強力なパスワードを作成してください。管理画面からは、クエリログ、フィルター、クライアント設定にアクセスできます。

DNSにはサーバーのIPと標準ポート53を選択します。すでに使用されていても、適当な別ポートに変更しないでください。ほとんどの端末は通常のDNSがポート53で動作することを前提としています。競合の解決方法は後述します。

ウィザードを完了すると、メインページにクエリ統計、ブロック数、アクティブなクライアント、よく利用されるドメインが表示されます。

DNSフィルタリングの仕組み

端末はWebサイトやサービスへ接続する前に、ドメインのIPアドレスを問い合わせます。AdGuard Homeはそのドメインをルールリストと照合します。広告ネットワークやトラッカーへのリクエストはブロックされ、許可されたリクエストは上流DNSサーバーへ転送されます。

この方法ならネットワーク全体を一元的にフィルタリングでき、ブラウザーだけでなく、多くのモバイルアプリやスマートテレビでも機能します。さらに、クエリログ、端末ごとのルール、セーフサーチ、スケジュールに基づくサービスのブロックも利用できます。

AdGuard HomeはHTTPSを復号せず、ページのコードも変更しません。そのため、ドメインへのリクエストはブロックできますが、すべての広告要素を取り除けるわけではありません。

インストール後の基本設定

上流DNSサーバー

設定 → DNS設定を開きます。ここでは、AdGuard Homeが許可されたリクエストを転送するサーバーを指定します。最初は提案された値をそのまま使い、後からDNS-over-HTTPSまたはDNS-over-TLSに対応した信頼できるリゾルバーを選択できます。

暗号化された上流DNSは、VPSから外部リゾルバーまでの区間を保護します。端末からVPSまでの接続は、DoH、DoT、またはVPNで別途保護する必要があります。

ブロックリスト

基本フィルターはすでに有効です。大規模なリストを一度に何十個も追加しないでください。内容が重複し、誤検知のリスクが高まります。目的に応じて1つずつ追加し、クエリログを確認してください。

変更後にWebサイトやアプリが動作しなくなった場合は、ログでブロックされたドメインを見つけ、対象を限定した例外を追加します。

カスタムルール

カスタムルールでは、個別のドメインをブロックまたは許可できます。

||ads.example.com^
@@||needed.example.com^

1行目はドメインをブロックし、2行目は例外を追加します。

サービス、スケジュール、クライアント

AdGuard Homeは個別のサービスを完全にブロックし、スケジュールを適用できます。端末を固定クライアントとして追加すれば、パソコン、子ども用タブレット、テレビにそれぞれ異なるルールを設定できます。

端末を接続する方法

サーバーをインストールしただけでは、端末のDNS設定は変更されません。ルーターまたは各クライアントでAdGuard Homeのアドレスを指定する必要があります。

ルーター経由

ルーターの設定を開き、DHCPLAN、またはDNSの項目を探します。AdGuard HomeのIPアドレスをDNSサーバーとして指定し、設定を保存して、端末をネットワークへ再接続します。

フィルタリングを必須にしたい場合、パブリックDNSを2番目のアドレスとして追加しないでください。一部の端末は両方のアドレスを使用し、AdGuard Homeを迂回する可能性があります。耐障害性が必要なら、2つ目のインスタンスを構築するほうが適切です。

1台の端末で設定する

テストでは、1台のパソコンまたはスマートフォンだけDNSを変更できます。

  • Windows — ネットワークアダプターのプロパティとIPv4/IPv6設定;
  • macOS — 使用中の接続の設定;
  • AndroidおよびiOS — 現在接続しているWi-Fiネットワークの設定;
  • スマートテレビ — 手動のネットワーク設定。

通常のWi-Fi設定はモバイルデータ通信では適用されません。どのネットワークでも動作させるには、DoH、DoT、またはVPNが必要です。

次のコマンドでサーバーを確認できます。

nslookup example.org SERVER_IP

リクエストがAdGuard Homeのクエリログに表示されれば正常です。

公開VPSでの安全な設定

オープンなDNSリゾルバーは自動スキャナーによってすぐに発見されます。第三者のクライアントに利用されたり、DNS攻撃に悪用されたりする可能性があり、負荷の増加やIPアドレスに対する苦情の原因になります。

テストでは、自分のグローバルIPアドレスからのアクセスだけを許可してください。UFWがインストールされていない場合は、最初にsudo apt install -y ufwで追加します。

sudo ufw allow OpenSSH
sudo ufw allow from YOUR_IP to any port 3000 proto tcp
sudo ufw allow from YOUR_IP to any port 53 proto udp
sudo ufw allow from YOUR_IP to any port 53 proto tcp
sudo ufw enable

最初にSSHを許可してください。そうしないとVPSへアクセスできなくなる可能性があります。IPアドレスが頻繁に変わる場合は、WireGuard、Tailscale、または別のVPN経由で端末を接続します。

異なるネットワークから継続して利用する場合は、ドメイン、TLS証明書、安全なDNSを設定することをおすすめします。

  • DNS-over-HTTPS用の443/TCP
  • DNS-over-TLS用の853/TCP
  • AdGuard Homeの設定でクライアントとクエリ頻度を制限。

管理画面もファイアウォールまたはVPNで保護してください。ログには端末がアクセスしたドメインが含まれるため、必要な期間だけ保存します。

「ポート53はすでに使用されています」エラー

Ubuntuでは、systemd-resolvedがポート53を使用していることがよくあります。リッスン中のプロセスは次のコマンドで確認できます。

sudo ss -lntup | grep ':53'

サービスが127.0.0.53だけでリッスンしている場合は、まずAdGuard Homeをすべてのインターフェースではなく、VPSの特定のIPアドレスへバインドしてみてください。

競合が解消しない場合は、ローカルDNSスタブリスナーを無効にします。

sudo mkdir -p /etc/systemd/resolved.conf.d

printf '[Resolve]\nDNS=127.0.0.1\nDNSStubListener=no\n' | \
sudo tee /etc/systemd/resolved.conf.d/adguardhome.conf

sudo mv /etc/resolv.conf /etc/resolv.conf.backup
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl reload-or-restart systemd-resolved
sudo /opt/AdGuardHome/AdGuardHome -s restart

サーバーが再びドメイン名を解決でき、AdGuard Homeが動作していることを確認するまでSSHセッションを閉じないでください。

更新とバックアップ

管理画面または次のコマンドから更新できます。

cd /opt/AdGuardHome
sudo ./AdGuardHome --update

大きな変更を行う前に、/opt/AdGuardHome/AdGuardHome.yamlファイルと/opt/AdGuardHome/data/ディレクトリを保存してください。設定、クライアント、フィルター、稼働データが含まれています。

AdGuard Homeに適したVPSの選び方

家族や小規模なチームであれば、通常は1 vCPUと1 GBのRAMで十分です。AdGuard Homeと一緒にVPN、監視システム、その他のアプリケーションを動かす場合は、追加のメモリを確保してください。

この用途にはtropic.hostのVPSが適しています。UbuntuまたはDebianをインストールし、専用IPアドレスを取得して、自宅のパソコンに依存せずDNSサーバーを24時間稼働させられます。インターネット上で運用する場合は、必ずファイアウォール、安全なDNS、またはVPNを使用してください。

AdGuard Homeの制限

DNSフィルタリングは、ブラウザーの広告ブロッカー、ウイルス対策ソフト、ファイアウォールの代わりにはなりません。主要コンテンツと同じドメインから配信される広告を確実に除去することはできません。そのため、サービス自体の動作を損なわずにYouTubeやTwitchの動画広告、またはSNS内の広告投稿をDNSレベルで確実に削除することはできません。

ブロック後もページに空白が残ることがあります。ブラウザー拡張機能はページ要素を非表示にできるため、AdGuard Homeと併用できます。また、一部のアプリは独自の暗号化DNSを使用し、システム設定を迂回する場合があります。

まとめ

AdGuard Homeは、パソコン、スマートフォン、その他の端末で多くの広告とトラッカーを一元的にブロックします。数分でVPSへインストールでき、多くのリソースを必要としません。

インストール後は、クライアントとフィルターを設定し、管理画面を保護し、ポート53をインターネット全体へ公開しないでください。モバイル回線や外部ネットワークから接続する場合は、VPN、DNS-over-HTTPS、またはDNS-over-TLSを使用します。

FAQ

AdGuard Homeは無料ですか?

はい。AdGuard Homeは無料で提供され、サブスクリプションは不要です。費用がかかるのは、動作させる端末またはVPSだけです。

AdGuard HomeはYouTubeの広告をブロックできますか?

いいえ。広告と動画が同じドメインから配信されることがあるため、DNSでブロックするとYouTube自体の動作に支障が出ます。

モバイルデータ通信でもフィルタリングは機能しますか?

はい。DNS-over-TLS、DNS-over-HTTPS、対応するプロファイル、またはVPNを設定すれば機能します。Wi-Fi設定でのDNS変更は、そのネットワークでのみ有効です。

必要なRAM容量はどのくらいですか?

個人利用なら通常は512 MB~1 GBのRAMで十分です。クライアント数が多い場合、大規模なフィルターを使用する場合、または他のサービスも動かす場合は追加のメモリが必要です。

フィルターを有効にした後、Webサイトが開かなくなった場合はどうすればよいですか?

クエリログを開き、問題が起きる操作をもう一度行って、ブロックされたドメインを見つけます。フィルタリング全体を無効にするのではなく、対象を限定した例外を追加してください。