Pi-holeの基本設定
インストールが終わればもう即、広告ブロック付きDNSサーバとして機能を始めています。広告ブロックリストは、左メニューの Adlists でそのリストソースを確認できます。
個別にブロックから除外したいドメインは、メニューの Domains でホワイトリストに登録することができます。
ちなみにリスト中の s.youtube.com は、iOSデバイスのYoutubeアプリが閲覧履歴を残すのに使うのだそう。Androidと挙動が異なるとは知りませんでした。
他、実際に使ってみてDNS利用中に何か不都合があれば、左メニューの Disable Blocking で広告ブロックの一時的な無効化も簡単。
LAN内のことはDHCPに聞くように
Pi-holeにもDHCPサーバの機能がありますが今回はこれを使わず、引き続きOpenWrtルータのDHCPサービスがIP配布を担っています。
この場合、Pi-holeにはLAN内のデバイスに関する名前解決が一切できない(わからない)ことから、ローカルネットワークに関する問い合わせ先を、 Settings ページの DNS タブの下方、 Conditional forwarding 項に指定しておきます。
これによりクライアントデバイス名が、素っ気ないIPアドレスからホスト名に変換されるので助かります。
LAN以外のプライベートサブネットからも使いたい
OpenConnect VPN経由でPi-holeをDNSに利用しようとすると(関連記事はこちら)、ローカルサブネット以外からのアクセスに当たることから、次の警告が挙がります。
|
1 |
ignoring query from non-local network |
警告を回避するには、上述の同じ設定 DNS タブの上方にある、 Interface settings を以下の要領で変更します。
|
1 2 3 4 |
Interface settings; Allow only local requests ↓ Respond only on interface eth0 |
/etc/resolv.confの考察
図26の通り、Pi-holeは上流のDNSサーバとしてUnboundの5335番ポートに振り向けられているのですが、ローカルシステム自身のDNSサーバ一体どこを向いているのかと言うと、自身の静的IPアドレスを向いていました。
|
1 2 3 |
resolv11:~$ cat /etc/resolv.conf search lan nameserver 192.168.51.11 |
以前、Alpine LinuxにUnboundを入れた時は localhost だったので、はてさて。
|
1 2 3 |
resolv9:~$ cat /etc/resolv.conf search lan nameserver 127.0.0.1 |
この素朴な疑問がPi-holeのフォーラムにも挙がっていましたが、結局どちらでもよさそう。
どうしてこんな細かいことを確かめたかと言うと、リモートホストからPi-holeホスト自身の名前を解決しようとすると、localhostが返ってきてしまうことでした。
|
1 2 3 4 |
WS-0300u:~$ ping resolv11.lan PING resolv11.lan (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.037 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.046 ms |
結局、 resolv.conf とは無関係なことがはっきりしたので、少し間抜けですがPi-holeの Local DNS Records に自身の名前を記述して解決。
複数DNSサーバの併行運用
既存のUnboundサーバと共に2つのDNSサーバを併行運用したいので、OpenWrtのDHCPサーバのオプションにカンマ区切りで列記します。
|
1 2 |
config dhcp 'lan' list dhcp_option '6, 192.168.51.11,192.168.51.9' |
一方、静的IPアドレスで繋いでいるRaspberry Pi(debian 11)では、 /etc/dhcpcd.conf を次のように半角スペース区切りで列記します(紛らわしい)。
|
1 2 3 4 5 6 7 |
interface eth0 # static address, no DHCP static ip_address=192.168.51.210 static subnet_mask=255.255.255.0 static broadcast_address=192.168.51.255 static routers=192.168.51.5 static domain_name_servers=192.168.51.11 192.168.51.9 |
DNSパフォーマンステストスクリプト
指定したDNSサーバのパフォーマンステストを実行、比較しやすく表示してくれる楽しそうなスクリプト(Great Works!!)を見つけたので、早速試してみます。
必要なパッケージは全てインストール済みなので、 git clone で適当なPCへダウンロード。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
~$ git clone --depth=1 https://github.com/cleanbrowsing/dnsperftest/ Cloning into 'dnsperftest'... remote: Enumerating objects: 7, done. remote: Counting objects: 100% (7/7), done. remote: Compressing objects: 100% (7/7), done. remote: Total 7 (delta 0), reused 2 (delta 0), pack-reused 0 Receiving objects: 100% (7/7), 19.16 KiB | 594.00 KiB/s, done. ~$ cd dnsperftest/ ~/dnsperftest$ ll drwxrwxr-x 8 user user 4096 3月 16 21:53 .git/ -rw-rw-r-- 1 user user 253 3月 16 21:53 Dockerfile -rw-rw-r-- 1 user user 35741 3月 16 21:53 LICENSE.txt -rw-rw-r-- 1 user user 7054 3月 16 21:53 README.md -rwxrwxr-x 1 user user 2540 3月 16 21:53 dnstest.sh* -rw-rw-r-- 1 user user 17161 3月 16 21:53 results.md |
実行の前に、 dnstest.sh の冒頭部分を編集して、対象のDNSサーバを絞ります。
|
1 2 3 4 5 6 7 8 |
PROVIDERSV4=" 1.1.1.1#cloudflare 8.8.8.8#google 103.233.167.10#hkt1 103.233.166.10#hkt2 192.168.51.11#resolv11 192.168.51.9#resolv9 " |
実行の結果から、Pi-hole DNSサーバ( resolv11 )のパフォーマンスは問題無し。既存のUnbound DNSサーバ( resolv9 )がやや不調。こちらもPi-holeへリプレースしようかと思います。
|
1 2 3 4 5 6 7 8 9 |
~/dnsperftest$ ./dnstest.sh test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 Average 127.0.0.53 23 ms 1 ms 55 ms 1 ms 11 ms 1 ms 1 ms 1 ms 1 ms 167 ms 26.20 cloudflare 3 ms 7 ms 7 ms 3 ms 7 ms 7 ms 3 ms 3 ms 3 ms 3 ms 4.60 google 3 ms 7 ms 3 ms 7 ms 3 ms 55 ms 3 ms 15 ms 3 ms 3 ms 10.20 hkt1 3 ms 3 ms 3 ms 3 ms 7 ms 3 ms 3 ms 3 ms 75 ms 871 ms 97.40 hkt2 3 ms 7 ms 3 ms 3 ms 3 ms 3 ms 3 ms 3 ms 1 ms 3 ms 3.20 resolv11 1 ms 1 ms 1 ms 3 ms 1 ms 3 ms 1 ms 1 ms 1 ms 3 ms 1.60 resolv9 1 ms 3 ms 55 ms 3 ms 11 ms 3 ms 1 ms 1 ms 1 ms 319 ms 39.80 |
次回は個別ブロックリスト機能を応用した、簡易ペアレンタルコントロールを試します。










