ブログに戻る
8月 19, 2026ガイド

VPSにAdGuard Homeをセットアップする方法

UbuntuにAdGuard Homeをインストールし、初回ウィザードを終え、Web UIを保護し、DNS-over-HTTPSとDNS-over-TLSを有効にし、端末を自分のリゾルバへ向け、インターネット全体が悪用できるオープンDNSサーバーを避けます。

VPSにAdGuard Homeをセットアップする方法

AdGuard Homeは、Webインターフェース付きのセルフホストDNSシンクホール兼、再帰に近いリゾルバです。DNSとして使うすべての端末 — スマートフォン、ノートPC、スマートTV、ほかのVPSプロジェクト — で広告、トラッカー、マルウェアドメインを遮断できます。ブラウザ拡張と違い、hostsファイルを無視するアプリにも効きます。外出先でも同じフィルタリングが欲しいとき、自宅ネットにRaspberry Piを置きたくないときに、VPSで動かす意味があります。

出荷してはいけない危険な既定は、オープンリゾルバです。UDP/TCP 53がアクセス制御なしでインターネット全体から届くと、見知らぬ人がDNS増幅にVPSを使い、濫用の苦情が来ます。このガイドではUbuntuにAdGuard Homeを入れ、暗号化DNSを意図的に公開しない限りDNSをlocalhostまたはプライベートなWireGuardインターフェースにバインドし、ダッシュボードをHTTPSにし、クラシックなポート53を世界に開けずにノートPCとスマートフォンがDNS-over-HTTPS(DoH)またはDNS-over-TLS(DoT)を使う方法を示します。

AdGuard Homeが向いていること

比較対象はたいていPi-holeです。AdGuard HomeはWeb UI内蔵の単一バイナリで、任意の暗号化DNSフロントエンドとクライアントごとの設定があります。Dockerでもsystemdサービスでも動かせます。HiddenceのVPSではプライベートVPNと相性がよく、端末がWireGuardに入り、トンネル経由でVPSへDNSを送り、ポート53を公開しません。

  • すべての端末にアプリを入れずに、ネットワーク全体でブロック
  • DoH(443)とDoT(853)で、公衆Wi-Fi上のDNSが平文にならない
  • クエリログと統計で、どの端末がどのドメインに話しているか見える
  • カスタムアップストリーム(Quad9、Cloudflare、自分のUnbound)
  • フットプリントが小さい — 1 GBのVPSで家庭と数台の追加クライアントをフィルタできる

要件

DoH/DoTとダッシュボード用の信頼できる証明書が欲しいならドメインが必要です。最初はHTTPとサーバーIPで試せますが、そのままにしないでください。Ubuntuでsystemd-resolvedがすでにポート53を持っている場合は、AdGuard HomeがDNSをバインドする前に空けます。

  • root/sudo付きのUbuntu 22.04または24.04 VPS
  • 個人利用なら1 GB RAMで足りる
  • VPSへのAレコード付きドメインまたはサブドメイン(dns.example.com)
  • SSHアクセス。トンネル内だけDNSにしたい場合は任意でWireGuard

ステップ1:ポート53を空け、AdGuard Homeをインストールする

Ubuntu Serverはしばしばsystemd-resolvedを 127.0.0.53:53 のスタブとして動かします。AdGuard Homeは選んだインターフェース上の53が欲しいです。インストーラーでもできますが、明示的にやるとVPS自身のDNSが中途半端に壊れません(サーバーはパッケージ解決のためまだ名前解決が必要です)。

bash
ssh root@YOUR_VPS_IP
apt update && apt -y upgrade
apt -y install curl ca-certificates

# See who owns port 53:
ss -tulpn | grep ':53'

# Typical Ubuntu fix: stop stub listener, point the OS at a temporary resolver
mkdir -p /etc/systemd/resolved.conf.d
cat >/etc/systemd/resolved.conf.d/adguardhome.conf <<'EOF'
[Resolve]
DNS=1.1.1.1
DNSStubListener=no
EOF
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl restart systemd-resolved

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

ステップ2:初回ウィザード

インストーラーはURLを表示します。多くの場合は http://YOUR_IP:3000/ です。開き、長いパスワードの管理者ユーザーを作り、リッスンアドレスを選びます。公開VPSでの安全な最初の構成は、Admin Webを 127.0.0.1:3000(手前にCaddyを置く)またはTLS後の80/443、DNSリッスンを 127.0.0.1:53 とVPNインターフェースにし、0.0.0.0:53 にはしない、です。友人向けにLAN風DNSが本当に必要なら、オープンな53/udpではなく、認証付きの443/853上のDoH/DoTを優先します。

信頼できるアップストリームDNSサーバーを選びます。多くの人は https://dns.quad9.net/dns-query またはCloudflareを使います。フェイルオーバーを速くしたいなら並列リクエストを有効にします。まず既定のフィルタリストをオンにし、追加は後からです。初日に50個のリストを有効にすると、サイトが壊れたときの切り分けが不可能になります。

ノートPCからポート3000が開けない場合はSSHトンネルを使います: ssh -L 3000:127.0.0.1:3000 root@YOUR_VPS_IP そして http://127.0.0.1:3000/ を開きます。

ステップ3:ダッシュボード用のリバースプロキシとHTTPS

ウィザードが終わると、AdGuard HomeはUIをポート80へ移すことがよくあります。サイトもホストしているとCaddyやNginxと衝突します。きれいなパターンは、AdGuard HomeのWebを 127.0.0.1:8080、DNSを 127.0.0.1:53、Caddyを443でダッシュボードとDoHの両方、です。

bash
# In AdGuard Home settings, bind the web UI to 127.0.0.1:8080
# Example Caddyfile:

dns.example.com {
    reverse_proxy 127.0.0.1:8080
}

# After Caddy is up:
curl -I https://dns.example.com

ステップ4:DNS-over-HTTPSとDNS-over-TLSを有効にする

Encryption設定で暗号化を有効にし、サーバー名を dns.example.com にし、AdGuard Homeを証明書ファイルへ向けます。Caddyが保存するものでも、443で待受する場合にAdGuard Home自身が取得するものでも構いません。DoHは通常 https://dns.example.com/dns-query です。DoTは dns.example.com:853 です。Caddyがすでに443を持っているなら、CaddyにTLSを終端させ、DoHパスをAdGuard Homeの平文HTTP DoHポートへリバースプロキシするか、AdGuard Homeに443を聴かせダッシュボードを別サブドメインにします。

すべての端末を変える前に、クライアントで確認します。新しいcurlがあるノートPCでは:

bash
curl -H 'accept: application/dns-json' 'https://dns.example.com/dns-query?name=example.com&type=A'

# DoT test (kdig from knot-dnsutils, if installed):
# kdig @dns.example.com +tls-ca +tls-host=dns.example.com example.com

ステップ5:実際の端末をリゾルバへ向ける

Windows 11と最近のAndroidはDoHテンプレートを使えます。iOSは構成プロファイルかDoH対応クライアントです。FirefoxとChromiumもカスタムDoH URLを許可します。自宅ルーターでは、ルーターがDoT/DoHに対応しているときだけWAN DNSを設定します。そうでなければWireGuardを動かし、DNSをVPSのVPN IPにして、クラシックDNSがインターネットを横断しないようにします。

  • Android 9+: プライベートDNS(DoT)→ dns.example.com
  • Firefox: 設定 → ネットワーク → DNS over HTTPS → カスタムURL https://dns.example.com/dns-query
  • Apple端末: 署名済みmobileconfig、またはDoH/DoT対応アプリ
  • 他のVPS: resolv.confまたはsystemd-resolvedを、このAdGuardインスタンスのWireGuard IPへ
  • 暗号化なしで、無作為の公衆網のDNSとしてこのVPS IPを設定しない

ステップ6:ファイアウォール — オープンな再帰DNSを閉じる

ここが嫌なサプライズを防ぎます。SSH、HTTPS、任意でDoT用の853/tcpを許可します。非常に限定的でレート制限と認証のある設計でない限り、0.0.0.0/0 から53/udpを許可しないでください。その場合でも、おそらくすべきではありません。

bash
ufw allow OpenSSH
ufw allow 443/tcp comment 'dashboard + DoH'
ufw allow 853/tcp comment 'DoT'
# If DNS is only on WireGuard (example iface wg0, 10.8.0.1):
# ufw allow in on wg0 to any port 53 proto udp
ufw enable
ufw status verbose

# Confirm 53 is not public:
ss -tulpn | grep ':53'

フィルタ、許可リスト、クライアント

AdGuardの既定DNSフィルタとマルウェアリスト1つから始めます。サイトの挙動がおかしいときはクエリログを見て、ブロックを全部切るのではなく、具体的な許可ルールを足します。クライアント名(IP、またはDoH URLのClientID)を使い、スマートTVには厳しめ、仕事用ノートには緩めのリストを適用できます。セーフサーチは本当に欲しいときだけ有効にします。頼んでいないのにGoogleの結果が書き換えられると驚く人がいます。

  • クエリログ: ブロックされたドメインを見つけ、誤検知ならホワイトリスト
  • クライアント設定: 端末ごとに異なるブロックリスト
  • 許可しないクライアント: 自分が所有していない範囲をブロック
  • レート制限: 一握り以上のユーザーに公開するならオンにする

トラブルシューティング

VPS自身がapt updateできないなら、ポート53を空けたときにローカルDNSを壊しています。上のとおりresolved.confに静的リゾルバを置きます。端末は「インターネットがある」のに広告がまだ出るなら、DNSを迂回しています(ハードコードされたリゾルバ、ブラウザのDoH、独自DNSを使うアプリ)。ダッシュボードが空なら、別インスタンスを見ているか、ウィザード後にUIが移ったあともポート3000に当たっています。

  • aptが失敗: /etc/resolv.conf と systemd-resolved を確認
  • ポート53使用中: ss -tulpn、スタブリスナーを無効化
  • DoHの証明書エラー: ホスト名が証明書のSANと一致する必要がある
  • 広告がまだ見える: ブラウザのDoHが別プロバイダへ行き、OSを上書き
  • RAMが高い: クエリログ + フィルタリスト過多 — リストを削りログ保持を短く

セキュリティチェックリスト

Web UIは管理パネルです。一意のパスワード、HTTPSのみ、URLを公開しない。AdGuard Homeは更新し続けます。インストールスクリプトとUIの両方に更新経路があります。自分の端末だけがDoHを使うなら443を制限します。有名なオープンリゾルバより、DoHパスのHTTP basic authやWireGuard限定の方がずっと安全です。

  • 公開の53/udpはなし
  • ダッシュボードはHTTPS
  • 強い管理者パスワードをパスワードマネージャーに保存
  • 家族の端末はWireGuard + 内部DNSを優先
  • AdGuardHome.yamlをサーバー外へバックアップ

ヒント

  • アップグレードの前に毎回 /opt/AdGuardHome/AdGuardHome.yaml をバックアップ
  • 専用サブドメインを使い、無関係なCMSと共有しない
  • すでにCaddyを動かしているなら、443はCaddyに任せAdGuard Homeはlocalhostに
  • 端末用のDoH URLを記録する — 忘れます
  • SSH強化とファイアウォールのガイドと組み合わせ、VPSが『DNSだけ安全』にならないように

VPS上のAdGuard Homeは素直です。ローカルでポート53を空け、インストーラーを実行し、強い管理者パスワードでウィザードを終え、UIをHTTPSにし、DoH/DoTを有効にし、クラシックDNSを公衆インターネットから外します。端末を暗号化エンドポイントかVPN IPへ向け、フィルタは少なめから始め、壊れたらクエリログを使います。それが実際に自分で制御するプライベートリゾルバです。濫用データベースにVPSが載る公開オープンDNSではありません。