Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。

ここ何年かインターネット広告は醜くなりました。ラズパイダも僅かとはいえ広告収入の恩恵を受けてきましたから、何が何でも広告はイケないとは思っていません。中には有益な広告があることも事実だからです。

ラズパイダでは、Google広告の18禁広告やアルコール類、ジャンル問わず表現が不快な広告は手動で除外しています。ただ、これもイタチごっこでして、現在は不快な広告はほとんど出ていないと思うのですが、もし不快な広告が表示されていたらごめんなさい。

皆さんも気持ち悪い広告は見たくないと思うでしょうから、広告をブロックしてくれるPi-holeをご紹介します。今回は、デバイス毎に広告ブロックできるようにご紹介します。

これならルーターの設定はイジらないで済みます。

ネットワークなどインフラ系は苦手な人が多いと思いますので、DNSサーバーなどにはあまり細かくは触れていません。記事の手順通りに進めることで設定できるようにご紹介しています。

今回のポイント

この記事では、ルーターをイジることなく、次のようにPi-holeを使用します。

  1. Pi-holeをDNSサーバとしてセットアップする(今回はラズパイをWi-Fi接続)
  2. デバイス毎のDNSサーバをPi-holeのIPアドレスに割り当てる。

例として、いつものようにキャプチャ画像を貼っておきますが、IPアドレスはご自身の環境に置き換えてくださいね。ご紹介通りのIPアドレスで動くとは限りません。

デバイス毎にDNSサーバを経由させて広告をブロックさせるので、設定していないデバイスは従来通りとなります。

デフォルトで運用した結果

とりあえずデフォルトでPi-holeをネットワークにぶら下げても、デフォルトのブロックリストで次のようになりました。

某ニュースサイトの例

どのサイトとは言及しませんが、某ニュースサイトで確かめてみると、赤枠のようになります。しっかりバナー広告が消えていますね。

このラズパイダも同様です。

ラズパイダ

このように、ブロックリストを追加しなくても、デフォルトでそれなりに弾いてくれます。

合わせ技として、WebブラウザBraveで閲覧すると強力です。しかし、Pi-holeの場合はDNSサーバなので、Webブラウザを選ばない点はメリットです。

ネット(ルーター) ←→ Pi-hole ←→ Webブラウザ

今回の環境

使用するRaspberry Piは、消費電力を考えてRaspberry Pi Zero系にします。基本はずっと電源入れっぱなしですからね。

2022年現在、古いZero系はなかなか手に入りません。手に入るのは新しいZero 2Wでしょうか。

Zero2 w

もしも2の性能では勿体ないと思うなら、Zero 1W/WHでもいいですが、OSが32bitしか対応していませんから気をつけましょう。

  • Raspberry Pi OS lite 32bit → Zero 1W/WH
  • Raspberry Pi OS lite 64bit → Zero 2

Zero1 w

当然ながら、Raspberry Pi 4でも構いませんし、3B+でも3A+でもいいでしょう。

Pi-hole : Raspberry Pi のモデルはどれでもOK。有線LANでもWi-Fi接続でもOK。

今回は旬のRaspberry Pi Zero2 Wにしておきます。

Zeroの有線LANなら

Zero系は有線LANポートがありませんから、有線LAN(eth0)で繋ぐならアダプターを使うことになります。

microUSB-BのLANポート付きUSBハブ

USBハブの中にはLANポートが付いている製品もあります。これはmicroUSBで接続するタイプで少しレアです。

同じのはないけど、コレが近いかな。

有線LANで繋いだ方がWi-Fiより安定します。とはいえZero系は元々ギガビットイーサネットには対応していないので、速度的な恩恵はほとんどありません。

利点は安定することと、ケーブルを繋げばネットに繋がる簡便さです。

Pi-holeはいわばDNSサーバのため、キャッシュが効くこともあり、速度の違いは体感できるレベルではないでしょう。Zero系の場合はどちらにしても速度は遅いので、今回はWi-Fiで接続します。

Pi-holeのインストールはRaspberry Pi OS liteから

Pi-holeは、Raspberry Pi OS liteに追加でインストールする形になります。ご存じのようにLite版はGUIがありません。基本はコマンド操作になります。他のPCからSSHで接続すると楽です。

Raspberry Pi のユーザー名はpiholeで設定してしまったのですが、ユーザーグループにpiholeが存在するので、他のユーザー名が良いですね。

インストール後の設定はWebブラウザを使ったWebUI画面で行います。

Raspberry Pi ImagerでRaspberry Pi OS liteをmicroSDカードに書き込んで起動します。

Zero2ならlite 64bitはOK

歯車アイコンの詳細設定ですべて設定しておくと楽です

SSHで接続してインストール

SSHで接続するのに、IPアドレスが分からない場合がありますよね。今回はホスト名を指定したので、IPアドレスを指定しなくても接続できます。

ssh ユーザー名@ホスト名.local

調べて見つけるには、スマホアプリが便利ですよ。

IPアドレスが分かったか、ホスト名で指定してSSHで接続します。

いつものおまじないであるアップデートをしておきます。

sudo apt update && sudo apt full-upgrade

次の1行コマンドでPi-holeをインストールできます。

curl -sSL https://install.pi-hole.net | bash

質問に答える形で設定していきます。

大半はContinueやOK・YESで進めてもらって大丈夫です。

インストール開始

最初に固定IPを決めてねという箇所は、現在割り当てられているIPアドレスをそのまま固定IPにするか、もしくは自分で決めたい場合と選択肢が異なります。

固定IPが必要ですよ

表示されているIPアドレスで良ければYES。自分で決めるならNOで入力します。

Pi-holeの固定IPアドレスを決める

この記事ではPi-holeの固定IPアドレスを例として192.168.0.33として進めます。

最後に確認が出て固定IPの設定は終わりです。今後はこの固定IPをDNSサーバとして指定することになります。

アップストリームDNSプロバイダーをリストから選びます。最初は一番上のGoogleにしておきました。有名なパブリックDNSで、8.8.8.8、8.8.4.4で設定されます。

アップストリームDNSプロバイダー

本来は接続プロバイダが指定するDNSが良いのでしょうけど、一般家庭(グローバルIP買っていない)ではルーターで指定できないのです。もしもプロバイダで指定されているならカスタムから指定します。

Upstream DNS Providers 詳しくはPi-holeのガイドで調べて選んでください。デフォルトが一番上のGoogle Public DNSになっています。

今回はGoogleで設定していきます。

Using upstream DNS: Google (ECS, DNSSEC) (8.8.8.8, 8.8.4.4)

この後、いくつかの質問は全てYes、Continue、includeで進めていけばOKです。

途中、FTLというプライバシーレベル云々という選択肢は、一番上の全てを表示するShow everythingで進めました。

最終画面

最後にIPアドレスと、WebUI画面を出すURL、そしてAdminのパスワードが表示されます。

ここでテキストコピーはできませんが、大丈夫、OKで抜けるとターミナルに戻ります。この最後の画面と同じ内容が表示されているので安心してください。

このターミナル画面でパスワードをコピーしておきましょう。

■Pi 5は8GBモデルがオススメ

各種設定はWebUI画面

実際に設定や確認をするのはWebUI画面からです。決めた固定IPアドレスにadminを付けたURLをWebブラウザに入力します。

http://IPアドレス/admin (またはhttp://pi.hole/admin)

最初の画面ログイン前

左メニューのLoginから早速、ログインします。

先程ターミナルで表示されたパスワードを入力します。パスワードだけの入力です。ID入力はありません。

ログイン後、ダッシュボードにはどれだけクエリーをスキップしたのか分かるようなグラフがあります。

ログイン後

最初は全て0の表示だと思います。

ここでは一旦このままにして、広告ブロックしたいデバイスのDNSを変更してから、再びこの画面を見ると数字が上がっていることが分かります。

DNSの指定を設定する

iPhoneなどのスマホや、PCのネットワーク設定を変更していきます。

例としてMacとiPhoneでご説明します。

iPhone

Wi-Fiの設定内にあるDNSを変更していきます。

iPhoneのDNSを自動から手動で設定する

自動から手動に変更すると、DNSサーバにIPアドレスが入力できるようになります。

先程Pi-holeで設定した固定IP(例では33)を入力して保存します。

これだけです。

注意点として、IPhoneだとIPアドレスのトラッキングを制限がONと共存ができないと思われます。OFFにしないとOFFにしろダイアログが出ます。

Mac

Macだと「ネットワークの環境設定」から詳細で次の画面に入り、DNSタブにPi-holeの固定IPアドレスを追加します。元々あったDNSサーバのアドレスは削除します。

以上です。

他のデバイスも同じようにDNSの構成やDNSサーバの設定などで変更してください。

プライマリDNSとセカンダリDNSとあった場合、どちらもPi-holeの固定IPアドレスを入力するかプライマリDNSだけで構いません。

YouTubeの広告は別の方法でブラックリストとして設定する

最初はブラックリストがデフォルトしか適用されません。YouTubeは特殊なので、インストールした状態では消えていないかと思います。

そこでgithubである更新されているドメインリストを取り込んでブラックリストに追加できるプログラムを利用します。

以下は、SSH接続でZero 2WのPi-holeで作業します。

dockerで構築したPi-holeの場合、Portinerもインストールして、Portainerのコンソール機能からログインして手動で実行&登録してあげると良いでしょう。
もしくはQiitaにあるような「ホストのcronからコンテナ内の対象プログラムを実行する」を参考にしてみてください。

次の方法は実機にインストールしたpiholeにyouTube_ads_4_pi-holeを設定する手順です。

githubからYouTubeの広告をブラックリストに入れるプログラムを入手します。

git clone https://github.com/kboghdady/youTube_ads_4_pi-hole.git

実行後、youTube_ads_4_pi-holeフォルダへ移動する。

cd youTube_ads_4_pi-hole

youtube.shがありますから、中身を変更します。

sudo nano youtube.sh

リポジトリの場所は、$(pwd)とあるので、カレントディレクトリ(今居る絶対パス)になります。任意の場所を指定する場合は、絶対パスで記載してください。

# This need to be chnaged to your actual repo dir on your machine
repoDir=$(pwd)

shファイルに実行権を与えます。(オプションa+xはすべてのユーザーに実行権を与える)

sudo chmod a+x youtube.sh

次に定期的にshファイルを実行するため、cronへ追記します。

sudo crontab -e

crontabのエディタは、nanoは非エンジニアや初心者には使いやすい。

毎時変更する場合(0 */1 * * *)は次のようにcronへ記述します。

0 */1 * * * sudo /home/*ユーザー名*/youTube_ads_4_pi-hole/youtube.sh >/dev/null

毎朝くらいでいいかなと思うので、毎朝4時(0 4 * * *)に設定しました。

0 4 * * * sudo /home/*ユーザー名*/youTube_ads_4_pi-hole/youtube.sh >/dev/null

cronの記述方法は別の記事を参考にしてください。(※ユーザー名の部分は自分のに置き換えてください)

dockerで構築したpiholeの場合、ホスト側からexecで設定してみました。

docker exec -i pihole /home/youTube_ads_4_pi-hole/youtube.sh >> /home/raspida/log/docker-cron.log

スマホから自宅のNextcloud(ラズパイ4)へ繋ぐ ②Wireguard - ラズパイダ 前回の記事の続きです。 NextcloudにWireguardを追加して、スマホからVPNを張った状態でNextcloudとやりとりをします。スマホはiPhoneで試しています。Andoridでも同じです…

スクリプトを実行する前に、sqlite3データベースのwww-dataをpiholeのグループに追加して権限を与えておきます。

sudo usermod -a -G pihole www-data

早速、一度スクリプトを実行しておきます。(Zero系は結構な時間がかかります)

sudo ./youtube.sh

時間がかかりますが、これでブラックリストに登録されます。

ブロック設定ができると、Pi-holeのメニューDomainsにある「Domain management」にリストが追加されていることが分かります。

データベースからの削除方法

もしも不具合が起きたとき、データベースからスクリプトで追加したドメインをすべて削除するコマンドも載せておきます。

/usr/bin/sqlite3 /etc/pihole/gravity.db "delete from domainlist where domain like '%googlevideo.com%' "

sqlite3のエラーは謎

ブラックリストも更新も出来ていますがエラーが最後に出ました。これはコマンドが無いと出ていますから、入っていない??

確かインストール時にインストールするを選んだハズなのにおかしい。

  [✓] Reloading DNS lists
sudo: /usr/bin/sqlite3: command not found
(htmlのソース〜が続く。。。)

splite3を検索してみます。やはり/usr/binには実行ファイルがない。

sudo find / -iname sqlite3
/var/lib/php/modules/7.4/registry/sqlite3
/var/lib/php/modules/7.4/cli/enabled_by_maint/sqlite3
/var/lib/php/modules/7.4/cgi/enabled_by_maint/sqlite3
/usr/lib/python3.9/sqlite3
/usr/share/bash-completion/completions/sqlite3
/usr/share/php7.4-sqlite3/sqlite3

findコマンドオプション-inameは大文字小文字を区別しません。

よく分からないので、aptコマンドのreinstallオプションでインストールし直してみる。やはり入っていない。

sudo apt install --reinstall sqlite3
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Suggested packages:
  sqlite3-doc
The following NEW packages will be installed:
  sqlite3
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,115 kB of archives.
After this operation, 3,086 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bullseye/main arm64 sqlite3 arm64 3.34.1-3 [1,115 kB]
Fetched 1,115 kB in 0s (2,535 kB/s)
Selecting previously unselected package sqlite3.
(Reading database ... 39113 files and directories currently installed.)
Preparing to unpack .../sqlite3_3.34.1-3_arm64.deb ...
Unpacking sqlite3 (3.34.1-3) ...
Setting up sqlite3 (3.34.1-3) ...
Processing triggers for man-db (2.9.4-2) ...

これで再度、youtube.shを実行したところ、エラーは表示されなくなりました。

 [✓] Reloading DNS lists
<!DOCTYPE html><html class="HB1eCd-UMrnmb"><head>(...以下続く)

YouTubeの動画を視聴してみるが・・・バナーしか消えない

ブラックリストに登録できたので、Piholeのメニューからブラックリストを覗くとかなり増えててビックリ。

早速、観てみましょう。

広告の枠だけ見える。

動画開始や途中に挿入される広告は表示されてしまいます。今回の手法と、デフォルトのブラックリストではこれが限界のようです。

YouTubeはPi-holeに加えてWebブラウザBraveなどを使うと確実にブロックできます。

2023年現在、YouTube側も対策しているため、強制的な広告が消えないのもあります。イタチごっこ也。

デバイス毎の設定でお手軽

今回の方法だと、ルーターの設定は一切触りません。あくまでもネットに繋げるデバイス毎に、Pi-holeをDNSサーバと指定してブロックさせています。

ルーターのDHCP機能もそのままで、Pi-holeのDHCP機能はオフのままです。これなら複雑なネットワークの設定もなく、ある程度の広告はブロックできました。

それにWebブラウザは選びません。SafariでもChromeでも大丈夫です。

Pi-holeのキモは、ブラックリストに依ります。ネットでたくさん見つかります。(インストール時のデフォルトのままでも効果はあります)

DNSサーバの設定ができるデバイスであれば一定の効果があります。逆にルーターの設定を変えられれば、大元から遮断できますから、逆にデバイス毎の設定は必要なくなります。

ルーターの場合、DHCP機能をどうするかといったややこしい設定が出てきます。先ずはデバイス毎にPi-holeを試してみてください。

Rレッド Rレッド
Zero2では勿体なかったかなー

Pi-hole:https://pi-hole.net

ソフトウェア/App

Zero/W/WH/2W pihole