CUBE SUGAR CONTAINER

技術系のこと書きます。

Raspberry Pi で AdGuard Home を動かす

AdGuard Home は、インターネット広告や端末のトラッキングなど 1 をブロックすることを目的とした OSS の DNS サーバ (プロキシ) のひとつ。 フィルタリングルールを入れた状態で DNS サーバとして利用することで、端末に依存しないフィルタリング 2 が可能になる。 今回は、そんな AdGuard Home を Raspberry Pi にインストールして試してみた。

使った環境は次のとおり。

$ cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
$ uname -srm
Linux 6.1.0-rpi7-rpi-v8 aarch64

もくじ

下準備

公式のインストールガイドには、AdGuard Home のバイナリをダウンロードして実行する方法が紹介されている。 ただ、それだとアップデートなどの手間がかかると思っていたところ、どうやら snap 3 のパッケージがあるらしい。

なので、まずは snap をインストールする。 また、動作確認用に dnsutils もインストールしておく。

$ sudo apt-get update
$ sudo apt-get -y install snapd dnsutils

snap のインストールガイドに従って再起動する。

$ sudo shutdown -r now

再起動したら、以下を実行して snap の状態を最新にする。

$ sudo snap install core

インストール

あとは snap コマンドで adguard-home をインストールする。

$ sudo snap install adguard-home

セットアップする

インストールが終わると TCP の 3000 番ポートを AdGuard Home が Listen し始める。 これは AdGuard Home の管理用 Web UI が、初期セットアップが終わるまで使うポート番号になる。

$ ss -tlnp | grep 3000
LISTEN 0      4096               *:3000            *:* 

この状態で、Raspberry Pi の IP アドレスの 3000 番ポートにブラウザでアクセスすれば管理用 Web UI が表示される。 Raspberry Pi をデスクトップ環境で使っているなら、単純にインストール済みのブラウザで http://localhost:3000/ を開けば良い。

初期設定のウィザードでは動作するネットワークインターフェイスやポート番号などを聞かれるので好みで変更しておく。 特にこだわりがなければ何もいじらなくても良いと思う。

初期設定が終わると DNS 用の 53 番ポートを Listen し始める。 また、管理用の Web UI が Listen するポートも、初期設定で指定したものに変化する。

$ sudo ss -tlnp | grep AdGuard | grep 53
LISTEN 0      4096               *:53              *:*    users:(("AdGuardHome",pid=679,fd=15))
$ sudo ss -ulnp | grep AdGuard | grep 53
UNCONN 0      0                                *:53               *:*    users:(("AdGuardHome",pid=679,fd=14))

デフォルトのフィルタリングルールとして AdGuard DNS filter というルールが入っている。 そのルールが適用されていることを確認する。

まずは www.google.com など、普段から利用するドメイン名が正引きできることを確認する。

$ dig +short www.google.com @127.0.0.1
172.217.175.4

次に、広告配信に使われているドメインが 0.0.0.0 に解決されることを確認する。 この動作は設定から変更が可能で NXDomain にすることなどから選べる。

$ dig +short doubleclick.net @127.0.0.1
0.0.0.0

なお、既存のサーバとして DMZ などで動作している場合にはオープンリゾルバにならないように注意する。

設定を調整する

あとは自分が意図した動作になるように設定を調整していく。 たとえば DNS のアップストリームサーバを変更したり、フィルタリングルールを追加・変更する。

AdGuard が公式で提供しているフィルタリングルールは以下に掲載されている。

adguard.com

一般的なユースケースで利用頻度が高そうなのは以下あたり。

  • Japanese filter
  • Mobile ads filter

フィルタを利用することで、自身が日頃から使っているサービスに何らかの問題が生じる可能性がある点には留意が必要になる。

一通りの設定が終わったら、あとは自身のネットワークで Raspberry Pi を DNS サーバとして利用する。 一般的なネットワークであれば、ルータの DHCP サーバで Raspberry Pi の IP アドレスを DNS サーバとして配布するように設定する。

参考文献

github.com

https://snapcraft.io/docs/installing-snap-on-raspbian


  1. アダルトサイトの閲覧やマルウェアの通信を阻害する目的でも用いられる場合がある
  2. 一般的には DNS フィルタリングと呼ばれている
  3. https://snapcraft.io/