広告 消すべし 慈悲は無い - 広告ブロックDNSサーバ「Pi-hole」を使う

逸般の誤家庭によくある「買い過ぎて余った Raspberry Pi」「押入れにしまい込んだままのPC」「リソースが余っている仮想化環境」の有効活用法として、広告ブロックDNSサーバ「Pi-hole」を紹介。

Pi-hole

広告ブロックの定番 AdBlock やプロキシ系の Proxydomo・Privoxy と比べた場合、導入・動作検証・安定運用までのハードルがやや高めな為、Web広告に対し心の底から

な心境になった事がある人にお勧め。

About Pi-hole

Pi-hole とは?

ソフトウェアやブラウザの拡張機能を入れことなく、クライアントの DNS 設定を変更するだけで Web 広告やトラッキングを防ぐ事が可能な、DNS ベースの広告ブロック DNS サーバです。

メリット

デメリット

前準備

実行環境

24時間365日稼働が前提な為、実行環境を仮想化環境(Hyper-V, VMware ESXi, Proxmox VE 等)で用意する場合を除き、静音&低消費電力な Rapberry Pi もしくは Mini-ITX CPUオンボード 辺りがお勧め。本番運用前の動作検証は VirtualBox で試すのもありかと。中の人は「VirtualBox 上に Raspbian をインストールし、バックグランドで起動させる」と力業な事をしていました。

広告ブロック検証用のWeb広告多めのサイトリスト

具体的なURLやサイト名を出すとアレがナニでトラブルの元なので、「アフィリエイト ブログ 収入 OR 収益で検索すると広告多めなサイトが多数見つかる」とだけ言っておきます。

DNS切り替え可能なツール

インストール

Pi-hole インストール前に

が済んでいる事を確認の上、次の手順に進んでください。

動作環境

Pi-hole を動かす為の動作環境は

Hardware

Pi-hole is very lightweight and does not require much processing power

  • Min. 2GB free space, 4GB recommended
  • 512MB RAM

Despite the name, you are not limited to running Pi-hole on a Raspberry Pi. Any hardware that runs one of the supported operating systems will do!

Software

Pi-hole is supported on distributions utilizing systemd or sysvinit!

Supported Operating Systems

The following operating systems are officially supported:

Distribution Release Architecture
Raspberry Pi OS (formerly Raspbian) Stretch / Buster ARM
Ubuntu 16.x / 18.x / 20.x ARM / x86_64
Debian 9 / 10 ARM / x86_64 / i386
Fedora 30 / 31 ARM / x86_64
CentOS 7 / 8 x86_64

Prerequisites - Pi-hole documentation

と低めですがストレス無く運用する事を考えると、OS は最新のメジャーバージョン、Raspberry Pi ならスペックに余裕のある Raspberry Pi 3 以降、仮想化環境(VMware ESXi, Hyper-V, Proxmox VE 等)で動かすのなら

と余裕持った動作環境を。

インストール

以下の環境でインストールをしています。他のOSでインストールする場合は参考程度にしてください。

Pi-hole のインストールは以下のコマンドで。セキュリティ的にネット経由でインストーラを実行するのは不安な場合、2 or 3番目の方法を。

ネット経由で自動インストール。

curl -sSL https://install.pi-hole.net | bash

GitHub からリポジトリをクローンしてインストール。

git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
cd "Pi-hole/automated install/"
sudo bash basic-install.sh

インストーラをダウンロードして実行。

wget -O basic-install.sh https://install.pi-hole.net
sudo bash basic-install.sh

基本デフォルトの設定のままで問題無く、インストール中に注意する事と言えば「管理画面へのログインパスワードをメモする」事ぐらい。設定変更時のファーカス位置は矢印キーで上下移動、タブで了解・取消へ移動。

Pi-hole install step 01

Pi-hole install step 02

Pi-hole install step 03

Pi-hole install step 04

Pi-hole install step 05

Pi-hole からの DNS 問い合わせ先を指定。後から変更可能、とりあえず Google を選択推奨。

Pi-hole install step 06

広告ブロックリストの有効・無効を指定。リストは後から追加可能。

Pi-hole install step 07

広告ブロックするIPプロトコルを選択。特に理由がないのであれば IPv4/Ipv6 両方を有効に。

Pi-hole install step 08

Pi-hole install step 09

IPv4 or IPv6 どちらかをルータから DHCP で動的に取得している場合にでる?(要検証@2018/11/17)

Pi-hole install step 10

IPv6 での DNS サーバのIPアドレス。

Pi-hole install step 11

Web インターフェイス(管理画面)を使用しますか?

Pi-hole install step 12

Web インターフェイス(管理画面)用に lighttpd をインストールしますか?

Pi-hole install step 13

DNS クエリをログとして保存しますか?

Pi-hole install step 14

インストールはこれで終了。Pi-hole の

が表示される。ログインパスワードは必ずメモをしておく事。

Pi-hole install step 17


pi@raspberry:~ $ curl -sSL https://install.pi-hole.net | bash

  [✗] Root user check
  [i] Script called with non-root privileges
  [i] The Pi-hole requires elevated privileges to install and run
  [i] Please check the installer for any concerns regarding this requirement
  [i] Make sure to download this script from a trusted source

  [✓] Sudo utility check

  [✓] Root user check

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

  [✓] Disk space check

  [✓] Update local cache of available packages

  [✓] Checking apt-get for upgraded packages... up to date!

  [i] Installer Dependency checks...
  [✓] Checking for apt-utils
  [i] Checking for dialog (will be installed)
  [✓] Checking for debconf
  [✓] Checking for dhcpcd5
  [✓] Checking for git
  [✓] Checking for iproute2
  [✓] Checking for whiptail
  [i] Using Google DNS servers
  [✓] Set IP address to 192.168.0.115
            You may need to restart after the install is complete
  [i] Found IPv6 GUA address, using it for blocking IPv6 ads
  [i] IPv4 address: 192.168.0.115/24
  [i] IPv6 address: ****:****:****:****:****:****:****:****
  [i] Web Interface On
  [i] Web Server On
  [i] Logging On.
  [✗] Check for existing repository in /etc/.pihole
  [✓] Clone https://github.com/pi-hole/pi-hole.git into /etc/.pihole

  [✗] Check for existing repository in /var/www/html/admin
  [✓] Clone https://github.com/pi-hole/AdminLTE.git into /var/www/html/admin

  [i] Main Dependency checks...
  [i] Checking for bc (will be installed)
  [✓] Checking for cron
  [✓] Checking for curl
  [i] Checking for dnsutils (will be installed)
  [✓] Checking for iputils-ping
  [i] Checking for lsof (will be installed)
  [i] Checking for netcat (will be installed)
  [✓] Checking for psmisc
  [✓] Checking for sudo
  [✓] Checking for unzip
  [✓] Checking for wget
  [i] Checking for idn2 (will be installed)
  [i] Checking for sqlite3 (will be installed)
  [✓] Checking for libcap2-bin
  [i] Checking for dns-root-data (will be installed)
  [i] Checking for resolvconf (will be installed)
  [i] Checking for lighttpd (will be installed)
  [i] Checking for php-common (will be installed)
  [i] Checking for php-cgi (will be installed)
  [i] Checking for php-sqlite3 (will be installed)
  [✓] Enabling lighttpd service to start on reboot
  [✓] Installing scripts from /etc/.pihole

  [i] Installing configs from /etc/.pihole...
  [✓] No dnsmasq.conf found... restoring default dnsmasq.conf...
  [✓] Copying 01-pihole.conf to /etc/dnsmasq.d/01-pihole.conf

  [i] Installing blocking page...
  [✓] Creating directory for blocking page, and copying files
  [✓] Backing up index.lighttpd.html

  [✓] Installing sudoer file

  [✓] Installing latest Cron script

  [✓] Installing latest logrotate script

  [i] FTL Checks...
  [✓] Detected 32bit (i686) architecture
  [i] Checking for existing FTL binary...
  [✓] Downloading and Installing FTL


  [i] Skipping firewall configuration
  [✓] man pages installed and database updated
  [i] Systemd-resolved is not enabled
  [✓] Starting lighttpd service
  [✓] Enabling lighttpd service to start on reboot
  [i] Restarting services...
  [✓] Starting pihole-FTL service
  [✓] Enabling pihole-FTL service to start on reboot
  [✓] Deleting existing list cache
  [i] Neutrino emissions detected...
  [✓] Pulling blocklist source list into range

  [i] Target: raw.githubusercontent.com (hosts)
  [✓] Status: Retrieval successful

  [i] Target: mirror1.malwaredomains.com (justdomains)
  [✓] Status: Retrieval successful

  [i] Target: sysctl.org (hosts)
  [✓] Status: Retrieval successful

  [i] Target: zeustracker.abuse.ch (blocklist.php?download=domainblocklist)
  [✓] Status: Retrieval successful

  [i] Target: s3.amazonaws.com (simple_tracking.txt)
  [✓] Status: Retrieval successful

  [i] Target: s3.amazonaws.com (simple_ad.txt)
  [✓] Status: Retrieval successful

  [i] Target: hosts-file.net (ad_servers.txt)
  [✓] Status: Retrieval successful

  [✓] Consolidating blocklists
  [✓] Extracting domains from blocklists
  [i] Number of domains being pulled in by gravity: 149651
  [✓] Removing duplicate domains
  [i] Number of unique domains trapped in the Event Horizon: 126734
  [i] Nothing to whitelist!
  [i] Number of regex filters: 0
  [✓] Parsing domains into hosts format
  [✓] Cleaning up stray matter

  [✓] Force-reloading DNS service
  [✓] DNS service is running
  [✓] Pi-hole blocking is Enabled
  [i] Web Interface password: Z0-Agg16
  [i] This can be changed using 'pihole -a -p'

  [i] View the web interface at http://pi.hole/admin or http://192.168.0.115/admin

  [i] You may now configure your devices to use the Pi-hole as their DNS server
  [i] Pi-hole DNS (IPv4): 192.168.0.115
  [i] Pi-hole DNS (IPv6): ****:****:****:****:****:****:****:****
  [i] If you set a new IP address, please restart the server running the Pi-hole

  [i] The install log is located at: /etc/pihole/install.log
    Installation Complete!

アップデート

以下のコマンドを実行。

pihole -up

Pi-holeで設定必要なファイアウォールルール

以下参照。

Firewalls - Pi-hole documentation

設定

Settings - System

Pi-hole のネットワーク & システム情報を表示。ページ下部から、クエリログの消去・無効化、Pi-hole & OSの再起動等の操作可。

Pi-hole Admin Console - Setting : System

Settings - Blocklists

ブロックリストの表示および編集の管理画面。インストール直後に入っているブロックリストは主に海外が対象な為、日本国内 & 海外用として

から

https://adaway.org/hosts.txt
https://blocklistproject.github.io/Lists/abuse.txt
https://blocklistproject.github.io/Lists/ads.txt
https://dns66.page.link/hosts
https://qiita.com/AKKYM/items/9772884e925c0647adb7
https://gist.githubusercontent.com/VirtuBox/f09968a2d27bc00ba58b3617c61dc54e/raw/56723b76a70e87a8e2344daa7637cec778a54fd7/microsoft-dns-block.txt
https://pastebin.com/raw/XF5FP2rG
https://pgl.yoyo.org/as/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext
https://phishing.army/download/phishing_army_blocklist.txt
https://raw.githubusercontent.com/multiverse2011/adawaylist-jp/master/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
https://someonewhocares.org/hosts/zero/
https://someonewhocares.org/hosts/zero/hosts
https://sysctl.org/cameleon/hosts
https://v.firebog.net/hosts/AdguardDNS.txt
https://warui.intaa.net/adhosts/hosts.dos
https://warui.intaa.net/adhosts/hosts.txt
https://winhelp2002.mvps.org/hosts.txt

を追加を。重複したドメインはアップデート or ブロックリスト追加・更新時に除去されます。

Pi-hole Admin Console - Setting : Blocklists

Settings - DNS

初期状態では IPv6 向け DNS サーバにチェックが付いてない為、 IPv6 接続環境の場合は確認を。

Pi-hole Admin Console - Setting : DNS

Settings - DHCP

DHCP の設定。

Pi-hole Admin Console - Setting : DHCP

Settings - API / Web interface

API と Web インターフェイスに適用される設定(クエリ出力の例外設定・温度の単位・メールアドレス等)を管理。

Pi-hole Admin Console - Setting : API / Web interface

Settings - Privacy

DNS クエリ表示のプライバシーレベルを設定。詳細については Privacy levels - Pi-hole documentation を参照。

Pi-hole Admin Console - Setting : Privacy

Settings - Teleporter

設定のバックアップ・リストア。

Pi-hole Admin Console - Setting : Teleporter

ホワイトリスト/ブラックリストの編集

Web 経由でブロックリスト追加・更新する以外にも、ブロックしたいドメインを個別にホワイトリスト/ブラックリストへ登録できます。

ホワイトリスト
Blocklist、もしくはブラックリスト中に含まれているが対象外としたいドメインを登録。
対象ドメイン(or サブドメイン)と「全て一致する文字列」を登録してください。
ブラックリスト
Blocklist ではブロック対象となっていないドメインを登録。
対象ドメイン(or サブドメイン)は「全て一致する文字列・ワイルドカード・正規表現」の三通りで登録できます。

ワイルドカードでの登録は「example.com とテキストボックスに入力 → Add (wildcard)のボタンを押す」と、 (^|.)example\com$ とドメイン・サブドメインを含めた正規表現パターンで登録されます。

動作に関する詳細は以下の通り(Pi-hole の Help から抜粋意訳)。

ホワイト/ブラックリスト

ホワイト/ブラックリストからドメイン(またはサブドメイン)を追加または削除します。ホワイトリストにドメインを追加する場合、既に登録されているドメインはブラックリストから削除され、その逆もあります。

正規表現を使用したブラックリストへの登録がサポートされています(^example と入力すると example で始まるドメインがブロックされます。詳細は Pi-hole regular expressions tutorial を参照してください。)あるドメインが正規表現のパターンに該当する場合でも、ホワイトリストに登録できます。

ドメインをスペースで区切ると、一度に複数のエントリをホワイト/ブラックリストに登録できます。

Pi-hole Admin Console - Whitelist

Pi-hole Admin Console - Blacklist

Pi-hole を DNS サーバとして使う

IPv4/IPv6 のDNSサーバ アドレス設定(Windows 10 での設定例)。

Client DNS Setting for IPv4

Configure network settings to use Pi-hole(IPv4)

Client DNS Setting for IPv6

IPv6 向け DNS サーバの設定は IPv4 射影アドレスでも可。

Configure network settings to use Pi-hole(IPv6)

Piーhole Tips

開発版を使用する

基本、リリース版の使用を推奨。バグフィックス & 最新の機能を使用したいかつ、「開発版移行時に何らかの問題が発生しても自分で対処できる」方のみ開発版に移行を。

pihole checkout dev

リリース版に戻す

sudo rm /etc/pihole/ftlbranch
pihole checkout master

Help Us Beta Test FTLDNS – Pi-hole

管理画面へのログインパスワードを再設定する

対話式で変更するなら

pi@raspberry:~ $ pihole -a -p
Enter New Password (Blank for no password):
Confirm Password:
[✓] New password set

コマンドから直接パスワード指定して変更する場合、変更したいパスワードを secretpassword とすると

pihole -a -p secretpassword

The pihole command : Password - Pi-hole documentation

Pi-holeのブロックリストを初期状態へ戻す

sudo rm /etc/pihole/list.*
pihole -g

How can I restore Pi-hole's default blocklists? - FAQs - Pi-hole Userspace

DNSブロッキング時の応答をデフォルトから変更する

デフォルトのままで問題ありません。「DNS ブロッキング時の応答を NULL 応答から変えたい」場合だけ変更を。

以下はブロッキング時の応答を NXDOMAIN で返す場合。詳細は Blocking mode - Pi-hole documentation を参照してください。

pi@raspberry:~ $ su
パスワード:
root@raspberry:/home/pi# cd /etc/pihole/
root@raspberry:/etc/pihole# echo BLOCKINGMODE=NXDOMAIN | tee -a pihole-FTL.conf
BLOCKINGMODE=NXDOMAIN
root@raspberry:/etc/pihole# pihole restartdns

Dashboard でドメインブロック数がカウントされていない

ブロッキングを無効にしていないのであれば Web インターフェイス(管理画面)の Settings - Blocklists、もしくはCUIからブロッキングリストを更新してください。

pihole -g

No blocking domain count - pihole@Reddit

クライアントからの単位時間当たりのDNSクエリ数を制限 or 解除する

Pi-hole FTL v5.7 and Web v5.4 以降から単位時間当たりのDNクエリが制限(デフォルトで、クライアント毎に60秒間当たり1000を超えるクエリを許可しない)されるようになりました。

Hence, we decided to implement a customizable rate-limiting into FTL itself. It defaults to the rather conservative limit of allowing no more than 1000 queries in a 60 seconds window for each client. Afterwards, any further queries are replied to with empty replies with the status set to REFUSED. Both the number of queries within the window as well as the window size can be configured by the user. It is important to note that rate-limiting is happening on a per-client basis. Other clients can continue to use FTL while rate-limited clients are short-circuited at the same time.

Pi-hole FTL v5.7 and Web v5.4 released – Pi-hole

ブラウザで30以上のページを同時に開き続けるといった動作を繰り返している場合に制限に引っかかる為、リクエスト制限によるDNSエラーが多発した場合は以下の手順で制限回避を。

# ファイルの編集
sudo nano /etc/pihole/pihole-FTL.conf
# 単位時間当たりのDNクエリが制限を解除
RATE_LIMIT=0/0

設定ファイルの編集・保存後、Web Console の Settings → System に移動し Restart DNS resolver から Pi-hole を再起動し設定変更を反映させる。ターミナルソフトからから再起動する場合は以下の通り。

# Restart DNS resolver
pihole r毛毛startdns

DNSクエリ数を制限 or 解除を GUI から変更

Pi-hole FTL v5.22, Web v5.19 and Core v5.16.1 以降、 GUI の System > DNS から「単位時間当たりのDNクエリが制限」が変更できるようになりました。

Change Dns Query rate limit from GUI

Pi-hole をフルサービスリゾルバ(キャッシュ DNS サーバ)として使う

Pi-hole をフルサービスリゾルバ(キャッシュ DNS サーバ)として使う手順を解説。

Install : Unbound

Pi-hole をインストールしたマシンに Unbound をインストール。

sudo apt install -y unbound

DNSルートゾーンファイルの取得。

wget -O root.hints https://www.internic.net/domain/named.root
sudo mv root.hints /var/lib/unbound/

Setting : Unbound

before setting for Unbound

sudo mkdir -p /var/log/unbound
sudo touch /var/log/unbound/unbound.log

sudo chmod 666 /var/log/unbound/unbound.log
sudo nano /etc/apparmor.d/local/usr.sbin.unbound
# add
/var/log/unbound/unbound.log rw,
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.unbound

参考:unbound でログの書き出しに失敗する – blog@ daichang.me

sudo nano /etc/logrotate.d/unbound
/var/log/unbound/unbound.log {
    daily
    rotate 14

    ifempty
    missingok

    dateext
    dateformat _%Y-%m-%d

    create 0664 unbound unbound
}
sudo nano /etc/sysctl.conf
# ----------------------------------------------------------------------------------------------
# Setting for Unbound(so-rcvbuf: 8m & so-sndbuf: 8m)

# 受信バッファの最大値 8M > 8,388,608
net.core.rmem_max = 8388608

# 送信バッファの最大値 8M > 8,388,608
net.core.wmem_max = 8388608
# ----------------------------------------------------------------------------------------------
# 設定の読み込み
sudo sysctl -p

Setting

  1. touch pi-hole.conf or デスクトップ上で「右クリック→新規作成→空のファイル」から pi-hole.conf を作成
  2. 作成したファイルに Pi-hole as All-Around DNS Solution - Pi-hole documentation をコピペ。
  3. /etc/unbound/unbound.conf.d/ 配下に作成したファイルを移動。

作成したファイルを移動させる際のコマンドは以下の通り。

# 設定用ファイルの作成
touch pi-hole.conf

# ファイルの編集
sudo nano pi-hole.conf

# ファイル編集後、所定の位置へ移動
sudo mv pi-hole.conf /etc/unbound/unbound.conf.d/

中の人用、再インストール時の設定ファイルメモ(IPv4/IPV6両対応、負荷対応やや高め)。

# /etc/unbound/unbound.conf.d/pi-hole.conf

server:
    # ログの保存場所 & エラーレベル(0~5)の設定
    logfile: "/var/log/unbound/unbound.log"
    verbosity: 0

    port: 5353
    do-ip4: yes
    do-udp: yes
    do-tcp: yes

    # May be set to yes if you have IPv6 connectivity
    #do-ip6: no
    do-ip6: yes

    # Use this only when you downloaded the list of primary root servers!
    root-hints: "/var/lib/unbound/root.hints"

    # Trust glue only if it is within the servers authority
    harden-glue: yes

    # Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS
    harden-dnssec-stripped: yes

    # Add@2018/11/04
    # DNSSECの署名の検証時に参照パスの検証を行う
    # NSEC/NSEC3 Replacement Attack
    # http://www.e-ontap.com/blog/20181031.html
    harden-referral-path: yes

    # Don't use Capitalization randomization as it known to cause DNSSEC issues sometimes
    # see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details
    use-caps-for-id: no

    # Reduce EDNS reassembly buffer size.
    # Suggested by the unbound man page to reduce fragmentation reassembly problems
    edns-buffer-size: 1472

    # TTL bounds for cache
    cache-min-ttl: 3600
    cache-max-ttl: 86400

    # Perform prefetching of close to expired message cache entries
    # This only applies to domains that have been frequently queried
    prefetch: yes

    # 処理速度優先ならばCPUのコア数の値を推奨
    # One thread should be sufficient, can be increased on beefy machines
    #num-threads: 1
    num-threads: 2

    # Ensure kernel buffer is large enough to not loose messages in traffic spikes
    #so-rcvbuf: 1m
    so-rcvbuf: 8m
    #so-sndbuf: 1m
    so-sndbuf: 8m

    # Ensure privacy of local IP ranges
    # local address : IPv4
    private-address: 169.254.0.0/16
    private-address: 10.0.0.0/8
    private-address: 172.16.0.0/12
    private-address: 192.168.0.0/16

    # local address : IPv6
    private-address: fe80::/8
    private-address: fe80::/10

    # Unboud がリクエストを受け付けるのは同じマシン上の Pi-hole からだけなので access-control の設定は省略
    # デフォルトでは localhost のみ許可(allow)、残りのアクセスは拒否(refuse)される

unbound-checkconf で設定に誤りが無いのを確認。

sudo unbound-checkconf

設定に誤りが無ければ以下のような出力が。

unbound-checkconf: no errors in /etc/unbound/unbound.conf

設定ファイルを編集・確認後、Unbound をサービスとして起動。その後、適当なドメインを dig でローカルホストのポート5353へ向けて問い合わせ、応答が返ってきたなら正常に動作。

sudo systemctl start unbound
dig pi-hole.net @127.0.0.1 -p 5353

DNSSEC の動作検証は

dig sigfail.verteiltesysteme.net @127.0.0.1 -p 5353
dig sigok.verteiltesysteme.net @127.0.0.1 -p 5353

最初のコマンドの応答が SERVFAIL、2番目のコマンドで NOERROR が返ってくるなら正常に動作。

Setting : Pi-hole

Unbound 側の動作確認後、Piーhole : Settings - DNS の「Upstream DNS Servers」で現在使用しているパブリック DNS 側のチェックを外し、

を入力。該当項目にチェックを入れた後に設定を保存。DNSSEC 使用時はそちらにもチェックを。

Pi-hole Admin Console - Setting : DNS,Upstream Servers from Piーhole

Unbound をローカル用 DNS サーバとして使用する

Notice

Pi-hole Ver 5.x から Pi-hole 側でローカルDNSサーバの機能が実装されました。Local DNS → DNS Records から設定可能です。

以下の作業は、Unbound をフルサービスリゾルバー(キャッシュDNSサーバー)だけでなくローカルDNSサーバとして併用したい場合のみ行ってください。

Setting : Local DNS Server

Unboud をインストールしたついでに、LAN内のサーバに対してもドメイン名でアクセスできるようにしてみる。

「アクセスしたいローカルドメインとIPの対応」を /etc/unbound/unbound.conf.d/pi-hole.conf に追記、もしくは任意ファイル名(例:localdomain.conf)で作成し /etc/unbound/unbound.conf.d/ 配下に置く。

以下は、家庭内LANでの設定例。

server:
    # ローカルにあるサーバをドメイン名でアクセス
    local-data: "esxi.localdomain.    IN A 192.168.0.101"
    local-data: "nas.localdomain.     IN A 192.168.0.103"
    local-data: "rec.localdomain.     IN A 192.168.0.105"
    local-data: "node-js.localdomain. IN A 192.168.0.107"

    # 外部公開しているWebサーバをドメイン名でアクセス(ヘアピンNAT非対応ルータの場合)
    local-data: "example.net.   IN A 192.168.0.110"
    local-data: "example.com.   IN A 192.168.0.110"
    local-data: "example.org.   IN A 192.168.0.110"

作成後、設定をリロードし

sudo unbound-control reload

Unboud が動いているマシンから nslookup もしくは dig で応答を確認する。

dig esxi.localdomain @127.0.0.1 -p 5353
dig nas.localdomain @127.0.0.1 -p 5353
dig rec.localdomain @127.0.0.1 -p 5353
dig node-js.localdomain @127.0.0.1 -p 5353
dig example.net @127.0.0.1 -p 5353
dig example.com @127.0.0.1 -p 5353
dig example.org @127.0.0.1 -p 5353

参考記事

Pi-hole Official

Pi-hole Installation & Trial Report

Blocking List

Unbound

DNS

Tool

Other