AdGuard Home on Ubuntu — DNS広告ブロックサーバーの自前構築

セルフホスト

ネット広告をブロックしたい場合、ブラウザ拡張だけでは対処しきれない場面があります。スマホアプリ内の広告や、テレビのスマートTV広告はブラウザ拡張の圏外です。AdGuard Homeを自前のサーバーで動かせば、DNS レベルでネットワーク全体の広告をブロックできます。Raspberry Piから安価なVPSまで、Ubuntu環境があればどこでも動作します。

本記事では Ubuntu 24.04 LTS に AdGuard Home v0.107.77 を Docker で構築する手順を、docker pull〜セットアップ画面まで実際に動かして確認した結果をもとに解説します。

この記事のポイント

  • AdGuard Home v0.107.77 を Docker で 5分以内に起動できます(イメージサイズ 71.6MB)
  • ブラウザの拡張では届かないスマホ・TV の広告も DNS レベルでブロックできます
  • Ubuntu 24.04.4 LTS + docker.io 29.1.3 の環境で動作を実測確認済みです
  • セットアップはブラウザの GUI ウィザードで完結します(コマンド作業は最小限)
  • 自宅サーバーで使う場合は UFW でポートを絞り、VPS で使う場合はプライベートIPに限定するのが安全です

目次

  1. AdGuard Home とは何か
  2. DNS フィルタリングの仕組み
  3. 前提環境と準備
  4. Docker のインストール
  5. AdGuard Home を起動する
  6. ブラウザでセットアップウィザードを完了する
  7. DNS ブロック動作を確認する
  8. Docker Compose で常駐させる
  9. UFW でポートを絞る
  10. よくあるエラーと解決策
  11. まとめ

AdGuard Home とは何か

AdGuard Home は、オープンソースのネットワーク広告・トラッカーブロッカーです。DNS サーバーとして動作し、既知の広告・マルウェアドメインへのクエリを弾きます。有名な Pi-hole と同様のコンセプトですが、HTTPS/DNS over TLS・DNS over HTTPS に標準対応している点が特徴です。

  • ライセンス:GPL-3.0(完全無料)
  • GitHubリポジトリ:AdguardTeam/AdGuardHome
  • 最新安定版:v0.107.77(2026-06-02 リリース)
  • Docker イメージサイズ:71.6MB(軽量)
著者アイコン
著者アイコン

Pi-hole と比べると AdGuard Home は「最初から設定が多め」に見えますが、ウィザードが親切なのですぐ慣れます。DoH(DNS over HTTPS)が標準でオンになるのは正直助かります。

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

AdGuard Home はネットワークの DNS サーバーとして機能します。クライアントが広告ドメイン(例:doubleclick.net)を名前解決しようとすると、AdGuard Home がフィルタリストと照合し、マッチしたドメインへのクエリを遮断します。

AdGuard Home DNS フィルタリングの仕組み(概念図)
AdGuard Home DNS フィルタリングの仕組み(概念図)

ブラウザ拡張と違う点は、この遮断がネットワーク全体に効くことです。スマホの Chrome も、テレビのアプリも、同じWi-Fiに繋いでいればすべて対象になります。

前提環境と準備

今回検証した環境は以下の通りです。VPS でも自宅サーバーでも同じ手順で動きます。

項目 バージョン / 値
OS Ubuntu 24.04.4 LTS (Noble Numbat)
Docker docker.io 29.1.3-0ubuntu3~24.04.2
AdGuard Home v0.107.77(Docker イメージ)
必要RAM 256MB 以上(推奨 512MB)
開放ポート 53/UDP(DNS)、3000/TCP(セットアップUI)
Ubuntu 24.04 パッケージバージョン一覧(apt-cache policy 実測)
Ubuntu 24.04 パッケージバージョン一覧(apt-cache policy 実測)

注意

ポート 53(DNS)はほとんどの Linux でデフォルト起動している systemd-resolved が使っています。sudo lsof -i :53 で使用状況を確認し、必要なら systemd-resolved を停止してから AdGuard Home を起動してください。

Docker のインストール

Ubuntu 24.04 では apt から直接 docker.io をインストールできます。

手順1:パッケージを更新してインストールする




ubuntu@server: ~
$ sudo apt update && sudo apt install -y docker.io
Reading package lists… Done
Building dependency tree… Done
Setting up docker.io (29.1.3-0ubuntu3~24.04.2) …
$ docker –version
Docker version 29.1.3, build 26cf74c
$ sudo systemctl enable –now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service

手順2:sudo なしで docker コマンドを使えるようにする




ubuntu@server: ~
$ sudo usermod -aG docker $USER
$ newgrp docker
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

newgrp docker はセッション内だけ有効です。サーバーを再ログインすれば常時有効になります。

AdGuard Home を起動する

手順3:イメージを取得する




ubuntu@server: ~
$ docker pull adguard/adguardhome:latest
latest: Pulling from adguard/adguardhome
d5f55c49912c: Pull complete
4f4fb700ef54: Pull complete
Digest: sha256:e6f2b8bcda06064ab055b44933a4f0e983c35558b9cdb8d2e7ab1efcee36d890
Status: Downloaded newer image for adguard/adguardhome:latest
# イメージサイズ 71.6MB — v0.107.77(2026-06-02)
AdGuard Home Docker pull 実ログ(adguard/adguardhome:latest v0.107.77)
AdGuard Home Docker pull 実ログ(adguard/adguardhome:latest v0.107.77)

実際に取得してみると 71.6MB というコンパクトなサイズでした。同カテゴリの Pi-hole Docker イメージが 200MB 超であることを考えると軽量です。

手順4:コンテナを起動する




ubuntu@server: ~
$ docker run -d \
–name adguardhome \
-p 53:53/udp \
-p 80:80/tcp \
-p 3000:3000/tcp \
-v /opt/adguardhome/conf:/opt/adguardhome/conf \
-v /opt/adguardhome/work:/opt/adguardhome/work \
adguard/adguardhome:latest
4326cd0a1b82387fd5d66ffb5ef4931c975315d68b3d6b8efb9a2dcc6026
$ docker ps | grep adguardhome
4326cd0a1b82 adguard/adguardhome:latest … Up 5 seconds 53/udp, 3000/tcp

ポートのマッピングについて補足します。

  • 53/udp:DNS クエリを受け付けるポート(必須)
  • 80/tcp:セットアップ完了後の管理画面(HTTP)
  • 3000/tcp:初回セットアップウィザード専用ポート



ubuntu@server: ~
$ docker logs adguardhome 2&>&1 | head -6
2026/06/13 22:04:32.159667 [info] starting adguard home version=”AdGuard Home, version v0.107.77″
2026/06/13 22:04:32.162915 [info] this is the first time adguard home has been launched
2026/06/13 22:04:32.162939 [info] checking if adguard home has the necessary permissions
2026/06/13 22:04:32.166338 [info] adguard home can bind to port 53
2026/06/13 22:04:32.168697 [info] tls_manager: using default tls configuration
2026/06/13 22:04:32.170000 [info] http server is listening
AdGuard Home 起動ログ(docker logs 実測 — v0.107.77 起動確認)
AdGuard Home 起動ログ(docker logs 実測 — v0.107.77 起動確認)

adguard home can bind to port 53 と表示されれば正常に起動しています。もしこの行が出ないようであれば、ポート 53 が他のプロセスに使われている可能性があります(下記のエラー解決セクションを参照)。

ブラウザでセットアップウィザードを完了する

コンテナが起動したら、ブラウザで http://<サーバーIP>:3000 を開きます。初回のみ、セットアップウィザードが表示されます。

AdGuard Home セットアップウィザード初期画面(Playwright 実撮影)
AdGuard Home セットアップウィザード初期画面(Playwright 実撮影)

①「Getting Started」

最初の画面で「Get Started」をクリックします。AdGuard Home の概要が表示されます。

AdGuard Home セットアップウィザード Step 2(Playwright 実撮影)
AdGuard Home セットアップウィザード Step 2(Playwright 実撮影)

②「Admin Web Interface」と「DNS Server」の設定

管理画面のポートと DNS リスニングアドレスを設定します。デフォルトでは:

  • Admin Interface:0.0.0.0:80(全インターフェースで待ち受け)
  • DNS Server:0.0.0.0:53(全インターフェースで待ち受け)

注意

VPS で運用する場合、0.0.0.0(全インターフェース)のままだと外部から DNS クエリを受け付けてしまい、オープンリゾルバーになります。本番環境では UFW で 53 ポートを接続元 IP で絞るか、リスニングアドレスをプライベート IP に変更してください。

③ 管理者アカウントの設定

ユーザー名とパスワードを設定します。この認証情報でブラウザの管理画面にログインします。

④ セットアップ完了

「Next」を押してウィザードを完了すると、DNS として使う IP アドレスが表示されます。ルーターや端末の DNS をこの IP に変更すれば、広告ブロックが有効になります。

AdGuard Home セットアップウィザード完了画面(Playwright 実撮影)
AdGuard Home セットアップウィザード完了画面(Playwright 実撮影)

DNS ブロック動作を確認する

セットアップ後、dig コマンドで実際にブロックされているか確認してみましょう。

AdGuard Home DNS 確認コマンド手順(mock)
AdGuard Home DNS 確認コマンド手順(mock)



ubuntu@client: ~
$ dig @<AdGuardHomeのIP> doubleclick.net +short

# 空レスポンス → ブロックされています
$ dig @<AdGuardHomeのIP> google.com +short
142.250.199.46
# 通常ドメイン → 正常に解決されています

管理画面の「Query Log」タブでは、どのクエリがブロックされたか・通過したかをリアルタイムで確認できます。

Docker Compose で常駐させる

本番運用では Docker Compose を使うと再起動時の自動起動や設定管理がしやすくなります。

手順5:docker-compose.yml を作成する




ubuntu@server: ~
$ mkdir -p /opt/adguardhome && cd /opt/adguardhome
$ cat > docker-compose.yml << ‘EOF’
version: ‘3’
services:
adguardhome:
image: adguard/adguardhome:latest
container_name: adguardhome
restart: unless-stopped
ports:
– “53:53/udp”
– “80:80/tcp”
– “3000:3000/tcp”
volumes:
– ./conf:/opt/adguardhome/conf
– ./work:/opt/adguardhome/work
EOF
$ docker-compose up -d
Creating adguardhome … done

restart: unless-stopped を設定することで、サーバー再起動後も AdGuard Home が自動的に立ち上がります。設定ファイルは ./conf ディレクトリにマウントするため、コンテナを削除・更新しても設定が保持されます。

UFW でポートを絞る

VPS で運用する場合は特に、UFW(Uncomplicated Firewall)で DNS ポートを適切に制限してください。




ubuntu@server: ~
$ sudo ufw status
Status: active
# 管理画面(80番)は管理者のIPのみ許可
$ sudo ufw allow from <管理者IP> to any port 80 proto tcp
Rule added
# DNS(53番)は LAN セグメントのみ許可
$ sudo ufw allow from 192.168.1.0/24 to any port 53 proto udp
Rule added
$ sudo ufw reload
Firewall reloaded

注意

Docker はデフォルトで UFW のルールをバイパスすることがあります(iptables 直接操作のため)。この問題を回避するには、Docker の /etc/docker/daemon.json"iptables": false を追記するか、iptables-legacy を使う設定が必要です。自宅ルーター配下での運用なら影響は限定的です。

よくあるエラーと解決策

エラー1:ポート 53 が bind できない




ubuntu@server: ~
Error: bind: address already in use
$ sudo lsof -i :53
systemd-r xxx systemd-resolve UDP *:domain
# systemd-resolved が占有しているので停止します
$ sudo systemctl stop systemd-resolved
$ sudo systemctl disable systemd-resolved
# /etc/resolv.conf を更新(8.8.8.8 を直接参照)
$ echo “nameserver 8.8.8.8” | sudo tee /etc/resolv.conf
$ docker start adguardhome

エラー2:セットアップ画面が表示されない

ポート 3000 がファイアウォールでブロックされている可能性があります。




ubuntu@server: ~
$ sudo ufw allow 3000/tcp
Rule added
$ docker ps | grep adguardhome
4326cd0a1b82 adguard/adguardhome:latest Up 30 seconds 0.0.0.0:3000->3000/tcp
# ポート確認後、ブラウザで http://<IP>:3000 を開いてください

エラー3:コンテナが起動直後に終了する




ubuntu@server: ~
$ docker logs adguardhome 2&>&1 | tail -10
# ログを確認してエラーメッセージを特定します
$ docker inspect adguardhome –format ‘{{.State.ExitCode}}’
137
# 137 = OOM Kill(メモリ不足)。最低 256MB の RAM が必要です

まとめ

AdGuard Home v0.107.77 を Ubuntu 24.04 に Docker で構築する手順をまとめると次の通りです。

  • Docker の最新版(29.1.3)は apt install docker.io 一発で入ります
  • docker pull adguard/adguardhome:latest でイメージ取得(71.6MB)
  • 起動後はブラウザで http://<IP>:3000 を開いてウィザードを完了させるだけです
  • ポート 53 は systemd-resolved が占有している場合があるので事前確認が必要です
  • VPS で使う場合は UFW でポートを絞り、オープンリゾルバーにならないよう注意してください
  • Docker Compose と restart: unless-stopped で再起動時の自動起動を設定しましょう

DNS レベルのブロックはネットワーク内の全端末に効くため、スマホやスマートTVの広告も減らせます。VPS で動かしたいという方は、まず Vultr の $6/月プランから試してみるのがおすすめです。東京リージョンがあり、日本から低遅延で使えます。

コメント

タイトルとURLをコピーしました