はじめに
みなさん、広告ブロックを利用していますか?
私はPCのChromeやiPhoneのSafariでは広告ブロックの拡張機能を利用しています(280blockerやAdGuardなどが有名ですね)。
しかし、iOSやiPad、Androidなどのモバイル版Chromeでは拡張機能が利用できず、広告ブロックができずに困っています。
また、一部の広告ブロック拡張機能は有料だったりと、導入においてハードルがあったりします。
そこで本記事では、TailscaleとPi-holeを組み合わせることで、無料でどの端末でも広告ブロックが効いた快適なブラウジング環境を構築する方法をご紹介します。
この記事で実現できること
- iPad版Chromeなど拡張機能が使えない端末でも広告ブロック
- VPN経由のみ広告をブロックするため、VPNのオンオフで広告ブロックの切り替え
- VPN接続するだけで自動的に広告ブロックが適用される
前提知識
Tailscaleとは
Tailscaleは、簡単にセキュアなVPNネットワークを構築できるサービスです。複雑な設定なしに、デバイス間で暗号化された通信を確立できます。
従来、SoftEtherやWireGuardなどを利用したVPNサーバの構築は複雑で、構築までのハードルが高かったのですが、Tailscaleではアカウント発行こそ必要なものの、インストールから実行までがかなり楽となっています。
Pi-holeとは
Pi-holeは、ネットワークレベルで広告をブロックするDNSサーバーです。広告配信サーバーのドメインをブロックリストに登録し、DNSクエリの段階でブロックすることで、デバイスやブラウザを問わず広告をブロックできます。
ブラウザからブラックリスト、ホワイトリストの追加ができ、簡単に個人ごとの設定を行うことができます。
なぜこの組み合わせが便利なのか
- ブラウザ拡張機能不要: DNSレベルでブロックするため、どんな端末・アプリでも有効
- セキュアな接続: Tailscaleの暗号化通信で安全
- 簡単な運用: 一度設定すればVPN接続のオン/オフだけで切り替え可能
メリット
- 常にどこからでも広告ブロックが利用可能
- 一度設定すれば安定して動作
また、Tailscaleを利用しているため
- 自宅LANのデバイスにも外出先からアクセス可能
- VPNを利用するため、公共Wi-Fiなどでもセキュアな通信が可能
といったメリットもあります。
表記について
本記事では、コマンドを実行する場所を以下のように区別します:
-
server$: 自宅サーバー上で実行するコマンド -
client$: クライアント端末で実行するコマンド
前提条件
- 自宅やVPS等、常時稼働できるLinuxサーバー(本記事では、Ubuntu 24.04.3 LTSを対象として進めています)
- Dockerとdocker-composeがインストール済み
- インストールが済んでない方は、公式サイトなどを参考に導入しておいて下さい。
構築手順
1. サーバー情報の確認
サーバーが接続されている自宅LANのネットワーク範囲(サブネット)を確認します。これは後ほどこのサーバーを経由して自宅内のLANにアクセスするために必要な情報を設定する際に使用します。
server$ ip route | grep -v tailscale
出力例:
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
この例では 192.168.1.0/24 がサブネットです。この値をメモしておきます。
2. Tailscaleのインストール
Tailscaleを動かすため、インストールを行います。基本的には公式サイトを参考に進めていきます。以下のコマンドを実行して、インストールを実行します。
server$ curl -fsSL https://tailscale.com/install.sh | sh
3. Pi-holeのセットアップ
広告をブロックするDNSサーバーであるPi-holeのインストールを行なっています。本記事では、環境を汚さず、簡単に構築できるDockerを利用して構築していきます。
3-1. 作業ディレクトリの作成
ここではホームディレクトリ直下にフォルダを作成していますが、各々好きな場所に置き換えても大丈夫です。
まずはじめに、Pi-holeの設定ファイルを保存するディレクトリを作成し、移動します。
server$ mkdir -p ~/pihole
server$ cd ~/pihole
3-2. Docker Compose設定ファイルの作成
本記事内ではvimを使ってファイル操作を行いますが、慣れていない方はnanoやVS CodeでSSH接続するなど、やりやすい方法に置き換えて下さい。
server$ vim compose.yml
以下の内容を記述します:
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp" # DNS(TCP)
- "53:53/udp" # DNS(UDP)
- "8080:80/tcp" # Web管理画面
environment:
TZ: 'Asia/Tokyo'
WEBPASSWORD: 'your_secure_password_here'
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
restart: unless-stopped
各設定の意味:
-
ports:-
53:53/tcp,53:53/udp: DNS通信に使用する標準ポート。クライアントからのDNSクエリを受け付ける -
8080:80/tcp: Web管理画面用ポート
-
-
environment:-
TZ: タイムゾーン(ログの時刻表示用) -
WEBPASSWORD: 管理画面のログインパスワード (任意のパスワードに変更して下さい。)
-
-
volumes:- Pi-holeの設定とブロックリストを永続化するためのボリューム
-
restart: unless-stopped:- サーバー再起動時に自動的にコンテナも起動する
3-3. Pi-holeコンテナの起動
先ほど記述したcomposeファイルを起動します。初回起動の際にはイメージのダウンロードのために数分かかることがあります。
server$ docker compose up -d
少し時間をおいて、以下のコマンドを実行し、ログを確認して下さい。
server$ docker compose logs -f
こちらのコマンドでログをリアルタイムで表示します。エラーがないか確認してください。
正常に起動したら Ctrl+C でログ表示を終了します。
4. IP Forwardingの有効化
続いて、Linuxカーネルのパケット転送機能を有効にします。こちらの設定では、クライアント(iPadなど)からTailscale経由でサーバーに送られたDNSクエリを、サーバー内のPi-holeコンテナに転送するために必要な項目をセットします。この設定をしないと、正常にPi-holeにクエリが渡されず、ネットにアクセスできないので注意して下さい。
server$ echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-tailscale.conf
server$ echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
server$ sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
出力例:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
5. Tailscaleの起動
Tailscaleを「Subnet Router」モードで起動します。通常のTailscaleは「デバイス同士の1対1接続」のみですが、Subnet Routerモードにすることで、外出先から自宅の他のデバイス(NASやプリンタなど)にもアクセス可能になります。また、このサーバーをTailscaleネットワークのDNSサーバーとして利用するためにも必要な設定です。
server$ sudo tailscale up --advertise-routes=192.168.1.0/24 --accept-dns=false
注意: 192.168.1.0/24 の部分は、手順1でメモした実際のサブネットに置き換えてください。
オプションの説明
--advertise-routes=192.168.1.0/24: TailscaleのSubnet Router機能を使うための設定です。手順1で確認したサブネットを指定します。
--accept-dns=false: サーバー自身はPi-holeのDNSを利用しないという設定です。Pi-holeが正常に起動しない場合でもサーバーがネット通信できるようにするため設定しています。
Subnet Router機能が不要な方は--advertise-routesオプションを外して下さい
後のDNS設定手順で利用するため、以下のコマンドを実行してTailscaleから取得できるIPアドレスをメモしておいて下さい。
server$ tailscale ip -4
出力例:
100.64.1.5
6. Tailscale管理画面での設定
ここからはWebブラウザでTailscaleの管理画面にアクセスして設定を行います。
6-1. Subnet Routeの承認
Subnet Router機能を利用しない方はこちらの手順は不要です
手順5で広告したSubnet Routeの設定を行います。セキュリティのため、初期状態ではオフになっているので、手動で有効化してあげます。
手順
- ブラウザで https://login.tailscale.com/admin/machines にアクセス
- サーバーのマシン名(ホスト名)を探す
- マシン名の右側にある
...(三点リーダー)をクリック -
Edit route settingsをクリック -
Subnet routesセクションに192.168.1.0/24が表示されているので、その右側のApproveボタンをクリック
承認されると、ステータスが「Approved」に変わります。

6-2. DNS設定
Tailscaleネットワーク全体で使用するDNSサーバーとして、自宅サーバーのPi-holeを指定します。この設定により、Tailscaleに接続したすべてのデバイス(iPad、iPhone、PCなど)が、自動的にPi-holeをDNSサーバーとして使うようになります。この設定をすることで、Tailscale接続のオン/オフだけで広告ブロックの有効/無効が切り替わるようになります。
手順
- ブラウザで https://login.tailscale.com/admin/dns にアクセス
-
NameserversセクションのAdd nameserverをクリック -
Custom...を選択 - 手順5でメモしたTailscale IP(例:
100.64.1.5)を入力 Override local DNSを必ずオンにする-
Saveをクリック
Override local DNSについて
この設定をオンにすると、Tailscale接続時にローカルネットワークのDNS設定を無視してPi-holeを使うようになります。
7. クライアントデバイスの設定
各デバイス(iPad、iPhone、PCなど)にTailscaleアプリをインストールし、VPN接続します。手順6-2で設定したDNS設定が、Tailscaleネットワーク全体に適用されるため、デバイスごとの設定は不要です。このとき、必ずサーバでログインしたアカウントと同じアカウントでログインして下さい。
ここまでの設定で、VPNを有効化しているときに広告がブロックれるようになっているはずです。
8. 動作確認
設定が正しく動作しているか確認します。
8-1. DNS設定の確認
クライアントデバイスが実際にPi-holeをDNSサーバーとして使っているか確認します。
client$ nslookup doubleclick.net
正常な場合の出力:
Server: 100.64.1.5
Address: 100.64.1.5#53
Name: doubleclick.net
Address: 0.0.0.0
確認ポイント:
-
Server: 100.64.1.5: Pi-holeが使われている -
Address: 0.0.0.0: 広告ドメインがブロックされている(0.0.0.0に解決されている)
8-2. Pi-hole管理画面での確認
Pi-holeの管理画面にアクセスして、実際にブロックが動作しているか確認します。
アクセス方法
-
ブラウザで以下のURLにアクセス(
100.64.1.5は手順5でメモしたTailscale IPに置き換えてください):http://100.64.1.5:8081/admin -
パスワードを入力してログイン(compose.ymlで設定した
WEBPASSWORD)
8-3. 実際のブラウジングで確認
VPNを繋いだ状態で広告が多いサイトにアクセスして、広告がブロックされているか確認します。
TailscaleによるVPNを繋いでいる間は広告がブロックされており、VPNをオフにすると広告が表示されるようになっているはずです。
これで、VPN接続のオン/オフで広告ブロックが切り替わることが確認できます。
実際に使ってみた感想
実際に使ってみてのメリット、デメリットをまとめてみました。
メリット
- ブラウザごとの拡張機能が不要になり、どのブラウザでも広告がブロックできるようになる
- VPNのオンオフのみで広告ブロックが切り替えられるため、設定変更が容易
- 拡張機能を入れないため、ブラウザの動作が安定
デメリット
- 一部のサイトにおいて、広告ブロックをすると正しく表示されないことがある
- この場合、VPNをオフにするか、Pi-holeの設定からホワイトリストに追加するなどして対応して下さい。
- 常時稼働するサーバーが必要になる
この構成はRaspberry Piなどの小型・省電力サーバーと相性が良いです。
私はIntel N150搭載のミニPCを常時稼働用のサーバとして設置しています。
まとめ
TailscaleとPi-holeを組み合わせることで、以下を実現できました:
- iPad版Chromeなど拡張機能が使えないブラウザでも広告をブロックできた
- Tailscale接続のオン/オフだけで広告ブロックを切り替え可能
最後まで見ていただきありがとうございました。
