【Pi-hole】バックアップとリストア

> [Pi-hole](https://pi-hole.net/) を [SBC](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%83%9C%E3%83%BC%E3%83%89%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)（NanoPi NEO2）で動かせるようになったので、設定をバックアップしたい。

[「"pi-hole" バックアップ」でググって](https://www.google.com/search?q=%22pi-hole%22+%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97)も、Pi-hole での広告ブロックを讃称するだけだったり、インストール方法の記事ばかりだったので、自分のググラビリティとして。

:::note info
Pi-hole とはローカル・ネットワーク向けの [DNS サーバー](https://ja.wikipedia.org/wiki/DNS%E3%82%B5%E3%83%BC%E3%83%90)の一種です。ドメイン名と IP アドレスの名前解決をする際の **DNS キャッシュ機能とブロック機能を提供します**。詳しくは TS; DR 参照。
:::

## TL; DR <sub><sup><sub><sup>（今北産業）</sup></sub></sup></sub>

1. **バックアップ**は、Pi-hole の GUI（管理画面）の [`Settings`] - [`Teleporter`] - [`Backup`] ボタンを押すとアーカイブのダウンロードが始まる。
    - 作成されるファイル: `pi-hole-<pi-hole のホスト名>-teleporter_<YYYY-MM-DD_hh-mm-ss>.tar.gz`
1. **リストア**は、同じ画面の [`Restore`] にある `File input` でバックアップ・ファイルを指定して、リカバリしたい項目にチェックを入れて [`Restore`] ボタンを押す。
1. バックアップのアーカイブ（`.tar.gz`）に含まれるファイル。
    1. whitelist.exact.json
    1. whitelist.regex.json
    1. blacklist.exact.json
    1. blacklist.regex.json
    1. adlist.json
    1. domain_audit.json
    1. group.json
    1. client.json
    1. domainlist_by_group.json
    1. adlist_by_group.json
    1. client_by_group.json
    1. setupVars.conf
    1. dhcp.leases
    1. custom.list
    1. pihole-FTL.conf
    1. etc/hosts
    1. dnsmasq.d/06-rfc6761.conf
    1. dnsmasq.d/01-pihole.conf

## TS; DR <sub><sup>（Pi-hole とは）</sup></sub>

Pi-hole とは、Raspberry Pi などの [SBC](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%83%9C%E3%83%BC%E3%83%89%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF) でも動かせる、ローカル・ネットワーク向けの [DNS サーバー](https://ja.wikipedia.org/wiki/DNS%E3%82%B5%E3%83%BC%E3%83%90)の一種です。ドメイン名と IP アドレスの名前解決をする際の、**キャッシュ機能とブロック機能を提供します**。

### ローカル DNS サーバーとして

ネットワーク内で Pi-hole を立ち上げると、クライアント側（ネットワーク内のデバイス側）で Pi-hole を DNS サーバーとして指定できるようになります。

具体的には、クライアント側のネットワーク設定で `TCP/IP` の DNS サーバーのアドレスを Pi-hole の IP に指定します。すると、クライアントは Pi-hole にドメイン名の名前解決をリクエストするようになります。Google の 8.8.8.8 や、Cloudflare の 1.1.1.1 を指定されたことがある方も多いのではないでしょうか。

また、ルーターの DHCP の設定で DNS も設定できるタイプであれば、クライアント側で設定しなくてもルーター側で設定された DNS が使われるようになります。

初回の名前解決自体は外部の DNS サーバーに問い合わせますが、それらをキャッシュする（外部への通信量が減る）ことで、ローカル・ネットワーク全体の速度向上が期待できます。

### `hosts` サーバーや DHCP サーバーとして

Pi-hole の主な機能は DNS サーバーなのですが、[hosts](https://ja.wikipedia.org/wiki/Hosts) 機能と DHCP サーバー機能も持っています。

:::note info
**hosts 機能とは、簡易 DNS のことです**。
厳密には、ローカルに保存されているテキスト・ファイル（`hosts` ファイル）を参照することで外部に問い合わせずに名前解決するもので、どの PC にも実装されています。
例えば自身のマシンにアクセスする際、ホスト名に `localhost` を使うことがあると思いますが、PC 内の `hosts` ファイルに `127.0.0.1 localhost` という割り当てがされているためです。つまり、`hosts` ファイルに `127.0.0.1 hoge.fuga` という記載をしておくと `http://hoge.fuga/` で `127.0.0.1` にアクセスできるということになります。
そして Pi-hole の `Local DNS` 機能も `hosts` と同じ機能を提供するものです。
:::

Pi-hole の `Local DNS` 機能を使うと、クライアントごとに `hosts` ファイルを設定しなくても同じ要領で名前解決できます。通常の `hosts` との違いは `DNS` だけでなく `CNAME` も指定できることです。

Pi-hole における `CNAME` はドメイン名（ホスト名）のエイリアス機能です。つまり `hoge.com example.com` と設定すると `hoge.com` のアクセスを `example.com` に転送させることができます。

:::note warn
注意点として、`CNAME` は `http` 接続の場合のみ正常に動作します。`https` 接続の転送はうまく動作しません。例えば `bing.com` を `google.com` に設定しても、SSL/TLS のドメイン証明書が一致しないため、不正なドメインとしてブラウザ側でエラーになります。
:::

また、Pi-hole は DHCP サーバ（IP アドレスの自動割り当て機能）も備えています。

家のルーターの DHCP を外部 DHCP に設定できる場合は、MAC アドレスと IP アドレスの自動割り当てを Pi-hole でできます。ルーター側の静的アドレスの割り当て数が足りなかったり、GUI が使いづらい場合に便利です。

:::note warn
注意点として、同一ネットワーク内に複数 DHCP サーバーは立ち上げられません。IP 設定などのネットワーク設定に慣れていなかったり、DNS・NS・DHCP・NAT といった用語の違いがわからない場合は、Pi-hole を DHCP サーバーとして使うことはオススメしません。
:::

### ドメインブロッカーとして

しかし、**Pi-hole の 1 番の特徴は、ドメインのブロック機能**です。

`Block list`/`Allow list`（ブラックリスト、ホワイトリスト）方式で、ドメインの名前解決をさせるか否かを指定できます。

つまり、ブロックリストに記載されたドメインだった場合は、IP アドレスが `0.0.0.0` になるため、そのドメインでは外部サーバーにアクセスできなくなります。

[The Firebog](https://firebog.net/) などの、**有志によるブロック・リストを追加することで、有害と判断された数百万のドメインをブロックできます**。

ポルノサイトはもちろん、個人情報を抜いたりアクセス履歴をトレースするサイトだけでなく、既知の[マルウェア](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%82%A6%E3%82%A7%E3%82%A2)やウィルスをダウンロードさせようとするサイトのドメイン名の名前解決をブロックします。

:::note warn
有志の中には、必要以上に慎重な人もいて Facebook や Amazon などのサイトすらも `Block List`（ブラックリスト）に入れられているので、必要にあわせて適宜 `Allow List`（ホワイトリスト）に追加するなどの工夫が必要です。

筆者も、いくら言ってもリンクを踏んじゃう年寄りがいるのでブロックリストを公開しています。参考になれば幸いです。

- [Block List KEINOS](https://github.com/KEINOS/BlockList) @ GitHub

:::


### Pi-hole のメリットとデメリット

#### メリット

このことから広告ブロックに使われることが多いのですが、一番のメリットは、子供やジッちゃなどの**ネットリテラシーが低いユーザーがいる環境で抜群の効果がある**ことです。

二番目のメリットは、**ネットワーク内からの不審なアクセスやデバイスを発見できること**です。筆者は、中華製のフォトフレームがモバイル・ユーザー向けのログ集計サイトに不明なパケットを送っているのを発見しました。どうやら安いぶん、アフィリエイトで稼いでいるタイプのようでした。

三番目のメリットは、ネットワークが若干軽くなることです。これは（ユーザーのトレース情報などを）、知らないところで外部送信しているパケットが送れなくなるためです。

#### デメリット

とは言え Pi-hole はセキュリティの[銀の弾丸](https://ja.wikipedia.org/wiki/%E9%8A%80%E3%81%AE%E5%BC%BE%E3%81%AA%E3%81%A9%E3%81%AA%E3%81%84)にはなりません。デメリットもあります。

まず、ルーターとしての機能はないため、IP 直打ちの場合は効果がありません。また、クライアント側で DNS サーバーを手動で `8.8.8.8` などに設定されると効果はありません。

一番のデメリットは、**ある程度のネットワーク知識がないとトラブル・シューティングが難しい**ことです。

例えば、とあるサイトが認証やユーザー動向の追跡を別の外部サイトに依存しているものの、その外部サイトがブロックされている場合です。

特に、**電子決済系のサイトで、「ついでに」ユーザーの動向も取っちゃっているサイト**などは、大抵のブロック・リストに含まれているからです（悪名高い [Double Click](https://ja.wikipedia.org/wiki/%E3%83%80%E3%83%96%E3%83%AB%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF_(%E4%BC%81%E6%A5%AD)) に飛ばしてからログイン・ページに飛ばすサイトなどは顕著です）。

### でもメリットの方が大きい

とは言え「n 分間 Pi-hole を停止させる」（ブロックしない）といった設定も Web UI から簡単にできます。

また、Web UI の `Query-log` タブを開いた右上にある `Search` で、自分のマシンの IP アドレスでフィルターすれば自分のマシンがどのサイトにリクエストしたのか確認できます（もちろんログさせない設定もできます）。

このログのページを開いた状態で、正常に動かないページにアクセスしたのち、更新すると、意外なページも一緒にリクエストされて（ブロックされて）いることに驚くでしょう。

Pi-Hole は名の通り Raspberry Pi でも動かせるので、子供や年寄りがいる家庭なら、自身のネットワークの勉強も含めて導入してみるのをオススメします。

児童が多い場所なら、思い切って全てをブロックしておき、リクエストの多いドメインを `Allow List`（ホワイトリスト）に適宜追加する、という運用もありだと思います。

# 動作確認環境

- FriendlyARM NanoPi NEO 2 
- Armbian 22.08.1 (Bullseye with Linux 5.15.48-sunxi64)
- Pi-hole v5.12.1 
    - FTL v5.18
    - Web Interface v5.15