0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VPNオンで即広告ブロック!TailscaleとPi-holeで実現する快適ネット環境

Last updated at Posted at 2025-10-18

はじめに

みなさん、広告ブロックを利用していますか?
私は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の設定を行います。セキュリティのため、初期状態ではオフになっているので、手動で有効化してあげます。

手順
  1. ブラウザで https://login.tailscale.com/admin/machines にアクセス
  2. サーバーのマシン名(ホスト名)を探す
  3. マシン名の右側にある ...(三点リーダー)をクリック
  4. Edit route settings をクリック
  5. Subnet routes セクションに 192.168.1.0/24 が表示されているので、その右側の Approve ボタンをクリック

承認されると、ステータスが「Approved」に変わります。
Screenshot 2025-10-19 at 2.51.53.png


6-2. DNS設定

Tailscaleネットワーク全体で使用するDNSサーバーとして、自宅サーバーのPi-holeを指定します。この設定により、Tailscaleに接続したすべてのデバイス(iPad、iPhone、PCなど)が、自動的にPi-holeをDNSサーバーとして使うようになります。この設定をすることで、Tailscale接続のオン/オフだけで広告ブロックの有効/無効が切り替わるようになります。

手順
  1. ブラウザで https://login.tailscale.com/admin/dns にアクセス
  2. Nameservers セクションの Add nameserver をクリック
  3. Custom... を選択
  4. 手順5でメモしたTailscale IP(例: 100.64.1.5)を入力
  5. Override local DNS を必ずオンにする
  6. Save をクリック

Screenshot 2025-10-19 at 2.56.53.png

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の管理画面にアクセスして、実際にブロックが動作しているか確認します。

アクセス方法
  1. ブラウザで以下のURLにアクセス(100.64.1.5 は手順5でメモしたTailscale IPに置き換えてください):

    http://100.64.1.5:8081/admin
    
  2. パスワードを入力してログイン(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接続のオン/オフだけで広告ブロックを切り替え可能

最後まで見ていただきありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?