paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

pi-holeを試してみる

自宅環境の広告ブロックとしてprivoxyというプロキシを使っているのですが、youtubeの長尺ライブ配信を見ているとストリーミングが止まってしまいます。

これがプロキシのせいなのかはわかりませんが、切り分けとして他の方法を試したいと思います。
というわけでad blocking dnsであるpi-holeを構築してみます。

pi-hole.net

プロキシを入れていた目的はアクセスログ取得と広告ブロックなので機能的にはpi-holeでも満たせそうです。  

環境

privoxyはwsl上に作りましたが、今回はサブ機のLXD上に作ります。

wslだとホスト機からのアクセスしかできなかったので、どの機器からも使えるようにしたかったからです。
(windowsはルーティングの設定が無効になっているのでこのせいかもしれませんが)

インスタンスの作成。

masashi@PC-ubuntu:~$ lxc launch ubuntu: pi-hole
Creating pi-hole
Starting pi-hole
masashi@PC-ubuntu:~$ lxc exec pi-hole -- /bin/bash
root@pi-hole:~# 
root@pi-hole:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.4 LTS
Release:    20.04
Codename:   focal

インストール

ドキュメント通りですがコマンド一発。
後続処理がいろいろあるので少し時間がかかります。

root@pi-hole:~# curl -sSL https://install.pi-hole.net | bash

  [] Root user check

        .;;,.
        .ccccc:,.
         :cccclll:.      ..,,
          :ccccclll.   ;ooodc
           'ccll:;ll .oooodc
             .;cll.;;looo:.
                 .. ','.
                .',,,,,,'.
              .',,,,,,,,,,.
            .',,,,,,,,,,,,....
          ....''',,,,,,,'.......
        .........  ....  .........
        ..........      ..........
        ..........      ..........
        .........  ....  .........
          ........,,,,,,,'......
            ....',,,,,,,,,,,,.
               .',,,,,,,,,'.
                .',,,,,,'.
                  ..'''.

  [i] SELinux not detected
  [i] Update local cache of available packages...

インストールの途中にTUIが出て上位DNSの設定やダッシュボードの利用有無を聞かれます。
DNSはレンタルルータ、ダッシュボードは利用ありにしました。

10分ほどかかりましたがインストール完了です。

ダッシュボードはこんな感じ。
一発でここまで用意してくれるので便利です。

使ってみる

普段使いのPCがwindowsubuntuがあるので両方のDNSを設定。
IPはレンタルルータのdhcpなのですが機器仕様か配布するDNSサーバの指定は出来ませんでした。
(というかdhcpで指定できたかうろ覚えですが、DNSサーバも自動で取得できるので配布しているはず)

それぞれネットワーク設定とresolve.confを設定。
windowsは一応DNSキャッシュを削除しました。

piholeはコンテナ内なのでlxdのプロキシも設定しました。

masashi@PC-ubuntu:~$ lxc config device add pi-hole dns-t proxy listen=tcp:192.168.0.10:53 connect=tcp:10.28.57.18:53 bind=host
Device dns-t added to pi-hole
masashi@PC-ubuntu:~$ lxc config device add pi-hole dns proxy listen=udp:192.168.0.10:53 connect=udp:10.28.57.18:53 bind=host
Device dns added to pi-hole

正引きしてみます。

masashi@PC-ubuntu:~$ dig www.google.com server@192.168.0.10

; <<>> DiG 9.16.1-Ubuntu <<>> www.google.com server@192.168.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5334
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.com.          IN  A

;; ANSWER SECTION:
www.google.com.       205 IN  A   172.217.175.100

大丈夫そうですね。

数日使って

ダッシュボードの数字が結構増えました。

ブラウザのスクショは取っていませんが、広告の表示が一部正引きエラーになったり、まとめサイト系のrssが出なくなったりしたので効果はあるようです。

ちゃんとクエリのログも取れます。
statusでソートしてありますが、許可やブロックしたドメインが確認できます。
この時点ではpi-holeの自身の問い合わせのログしかありませんでした。

ここからログ見れるので楽ですね。
わざわざターミナルに入らなくてもokです。

まとめ

pi-holeの構築と利用でした。
dockerでの構築も考えましたが使いなれているLXDにしました。
サーバとしての普通のインストール方法だとスクリプトを叩くだけで利用可能なので非常にお手軽です。
しかし構築がお手軽でクライアントもDNSサーバを指定するだけなので検証も何もない記事になってしまいました。

また、広告ブロックはブラウザでもadblockも入れているので真の効果の程はわかりませんが、画面がごちゃごちゃにならないのはストレス無くいい感じです。

しかしプログラム勉強用のPC内に作ってしまったので早くサーバを買って移動しないとですね。
(いつも言ってるw)