Pi-hole(パイホール)は、広告やトラッキングのドメインへの名前解決をDNSの段階で断つオープンソースソフトウェアです。ルータの配布DNSをPi-holeに向ければ、スマートTVやアプリを含む家中の端末で、ブロックリストに載ったドメインからの広告を止められます。2025年2月に公開されたv6で、管理画面の構成、コマンド、Dockerの環境変数が変わりました。v5向けの解説記事の手順はそのままでは動かない箇所があります。本記事は2026年10月15日時点の最新版(Pi-hole Core v6.4.3、FTL v6.7.1、Web v6.6、Dockerイメージ2026.09.0)を前提に、インストールからDNS設定、ブロックリストの管理、バックアップと2台構成、AdGuard Homeとの選び分けまでを順に説明します。
まとめ:Pi-hole v6の使い方の要点
- Pi-holeはDNSサーバとして動き、広告ドメインへの問い合わせに
0.0.0.0を返して通信させない。配信ドメインが本体と別なら、ブラウザ拡張を入れられないスマートTVやアプリの広告も止められる - Raspberry Piなど固定IPのLinux機に
curl -sSL https://install.pi-hole.net | bashで入れるか、Dockerで動かす。WindowsとmacOSは公式の対応OSに入っていない - ルータがDHCPで配るDNSサーバをPi-holeのIPに変えると、家中の端末に一括で効く。セカンダリDNSに公開DNSを残すと、そこから広告が素通りする
- 管理画面は
http://pi.hole/admin。リストの追加は「Lists」、例外の登録は「Domains」、反映はpihole -g - v5の記事にある
pihole -a -pやWEBPASSWORDはv6では使えない。本記事の読み替え表で置き換える - 止まると家中が名前解決できなくなる。Teleporterで設定を書き出し、常用するなら2台目を用意する
- WindowsやMacで直接動かしたい、上流の暗号化を標準機能で済ませたいならAdGuard Homeの方が手間が少ない
Pi-holeの仕組みとブラウザ拡張との違い
Web広告は、ページ本体とは別の広告配信ドメインから読み込まれます。端末がそのドメインのIPアドレスをPi-holeに問い合わせると、Pi-holeはブロックリストと照合し、該当すれば 0.0.0.0(IPv6なら ::)を返します。これは既定の「NULL」モードの動作で、端末は接続先を得られないので広告を取りに行けません。リストに無いドメインは上流のDNSサーバへ転送して、通常どおり名前解決します。名前解決そのものの流れは名前解決とDNSの仕組みで整理しています。
ブラウザ拡張の広告ブロッカーは、ページ内の要素をURLやCSSの規則で消します。Pi-holeはドメイン単位でしか判断できない代わりに、拡張を入れられない機器にも効きます。
| 比較軸 | Pi-hole | ブラウザ拡張 |
|---|---|---|
| 効く範囲 | Pi-holeをDNSに使う端末 | 拡張を入れたブラウザだけ |
| 判断の単位 | ドメイン | URL・ページ要素 |
| アプリ・スマートTV | 広告の配信ドメイン次第 | 効かない |
| 同じドメインから出る広告 | 消せない | 消せる場合がある |
| 広告枠の空白 | 残ることがある | 要素ごと消せる |
両者は排他ではありません。Pi-holeで端末全体の通信を減らし、どうしても残る広告だけブラウザ拡張で消す、という併用が現実的です。拡張側の仕組みとManifest V3の影響はアドブロック(AdBlock)とは?仕組み・安全性と2026年のブラウザ別対応状況にまとめています。
動作環境と事前準備
対応OSとハードウェア要件
公式の動作要件は、ストレージの空き2GB(推奨4GB)とメモリ512MBです。名前にPiと付きますが、Raspberry Piに限りません。公式に対応するOSは、Alpine、Armbian OS、Debian、CentOS Stream、Fedora、Raspberry Pi OS、Ubuntuの7種で、いずれも保守中の版に限られます。中核の pihole-FTL はx86_64、armv6、armv7、armv8(aarch64)、riscv64向けにビルド済みなので、初代Raspberry Pi Zeroのようなarmv6機でも動きます。Raspberry PiへのOSの書き込みはRaspberry Pi ImagerをLinuxで使う方法、機種選びはRaspberry Pi 5とPi 4の違いを参照してください。
固定IPと使用ポートの確認
Pi-holeは固定IPで動かす必要があります。OS側で固定する方法のほか、ルータのDHCP予約で同じIPを割り当て続けても構いません。IPが変わると、Pi-holeを参照している端末がすべて名前解決に失敗します。DHCP予約の考え方はDHCPとは?IPアドレス自動割り当ての仕組みで解説しています。
| ポート | 用途 | 必要な場面 |
|---|---|---|
| 53 TCP/UDP | DNS | 常に必要 |
| 80・443 TCP | 管理画面・API | 既定ポートを使う場合 |
| 67 UDP | DHCP(IPv4) | DHCPサーバを使う場合 |
| 547 UDP | DHCPv6 | DHCPサーバを使う場合 |
| 123 UDP | NTP | NTPサーバを使う場合 |
直接インストールした環境では、80番と443番が使用中なら8080番と8443番への切り替えが試みられます。そちらも塞がっていれば管理画面は起動しないので、設定項目 webserver.port で空いているポートを指定します。後述のDocker構成でホスト側のポートが競合した場合はコンテナが起動できないため、Composeの公開ポートを 8080:80/tcp と 8443:443/tcp のように変えます。
WindowsやMacでPi-holeを使う方法
Pi-holeの公式対応OSはLinux系だけで、WindowsやmacOSに直接インストールする手順はありません。WindowsやMacで広告を消したい場合は、Pi-hole本体をRaspberry PiやLinuxサーバで動かし、WindowsやMacのDNSサーバをそのIPに向けます(後述の「端末ごとにDNSを指定する方法」)。Linux機を用意できず、手元のWindowsやMacで常時動かすしかない場合は、両OS向けの公式配布物があるAdGuard Homeを検討します(後述の比較章を参照)。
Pi-holeのインストール手順
Raspberry Pi・Linuxへのワンステップインストール
公式の自動インストーラは、次の1行で起動します。
curl -sSL https://install.pi-hole.net | bash
スクリプトの中身を読んでから実行したい場合は、ダウンロードと実行を分けます。
wget -O basic-install.sh https://install.pi-hole.net
sudo bash basic-install.sh
対話形式のインストーラでは、使うネットワークインターフェース、上流DNSサーバ、初期ブロックリストとして「StevenBlack’s Unified Hosts List」を入れるかどうか、クエリログの記録範囲を選びます。完了画面に管理画面のパスワードが表示されます。控え忘れた場合や変更したい場合は、次のコマンドで設定し直します。
sudo pihole setpassword
pihole status
pihole status でDNSサービスとブロックが有効になっていれば、インストールは完了です。Ubuntu 17.10以降とFedora 33以降は systemd-resolved が53番を使っているため、次節のDocker構成と同じ手当てが必要になることがあります。
Dockerで動かす場合のcompose.yaml
公式イメージ pihole/pihole は、2024.07.0がv5系の最後で、それ以降はv6系です。docker-pi-holeのREADMEをもとにしたv6用の最小構成は次のとおりです。パスワードとタイムゾーンは書き換えてください。
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80/tcp"
- "443:443/tcp"
environment:
TZ: 'Asia/Tokyo'
FTLCONF_webserver_api_password: 'ここに管理画面のパスワード'
FTLCONF_dns_listeningMode: 'ALL'
volumes:
- './etc-pihole:/etc/pihole'
restart: unless-stopped
docker compose up -d で起動します。Dockerの既定のbridgeネットワークで動かすときは、FTLCONF_dns_listeningMode を ALL にしないと、ホストの外から来た問い合わせに応答しません。Pi-holeをDHCPサーバとして使う場合は、67番UDPの公開に加えて cap_add で NET_ADMIN を与えます。ただし掲載例のbridgeネットワークでは、それでもLANのDHCP要求は届きません。bridgeのままならDHCPリレーを置くか、Linuxホストなら network_mode: host にして ports を削除します。ブロックリストはコンテナ内のcronで毎週日曜の未明に自動更新されます。コンテナの起動・停止コマンドの使い分けはDockerコンテナ起動コマンドの使い分けで確認できます。
Ubuntuホストで53番の競合が出たら、systemd-resolved のスタブリスナーを止めます。スタブを止めただけでは /etc/resolv.conf がスタブを指したままでホスト自身が名前解決できなくなるため、3行目で参照先を /run/systemd/resolve/resolv.conf に付け替えます。resolv.conf を独自に管理している環境では、3行目は自分の構成に合わせて読み替えてください。
sudo mkdir -p /etc/systemd/resolved.conf.d
printf "[Resolve]\nDNSStubListener=no\n" | sudo tee /etc/systemd/resolved.conf.d/no-stub.conf
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved
ルータと端末のDNSをPi-holeに向ける設定
ルータのDHCP配布DNSの変更
家中の端末に一括で効かせるには、ルータのLAN側DHCP設定にある「DNSサーバ(プライマリ)」をPi-holeのIPに変えます。端末はDHCPのリース更新時に新しいDNSサーバを受け取るので、すぐ反映させたい場合はWi-Fiをつなぎ直します。
このとき、セカンダリDNSに 8.8.8.8 などの公開DNSを入れてはいけません。複数のDNSサーバの選択・切り替え動作はOSや実装によって異なり、Pi-hole以外へ問い合わせる場合があるため、広告ドメインの問い合わせが公開DNSに流れて素通りします。冗長化したい場合は、後述の2台構成で2台目のPi-holeをセカンダリに指定します。
ホームゲートウェイの機種によっては、DHCPで配るDNSサーバを変更できません。その場合は、ルータのDHCPを止めてPi-holeのDHCPサーバ機能に切り替えるか、次の端末ごとの設定を使います。
端末ごとにDNSを指定する方法
一部の端末だけで試す場合や、ルータの設定を変えられない場合は、端末のDNSサーバを手動でPi-holeのIPにします。
- Windows 11:設定 → ネットワークとインターネット → 接続中のWi-Fiまたはイーサネット → DNSサーバーの割り当て → 編集 → 手動
- macOS:システム設定 → ネットワーク → 接続中のサービス → 詳細 → DNS
- iPhone:設定 → Wi-Fi → 接続中のネットワークの「i」 → DNSを構成 → 手動
ChromeやFirefoxで外部のDoHプロバイダを実際の問い合わせ先として使っている場合は、ブラウザがPi-holeを経由せずに外部のDNSへ直接問い合わせます。広告が消えないときは、まずブラウザ側の設定を確認してください。DoHの仕組みはDNS over HTTPSとは?DoHの仕組みとDoT・DoQとの違いで解説しています。
ブロックの動作確認
設定した端末から、ブロックリストに載っている広告ドメインを引いてみます。192.168.1.10 はPi-holeのIPに置き換えてください。
nslookup doubleclick.net 192.168.1.10
nslookup doubleclick.net
応答が 0.0.0.0 ならブロックされています。続けて管理画面の「Query Log」を開き、その問い合わせが「Blocked」と記録されているかを確かめます。記録が無いときは、問い合わせが届いていないか、プライバシー設定でQuery Logを記録しない設定になっています。
管理画面(http://pi.hole/admin)の使い方
ログインとダッシュボード
Pi-holeをDNSに向けた端末のブラウザで http://pi.hole/admin を開きます。名前で開けない場合は http://<Pi-holeのIP>/admin を、80番が塞がっていた環境では http://<Pi-holeのIP>:8080/admin を使います。v6では管理画面がFTL本体に内蔵されたため、v5で必要だったlighttpdとPHPは入りません。HTTPSにも標準で対応し、自己署名証明書が自動生成されます(v6公開時の公式ブログ)。
ダッシュボードには、総クエリ数、ブロック数と割合、リスト内のドメイン数、問い合わせの多いクライアントとドメインが並びます。v6の設定画面は「Basic」と「Expert」の2モードに分かれており、詳細な項目はExpertに切り替えないと表示されません。
ブロックリスト(Lists)の追加とGravity更新
v5で「Adlists」と呼ばれていた画面は、v6では左メニューの「Group Management」→「Lists」です。リストのURLを入力し、「Add blocklist」で追加します。v6からは許可リストも購読でき、同じ画面から「Add allowlist」で登録します。
追加したリストは、Gravityを更新するまで効きません。メニューの「Tools」→「Update Gravity」か、次のコマンドで反映します。インストール済みの環境では週1回自動で更新されます。
pihole -g
日本のサイトで広告が残る場合も、対象ドメインのリスト未登録、Pi-holeを迂回するDNS設定、ページ本体と同じドメインからの広告配信など、複数の原因が考えられます。リスト不足を確認できた場合は、日本向けの追加リストを検討します。配布が止まったリストも出回っているため、配布元の最終更新日を確かめてから追加してください。リストを増やすほど誤ブロックも増えます。1本ずつ足し、Query Logで副作用を見てから次を足す方が、原因を切り分けやすくなります。
許可リストと拒否リストの登録
特定のドメインだけを通したい、または止めたい場合は「Group Management」→「Domains」で登録します。v5の「Whitelist」「Blacklist」は、v6では「Allowlist」「Denylist」に名称が変わりました。コマンドでも登録できます。
pihole allow example.com
pihole deny ads.example.com
pihole -q example.com
pihole -q は、そのドメインがどのリストに含まれているかを調べるコマンドです。ショッピングサイトの計測リンクやログインが壊れたときは、Query Logでブロックされたドメインを見つけ、pihole -q で出どころのリストを確認してから許可リストに入れます。ブロックを一時的に止めたいときは pihole disable 5m で5分間だけ無効にできます。子どもの端末だけ別のリストを当てたい場合は、同じメニューの「Groups」でグループを作り、「Clients」で対象端末を、「Lists」で適用するリストをそのグループに割り当てます。そのリストは「Default」グループから外しておかないと、ほかの端末にも効きます。
上流DNSとConditional Forwardingの設定
「Settings」→「DNS」の「Upstream DNS Servers」で、Pi-holeが転送する先の公開DNSを選びます。一覧に無いサーバは「Custom DNS servers」に書きます。
同じ画面の「Conditional forwarding」は、指定したLAN内のIPアドレスの逆引きをルータなどへ転送する機能です。ローカルドメイン名も指定した場合は、そのドメインの正引きも転送対象になります。これを設定しないと、ダッシュボードのクライアント欄が端末名でなくIPアドレスで並びます(Pi-hole自身のDHCPやLocal DNS Recordsで名前が取れていれば不要)。有効にし、LANの範囲(例:192.168.1.0/24)、ルータのIP、ローカルドメイン名を入れます。Dockerでは FTLCONF_dns_revServers: 'true,192.168.1.0/24,192.168.1.1#53,lan' の1行で同じ設定になります。
DHCPサーバとLocal DNS Recordsの設定
ルータの配布DNSを変えられない環境では、「Settings」→「DHCP」でPi-holeのDHCPサーバを有効にし、割り当てる範囲とルータのIPを入れます。有効にする前に必ずルータ側のDHCPを止めてください。同じLANにDHCPサーバが2台あると、端末ごとに違うゲートウェイやDNSを受け取り、通信が不安定になります。
「Settings」→「Local DNS Records」では、nas.lan のようなLAN内の名前とIPアドレスの対応を登録できます。ルータに名前解決の機能が無い環境で、NASやプリンタに名前でアクセスしたいときに使います。
v5の解説記事をv6で読み替える対照表
日本語の解説記事にはv5前提のものが多く残っています。v6に上げた後や、新しく入れた環境でv5の手順を見たときは、次の表で読み替えます。Docker環境変数の新旧は公式のv5からv6への移行ガイドに一覧があります。
| 項目 | v5の書き方 | v6の書き方 |
|---|---|---|
| パスワード変更 | pihole -a -p |
pihole setpassword |
| 許可登録 | pihole -w |
pihole allow |
| 拒否登録 | pihole -b |
pihole deny |
| ブロックリスト画面 | Adlists | Group Management → Lists |
| 設定ファイル | setupVars.conf など複数 |
/etc/pihole/pihole.toml |
| Webサーバ | lighttpd+PHP | pihole-FTLに内蔵 |
| Dockerのパスワード | WEBPASSWORD |
FTLCONF_webserver_api_password |
| Dockerの上流DNS | PIHOLE_DNS_ |
FTLCONF_dns_upstreams |
| Dockerの条件付き転送 | REV_SERVER* |
FTLCONF_dns_revServers |
| 2台の設定同期 | gravity-sync | nebula-sync(いずれも非公式) |
設定はv6から pihole.toml に一本化され、管理画面、コマンド、APIなどから設定できます。ただし、環境変数で指定した項目は読み取り専用となり、管理画面やCLIから変更できません。また、設定項目によってはAPIや管理画面からの変更が制限されます。コマンドで変える場合は sudo pihole-FTL --config dns.dnssec true のように項目名を指定します。見落としやすいのは、v6が既定で /etc/dnsmasq.d/ の設定ファイルを読まなくなった点です。v5で独自のdnsmasq設定を置いていた場合、アップグレード後はその設定が読み込まれません。Dockerでは、独自設定を置いたホスト側ディレクトリをコンテナの /etc/dnsmasq.d にマウントし、さらに FTLCONF_misc_etc_dnsmasq_d: 'true' を設定します。掲載の最小Compose構成には、このマウントは含まれていません。
上流DNSの再帰解決と暗号化の設定
Pi-holeは、ブロックしなかった問い合わせを上流のDNSへ平文で送ります。特定の公開DNS事業者に問い合わせ履歴を集めさせたくないならUnbound、自宅から上流までの経路を暗号化したいならdnscrypt-proxyを足します。Unboundでは権威DNSサーバとの通信が平文のまま残ります。dnscrypt-proxyでは、選んだ事業者に問い合わせ内容が渡ります(後述の設定例は1社を指定しますが、複数のリゾルバに分散する設定もできます)。守りたいものに合わせてどちらかを選んでください。
Unboundによる上流DNSの再帰解決設定
以下はPi-holeとUnboundを同じDebian/Ubuntu系OSへ直接インストールする構成です。Docker版にはそのまま適用できません。設定ファイル全文とopenresolvへの対応はPi-hole公式のUnbound構築ガイドを参照してください。
sudo apt install unbound
/etc/unbound/unbound.conf.d/pi-hole.conf に公式ガイドの設定を置き、127.0.0.1 の5335番で待ち受けさせます。サービスを再起動したら、DNSSECの検証が働いているかを確かめます。DNSSECの仕組みはDNSSECとは?DNSの安全性を守る仕組みで解説しています。
sudo service unbound restart
dig fail01.dnssec.works @127.0.0.1 -p 5335
dig +ad dnssec.works @127.0.0.1 -p 5335
最初のdigコマンドが SERVFAIL、次のdigコマンドが NOERROR で flags に ad が付けば正常です。最後に管理画面の「Settings」→「DNS」で他の上流サーバのチェックをすべて外し、「Custom DNS servers」に 127.0.0.1#5335 を入れます。Debian Bullseye以降では openresolv がUnboundの設定を書き換えて誤動作を起こすことがあるため、公式ガイドにある無効化の手順も合わせて行ってください。
dnscrypt-proxyによる上流DNSのDoH設定
Pi-hole本体には上流をDoHやDoTで暗号化する機能がありません。古い解説記事はCloudflareの cloudflared を使う手順を載せていますが、公式のcloudflaredガイドには、この手順が頼るproxy-dns機能が2025年11月に非推奨になり、2026年2月2日より後に更新した cloudflared ではガイドどおりに動かないと警告が出ています。新規の導入は推奨されていません。
代わりに公式が案内しているのが dnscrypt-proxyのガイドです。Debian 13(Trixie)とUbuntu 25.04以降は公式パッケージで入ります。
sudo apt update
sudo apt install dnscrypt-proxy
sudo systemctl edit dnscrypt-proxy.socket
開いたoverrideファイルに次を書き、53番を使うPi-holeとぶつからないよう 127.0.0.1 の5053番で待ち受けさせます。
[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5053
ListenDatagram=127.0.0.1:5053
/etc/dnscrypt-proxy/dnscrypt-proxy.toml では listen_addresses = [] とし、server_names に使う上流(例:['cloudflare-security'])を書きます。最後にPi-holeの上流をdnscrypt-proxyへ向け、3つのサービスを再起動します。
sudo pihole-FTL --config dns.upstreams '["127.0.0.1#5053"]'
sudo systemctl restart dnscrypt-proxy.socket
sudo systemctl restart dnscrypt-proxy.service
sudo systemctl restart pihole-FTL.service
Docker版のPi-holeでは、FTLCONF_dns_upstreams でdnscrypt-proxyを動かすコンテナやホストのアドレスを指定します。環境変数で指定した上流は管理画面から変えられない点に注意してください。
Pi-holeのアップデート・バックアップ・2台構成
アップデートとアンインストールのコマンド
直接インストールした環境は、次の1行でCore、FTL、Webをまとめて更新します。公式の更新手順は、事前にCore・FTL・Webそれぞれのリリースノートを読むよう求めています。v5からv6への更新は元に戻せない一方向の操作なので、v5環境は先に設定を書き出してから上げてください。
pihole -up
Dockerでは、コンテナ内の pihole -up と pihole -r が無効になっています。新しいイメージを取得してコンテナを作り直します。設定はボリュームの ./etc-pihole に残るので、作り直しても消えません。
docker compose pull
docker compose down
docker compose up -d
やめるときは pihole uninstall を実行します。途中で依存パッケージを削除するか一つずつ尋ねられますが、公式は「迷ったら残す」よう案内しています。OSが必要とするパッケージが含まれることがあるためです。アンインストールの前に、ルータの配布DNSを元に戻しておかないと、家中の端末が名前解決できなくなります。
Teleporterによる設定のバックアップと復元
v6では、管理画面の「Settings」→「Teleporter」で設定一式をZIPに書き出し、別の機器や再インストール後の環境へ読み込めます。SSHで操作する場合や、cronで定期的に書き出したい場合は、FTLのコマンドを使います。
sudo pihole-FTL --teleporter
sudo pihole-FTL --teleporter pi-hole_backup.zip
1行目は現在のディレクトリにアーカイブを作ってファイル名を表示し、2行目は指定したアーカイブを読み込みます。ファイル名は1行目で表示された名前に置き換えてください。管理画面から読み込む場合は、設定本体、DHCPのリース、Groups、Lists、Domains、Clientsのうち復元する項目を選べます。SDカードで動かしているRaspberry Piは、カードが壊れると設定ごと失われます。アーカイブはPi-holeとは別の機器に保存します。
Pi-holeの2台構成によるDNSの冗長化
1台だけの運用では、再起動や更新のたびに家中の端末が名前解決できなくなります。2台目のPi-holeを別の機器に立て、ルータの配布DNSのプライマリとセカンダリに2台のIPを並べれば、片方が止まっても名前解決が続きます。DHCPサーバ機能を使う場合は、どちらか1台だけで有効にしてください。
Pi-holeには2台の設定を同期する公式機能がありません。v6で使われているのは、Pi-holeのAPIを使って設定を複製する非公式ツールのnebula-syncです。Teleporterによる全体同期と、項目を選んだ部分同期に対応し、cronの書式で定期実行できます。DHCPを片方だけで有効にする構成では、全体同期でDHCP設定まで複製しないよう、部分同期で同期対象を限定します。v5時代の記事が勧めるgravity-syncはv5専用で、リポジトリもアーカイブ済みのため、v6では使えません。
Pi-holeとAdGuard Homeの比較と選び方
Pi-holeの代わりとしてよく挙がるのが、同じDNSシンクホール方式のAdGuard Homeです。広告とトラッカーをドメイン単位で止める点、ブロックリストを自分で選べる点、DHCPサーバを内蔵する点、端末ごとに設定を変えられる点は共通です。ただしAdGuard HomeのDHCPサーバ機能は、Windows上では使えません。違いは、標準で持っている機能と対応OSにあります。
| 比較軸 | Pi-hole v6 | AdGuard Home |
|---|---|---|
| 最新版(2026年10月15日) | Core v6.4.3 | v0.107.79 |
| 公式の配布先OS | Linux 7種とDocker | Linux・Windows・macOS・FreeBSDほか |
| 上流の暗号化 | dnscrypt-proxyなど別ソフト | DoH・DoT・DoQ・DNSCryptを標準 |
| DoH・DoTサーバとして配信 | 別ソフトが必要 | 標準 |
| 管理画面のHTTPS | 標準(v6から) | 標準 |
| セーフサーチの強制 | なし | あり |
| DNSプロセスの非root実行 | 可(必要なcapabilityを付与) | 可(権限・ポート設定が必要) |
AdGuard Homeの比較表はAdGuard HomeのREADMEにもありますが、Pi-holeの管理画面のHTTPSを「lighttpdの手動設定が必要」としている行はv5時代の記述です。v6では内蔵Webサーバが自己署名証明書を自動で作るので、この行はPi-holeの欠点ではなくなりました。「root権限なしでの実行」もPi-holeを不可としていますが、直接インストール版の pihole-FTL はsystemdの設定で pihole ユーザーとして動き、必要な権限だけをcapabilityで受け取ります。比較記事を読むときは、どちらの版を前提にしているかを確かめてください。
選び方の結論は次のとおりです。Linux機を常時動かせない、WindowsやMacで直接動かしたい、家族の端末に暗号化DNSやセーフサーチを標準機能で提供したい、のいずれかに当てはまるならAdGuard Homeを選びます。Raspberry Piなどで既にLinuxを動かしていて、Unboundで再帰解決させたい、v5時代から蓄積されたブロックリストや解説を使いたいならPi-holeで困りません。同じ機器で両方を動かすと53番を取り合うので、試すなら別の機器で動かします。
Pi-holeが向かない環境と失敗しやすい設定
SDカードで動くRaspberry Piは、書き込みの多いクエリログでカードが傷みやすい機器です。家族が日常的に使う回線で運用するなら、SSDから起動するか、前章の2台構成を取ってください。予備を用意できないなら、ルータの配布DNSは変えず、自分の端末だけをPi-holeに向けます。
職場や学校のネットワークで管理者の許可なくDNSやDHCPを変えるのは避けてください。DHCPサーバの重複はネットワーク全体を止める原因になり、Pi-holeの問題では済みません。
また、Pi-holeは広告を「表示されにくくする」道具であり、マルウェア対策の代わりにはなりません。ブロックリストに載る前の悪性ドメインは通しますし、IPアドレスに直接つなぐ通信やDoHで外部に問い合わせる通信は見えません。
Pi-holeの使い方でよくある質問
Pi-holeでYouTubeの広告はブロックできますか?
ほぼできません。YouTubeの動画広告は本編の動画と同じ配信ドメインから届くため、ドメイン単位で止めると動画そのものが再生できなくなります。YouTubeの広告はブラウザ拡張やYouTube Premiumで対処します。
日本のサイトの広告が消えないのはなぜですか?
リストへの未登録だけでなく、DNS設定による迂回や、本編と同じドメインからの広告配信も原因になります。Query Logで対象の問い合わせとブロック状況を調べ、リスト不足を確認した場合に追加を検討します。「Group Management」→「Lists」に日本向けのリストを追加し、pihole -g で反映してください。
管理画面のパスワードを忘れたらどうすればいいですか?
Pi-holeを動かしている機器で sudo pihole setpassword を実行して設定し直します。本記事のDocker構成では、Composeの FTLCONF_webserver_api_password を変更し、docker compose up -d でコンテナを再作成します。環境変数でパスワードを固定していない場合は、docker exec -it pihole pihole setpassword で変更できます。
外出先のスマートフォンでもPi-holeは使えますか?
自宅のPi-holeへVPNで接続し、VPN越しのDNSサーバにPi-holeを指定すれば使えます。Pi-holeのDNSをインターネットに直接公開するのは、攻撃の踏み台にされるため避けてください。VPNの構築はWireGuardとは?仕組み・設定方法・OpenVPNとの違いを参照してください。
Pi-holeを入れたらサイトが開けなくなりました。どうすればいいですか?
まず pihole disable 5m でブロックを5分止め、開けるようになるか確かめます。開けるならブロックリストが原因なので、Query Logでブロックされたドメインを探して許可リストに入れます。止めても開けない場合は、Pi-holeの応答と上流DNSを確認します。名前解決が正常なら、回線・接続先サイト・ブラウザ側の問題も調べてください。