インターネット
 Computer >> コンピューター >  >> ネットワーキング >> インターネット

Pi-Hole徹底レビュー ― DNSレベルで広告を完全ブロックするネットワークフィルター

現代のインターネットは、かなり鬱陶しい場所です。文章を読んだり動画を見たりといった何気ない行為でさえ、「広告」として知られる宣伝メッセージに何度も中断されます。広告が関連性が高く、タイミングが適切で、押しつけがましくないものならまだしも、人工知能やディープラーニングなどのバズワードがいくら進化しても、そのどれでもないのが現状です。さらに言えば、プライバシーの問題もあります。

広告を配信する側とブロックする側の攻防は今も続いており、攻撃的な「目の前に突きつける」広告モデルに反発する人が増えるにつれ、少しずつエスカレートしています。多くの場合、ブラウザに広告ブロック拡張機能を入れておけば十分ですが、それではブラウザ企業の方針に左右され、すべてのブラウザやOSでうまく機能するとは限りません。そこで有効なのが、広告サーバーへのネットワークリクエストを根本から遮断するという解決策であり、それを実現するのがPi-Holeです。今回はこれを詳しく見ていきます。

Pi-Hole徹底レビュー ― DNSレベルで広告を完全ブロックするネットワークフィルター

Pi-Holeとは何か

Pi-Holeは、インターネット広告主にとっての「ブラックホール」です。広告配信と特定されたドメインへのDNSリクエストをブロックするソフトウェア群であり、ブラウジングはもちろん、あらゆるインターネット通信から広告を排除できます。これはネットワークレベルでの解決策なので、理論上はあらゆる場面で機能します。メリットはノイズの削減だけではなく、通信量の減少やプライバシー保護の向上なども含まれます。

この仕組みに興味を持った私は、実際にPi-Holeをセットアップしてみることにしました。一般的にPi-Holeはアプライアンスとして使うことを想定したツールです。名前の由来の通り、安価なRaspberry Piを用意してPi-Holeをインストールし、ネットワークのフィルターとして運用するのが定番です。ここに最初の課題があります。正しく設定するには、ある程度のネットワークの知識が必要になるのです。Pi-Holeによる完全なソリューションは、次の3つの要素で構成されます。

  • Pi-Holeを動かすデバイスの準備 ― ネットワーク上の専用マシンでも構いませんし、Linuxが動作する任意のマシンにPi-Holeを設定することも可能です。例えばLinuxのノートPCやデスクトップが数台あれば、それぞれを独立したネットワークフィルターにすることもできます。
  • Pi-HoleをDNSサーバーとして設定 ― 私たちはIPアドレスではなくドメイン名を使ってウェブを閲覧します。人間にとっては「1.2.3.4」のような数字の羅列よりも、dedoimedo.comやexample.comのような名前のほうが覚えやすいからです。この変換を行うのがドメインネームシステム(DNS)です。Pi-Holeはこの段階でフィルタリングルールを適用でき、広告主のものと判断したアドレスへのリクエストを破棄することで、そのコンテンツが一切表示されないようにします。もちろん、誤検出(false positive)が発生する可能性もあります。
  • 他のデバイスのDNSサーバーをPi-Holeに向ける ― これにもネットワークの知識が必要ですが、OSは問いません。Pi-Hole本体はLinuxである必要がありますが、DNS設定さえ変更すればどんなマシンでもPi-Hole経由になり、以降はPi-Holeが仲介役としてネットワークリクエストをフィルタリングします。

つまり、以上の手順には専門知識が求められる点を忘れないでください。この種のソリューションは、プラグ&プレイのように気軽に導入できるものではありません。ただし、詳しい友人がいれば代わりに設定してもらえるかもしれません。実際にどの程度簡単なのか、複雑なのか、続けて見ていきましょう。

インストールウィザード

スクリプトをダウンロードして実行すると、比較的わかりやすいテキストベースのウィザードが起動します。KDE neon上で実行したところ、GitHubから取得される独自コンポーネントを除けば、システムリポジトリのソフトウェアのみがインストールされました。

Pi-Hole徹底レビュー ― DNSレベルで広告を完全ブロックするネットワークフィルター

Pi-Hole徹底レビュー ― DNSレベルで広告を完全ブロックするネットワークフィルター

Pi-Hole徹底レビュー ― DNSレベルで広告を完全ブロックするネットワークフィルター

次に、使用するDNSをPi-Holeに教える必要があります。例えば自宅のルーター(Linuxシステムなら通常192.168.1.1や192.168.2.1など)を指定できます。systemdが普及した現在、この辺りの挙動は少し理解しづらくなっていますが、それは後ほど。GoogleやCloudflareなど既存の公開DNSを選択することも可能です。私はまず自分のカスタム設定から試してみることにしました。

Pi-Hole徹底レビュー ― DNSレベルで広告を完全ブロックするネットワークフィルター

他の広告ブロッカーと同様、Pi-Holeはリスト(ブロックリスト)を使って広告を遮断します。これがこのソリューションの最大の強みであると同時に弱点でもあります。リストが最新でなかったり、不正確・低品質だったりすると、ブロック漏れや、正当なドメインまで拒否してしまう誤検出が起こり得るからです。とはいえ、これはブラウザ拡張機能による広告ブロックと本質的には変わりません。ただ、より徹底的で、その分攻撃的だと言えます。多くのブラウザ拡張はサードパーティドメインにのみルールを適用するため、期待通りのサイトが壊れる可能性は比較的低いのです。一方Pi-Holeは「確実にブロックする」設計のため、正規のサイトまで読み込めなくなることもありえます。

Pi-Hole徹底レビュー ― DNSレベルで広告を完全ブロックするネットワークフィルター

Web UIがあるのも魅力的です。有効にして設定しました。

Pi-Hole徹底レビュー ― DNSレベルで広告を完全ブロックするネットワークフィルター

これで完了です。Pi-Holeがインストール・設定され、すぐに使えるはずでした。

うまく動いたのか?

いいえ、動きませんでした。インターネットに接続できず、名前解決に失敗します。ローカルシステム(neon)は自分自身をDNSとして参照しており(正確には、インストールされたPi-Holeがルーターを参照する構成)、しかしPi-Holeが名前解決サービスを提供していないようでした。

この時点での問題は、インターネットに接続できないため、答えを探したければ別のマシンが必要になることです。まずPi-Holeをアンインストールしてみると、これはシンプルでクリーンな方法で、接続は即座に復旧しました。再インストールしても結果は同じでした。

そこでコマンドラインからの確認を試みました。Pi-Holeには、有効化・無効化、名前解決サービスの起動、ステータス確認などを行うコマンドがいくつか用意されています。調べてみると、pihole-FTLというコンポーネントに問題があるようでした。

pihole enable
  [i] Enabling blocking
  [✗] pihole-FTL: no process found
  [✓] Pi-hole Enabled

pihole-FTLを実行しようとしましたが、起動しません。どうやらsudoが必要だったようです。オンラインのドキュメントを見ても、セットアップ時のエラーについてはあまり詳しく書かれていません。ともあれ、最初の関門は突破できたようです。

pihole-FTL
FATAL: Opening of FTL log (/var/log/pihole-FTL.log) failed!
        Make sure it exists and is writeable by user neon
sudo pihole-FTL
FTL started!

しかし、それでもインターネットには繋がりません。DNSサービスがまだ停止しているのだと思い、再起動を試みました。

pihole restartdns
  [✗] Failed to start pihole-FTL.service: Unit pihole-FTL.service not found.

エラー内容から、FTLサービスを起動するためのunitファイルが存在しないか、壊れていると推測しました。ネットで検索したところ、サービスファイルを修正する必要があることが判明。/etc/init.d/pihole-FTL内の、FTLを呼び出している以下の行を:

su -s /bin/sh -c "/usr/bin/pihole-FTL" "$FTLUSER"

次の1行に書き換えます。

/usr/bin/pihole-FTL

この修正後、Pi-Holeはエラーなく起動するようになりました。

sudo pihole restartdns
  [✓] Starting DNS service

広告がブロックされない問題

接続は復旧しましたが、広告は相変わらず表示されています。Pi-Holeはまったくフィルタリングしていません。そこでWeb UIにアクセスして設定を確認・調整しようとしたところ、今度はPi-HoleのアドレスでWebサーバーが応答していません。https://ip-address/adminhttps://pi-hole/adminも反応なしです。

さらにコマンドラインで調査したところ、lighttpdサービスが起動していないことが原因だと分かりました。これでWeb UIがない理由は説明がつきます。またもや魔術的な対処の時間です。しかも、この件についてもドキュメントは乏しいものでした。さらにエラーに遭遇します。

sudo systemctl restart lighttpd.service
Job for lighttpd.service failed because the control process exited with error code.
See "systemctl status lighttpd.service" and "journalctl -xe" for details.

ただし今回はインターネットに接続できていたので、オンラインで検索できました。すぐに原因が判明します。あるスレッドが正解へと導いてくれました。エラーログには解決策を示唆する情報は一切ありませんでした。ここで改めて指摘したいのは、systemdの解読不能な複雑さです。バイナリログの中から情報を探し出さなければならず、しかも見つかった情報は役に立ちませんでした。

実際には、gaminというパッケージが不足していたのです。なぜ依存関係として最初からインストールされないのかは謎ですが、これを導入するとlighttpdは正常に起動し、Web UIが探索できるようになりました。

sudo apt-get install gamin
systemctl status lighttpd.service
● lighttpd.service - Lighttpd Daemon
   Loaded: loaded (/lib/systemd/system/lighttpd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-05-09 15:34:03 CEST; 2s ago
  Process: 19060 ExecStartPre=/usr/sbin/lighttpd -tt -f /etc/lighttpd/lighttpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 19069 (lighttpd)
    Tasks: 6 (limit: 4915)
   CGroup: /system.slice/lighttpd.service
           ├─19069 /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf
           ├─19078 /usr/bin/php-cgi
           ├─19079 /usr/bin/php-cgi
           ├─19080 /usr/bin/php-cgi
           ├─19081 /usr/bin/php-cgi
           └─19082 /usr/bin/php-cgi

Pi-Hole徹底レビュー ― DNSレベルで広告を完全ブロックするネットワークフィルター

Web UIへのログインとパスワード

しかし、まだ広告はブロックされていません。ログインを試みて、新たな問題に気づきました。ログや詳細を確認し、設定を変更できる管理ページにアクセスできないのです。ここでもオンラインで検索した結果、コマンドラインからデフォルトパスワードをリセットする必要があることが分かりました。

pihole -a -p

これでWeb UIの設定画面にアクセスできるようになりました。非常に洗練されていて強力なインターフェースです。多数のオプションが用意されており、Pi-Holeを一時的に停止させる機能もあります。問題が発生した際に、DNS設定をいじることなく、フィルタリングだけを一時停止できるのは便利です。

ブロックリストの更新

インターフェースを操作していくうちに、ブロックリストがすべて空であることに気づきました。実はメインページを見れば明らかなのですが、何を探せばいいか分かっていないと気づけません。なぜPi-Holeはリストの更新を促したり、セットアップの一環として自動的に行ったりしないのでしょうか。コマンドラインから手動で更新を実行し、リストを生成させました。

pihole -g -f

Pi-Hole徹底レビュー ― DNSレベルで広告を完全ブロックするネットワークフィルター

さて、今度はうまく動いたのか?

はい、ついに正常に動作するようになりました!Pi-HoleはDNSとしての役割を果たし、トラフィックのフィルタリングも行っています。効果的で、かつ邪魔にならないと言わざるを得ません。記憶違いでなければ、ネットワーク側でわずかなパフォーマンス向上すら感じられました。処理すべきクエリが減り、配信すべきコンテンツが少なくなったためです。実際、何気ないブラウジングだけで全クエリの20%がブロックされました。かなりの数字です。そしてこれは、現代のインターネットの置かれた状況を如実に物語っています。ブロックリストに10万以上のドメインが登録されている事実も、この悲しい現実の一部を語っています。体感できるレイテンシの改善も、これで納得です。

Pi-Hole徹底レビュー ― DNSレベルで広告を完全ブロックするネットワークフィルター

まとめ

最終的にはPi-Holeを稼働させることができましたが、セットアップは決して簡単ではありませんでした。致命的な問題が4〜5個発生し、本来ならどれも起こらないはずのものばかりです。インストールウィザードが個別のチェックを行い、各機能が正常に動作していることを確認できれば防げたはずです。初回起動時にサービスの状態を確認し、問題があればFTLが稼働しているかを自己診断する仕組みがあればよかった。Webサービスについても同様です。さらに、パスワードのリセットやリストの更新も自動化されていれば、体験は格段にスムーズになったでしょう。

プロダクトとしてのPi-Holeは、非常に優れた強力なツールです。その仕事を極めて高いレベルでこなし、高速で、効果的で、堅牢です。Web UIのデザインも秀逸です。配信すべきコンテンツが減り、解決すべきクエリが減ることで、トラフィック面でもメリットがあり、本当に重要なもののパフォーマンスが向上します。セットアップは簡単ではありませんが、不可能ではなく、ネットワークの構成方法には大きな柔軟性があります。Pi-Holeをスタンドアロンの専用機にすることも、家庭内のあらゆるデバイスを一括でカバーすることも可能です。総じて、インターネットが敵に回ったときのための最終兵器と言えるでしょう。試す価値は十分にあります。ただし、熱力学第二法則を思い出してください。「簡単さ」と「複雑さ」を同時に手に入れることはできないのです。

それでは、また。

  1. Linux専用ノートPC「Slimbook Pro2」を購入――日常業務をLinuxだけでこなせるか検証する

    思い切って、かなり大胆なことに挑戦することにしました。まあ、それほど大胆でもないのですが。要するに、「Linuxマシンだけで日々の生産性業務をこなせるのかどうか」を実際に試してみることにしたのです。そのために、14インチのSlimbook Pro2を購入し、現在自宅へ向かっているところです。これは衝動的な決断ではなく、純粋な好奇心に基づくものです。「悪徳企業から距離を置きたい」といった類の動機ではありません。WindowsとLinuxを並行して使うことには満足していますが、同時に、妥協や甘い幻想なしに、現実的で実用的な形でLinuxデスクトップが成功する姿を見たいとも思っています。そこで今回、

  2. コンピューターの未来

    コンピューターとは、ブラウジングしたり、音楽を聴いたり、友達がいるふりをしたり、時には実際の仕事をしたりするために使用するものを意味します。大企業のサーバー、デスクトップ ワークステーション、ノートブック、ネットブック、最後にスマートフォンまで、さまざまな種類があります。一握りのメディア センター、ストリーマー、タブレットを放り込むと、混乱が生じます。そして、すべてのタイプについて、非常に多くの意見と予測があり、すべてが運命論的に 1 つの質問に固執しています。すぐに死ぬのでしょうか? 死が好きな人もいます。 4 分おきに、Firefox がもうすぐ死ぬという記事があります。もちろん、この