🍳

家のネットワークに広告ブロック用DNSサーバを導入する

導入した背景

子供用のアプリなどで、課金によって広告を消す手段が用意されていないものがあり、どうしても子供が広告を触ってしまってアプリで遊べなくなることが多かったので、Raspberry Piに広告をブロックする機能を持つDNSサーバを導入してみました。

広告ブロックの仕組み

例えばアプリに表示される広告の情報を example.com に取得しに行く場合、DNSサーバに対して example.com のIPアドレスを問い合わせます。通常は正しいIPアドレスをDNSサーバが返却するので広告が表示されますが、広告ブロックのDNSを使用することで正しいIPアドレスの取得ができなくなる結果、広告が表示されなくなるというものになります。 また、広告ブロック以外にも特定の端末に特定のサイトにアクセスをさせないような設定も行えるため、ペアレンタルコントロールが可能です。

環境

  • WiFi機能付き家庭用ルーター
  • IPv6のパススルー機能は停止
  • Raspberry Pi 2 Model B Rev 1.2(レスポンス速度が重要なので有線LAN接続)
  • Raspberry Pi OS Lite - January 11th 2021
  • Docker 20.10.3
  • Docker Compose 1.28.2

インストール

Docker

curl -sSL https://get.docker.com | sh
sudo usermod -aG docker pi

Docker Compose

sudo apt install -y python3-pip
sudo pip3 install docker-compose

docker-compose.ymlの作成

services:
  adguard:
    image: adguard/adguardhome:latest
    container_name: adguardhome
    ports:
      - '53:53/tcp'
      - '53:53/udp'
      - '80:80/tcp'
      - '3000:3000/tcp'
    volumes:
      - /var/lib/adguardhome/work:/opt/adguardhome/work
      - /var/lib/adguardhome/conf:/opt/adguardhome/conf
    restart: always

docker-composeの実行

docker-compose up -d

AdGuard Homeの初期設定

http://raspberrypi.local:3000 にアクセスすることでセットアップ画面が開きます。(ホスト名を変更している場合は適宜読み替えてください) ウィザード形式で進みますが、ログイン用のIDとパスワード以外はデフォルトのままでOKです。

AdGuard Homeの詳細設定

初期設定が終わるとダッシュボードが開きます。 今回私が行った設定を載せておきます。

設定 > 一般設定

  • AdGuardブラウジングセキュリティ・ウェブサービスを使用する → チェック付ける
  • AdGuardペアレンタルコントロール・ウェブサービスを使用する → チェック付ける
  • ログを有効にする → チェック外す(速度重視のため)

設定 > DNS設定

  • DNSサーバ設定 > 頻度制限 → 0
  • DNSキャッシュ設定 > キャッシュサイズ → 20971520

フィルタ > DNSブロックリスト

WiFiルータの設定変更

DHCPで配布するDNSサーバのIPアドレスを変更

Raspberry PiのIPアドレスが 192.168.0.99 だとすると、キャプチャのようにDNSサーバの設定を変更します。

端末で広告がブロックされるか確認

上記設定が完了してもしばらくはDNSの設定が更新されないので、WiFiをOFF→ONにするなどしてから確認を行います。

まとめ

AdGuard HomeをRaspberry Piにインストールして広告が表示されない家庭内ネットワークを構築してみました。特にレスポンスが悪くなったということもなく非常に快適です。 本文では取り上げませんでしたが、ブロックリストの問題で意図せず機能しなくなってしまったサイトがあったので、そういったものは個別に許可リストに追加して運用しています。

Have a happy tech life!

デザイナー/フロントエンドエンジニア。