はじめに🧀
Volumio を音楽再生のためだけに常時稼働させているのがもったいないので、ついでに内部 DNS サーバーとしての役割も兼用してみる。
基本的には dnsmasq
で DNS サーバーを建てる方法と一緒。
ただし、Volumio では systemd
ユニットの設定を修正する必要がある。
Tool | Version |
---|---|
Raspberry Pi 3A |
|
Volumio |
2.861 |
テキストエディタ
Volumio にインストールされているエディタは vim ではなく nano になる。
|
dnsmasq
設定💻
Volumioでは元から dnsmasq
がインストール済みになっている。
よって dnsmasq
の設定を編集して内部 DNS サーバーを実装する。
設定ファイル修正
内部 DNS サーバー用に設定。
元の設定ファイルをバックアップ
|
domain-needed (1)
bogus-priv (2)
no-resolv (3)
addn-hosts=/etc/dnsmasq.hosts.d (4)
expand-hosts (5)
domain=my.home,192.168.100.0/24,local (6)
cache-size=0 (7)
conf-dir=/etc/dnsmasq.d,.conf (8)
1 | ドメインが指定されていない場合は上位ネームサーバーに問い合わせない。 |
2 | /etc/hosts や DHCP リースの範囲にないプライベートIPの逆引きを上位ネームサーバーに転送しない。 |
3 | /etc/resolv.conf ファイルを読み込まない。上位 DNS サーバの指定は後述する conf-dir オプションのディレクトリ以下で指定する。 |
4 | 読み込む hosts ファイルを追加する。ディレクトリパスを指定すると、そのディレクトリに含まれるすべてのファイルが読み込まれる。 |
5 | /etc/hosts に書かれたドメインなしのホスト名に、下記の domain プロパティ値を付加する。 |
6 | 任意のローカルドメインと使用するローカルLANのIPアドレス範囲を指定。 |
7 | キャッシュを無効化(キャッシュポイズニング対策)。 |
8 | 追加で読み込みたい、他の設定ファイルがあるディレクトリパスとファイル拡張子を指定。 上位 DNS サーバーやブロックするドメインなどの設定は別ファイルにしたかったので記述した。 |
Hotspot 時に Volumio ドメイン名が変わるかも。 |
設定編集後は以下のコマンドでチェックする。
/usr/sbin/dnsmasq --test
dnsmasq: syntax check OK.
上位DNSサーバーの設定
resolv-file
プロパティで指定したファイルで上位DNSサーバーを指定する。
親ルーターとか Google や Cloudflare の公開DNSとか。
# Cloudflare DNS
server=1.1.1.1
server=1.0.0.1
内部ホスト名
内部LANにあるホストに関しては短縮名だけ記述すればいい。
今までの設定により、短縮名だけでもローカルドメインを自動的に付与するようになっているため。
192.168.100.2 volumio
172.16.1.10 other.example.com example01
dnsmasq
の自動起動オプションを修正
dnsmasq
の systemd
ユニット設定を修正する。
Volumio では dnsmasq
の自動起動時に --address=/#/192.168.xxx.1
オプションが付け加えられている。
これによって /etc/hosts
や DHCP から応答がない場合は、すべて 192.168.xxx.1
アドレスとして処理してしまう。
このオプションのせいで名前解決がうまくいかないので、以下の操作で取り除く。
sudo mkdir /etc/systemd/system/dnsmasq.service.d
[Service]
ExecStart= (1)
ExecStart=/usr/sbin/dnsmasq -2 --interface=wlan0 (2)
1 | ExecStart は置き換える前に空にする必要がある。 |
2 | --address=… オプションを削除した起動コマンド。 |
--interface= の値は各デバイスにより違うので注意する。
|
sudo systemctl daemon-reload
sudo systemctl restart dnsmasq
sudo systemctl status dnsmasq
上記設定後、エラーなどがなければルーターが参照する DNS サーバーを Volumio のIPアドレスに変更しておく。
広告ブロック🚫
必要なら広告ドメインのブロックも行っておく。
広告のドメインに対して NXDOMAIN を返すようにすればいい。
よって dnsmasq
設定の address
オプションにて、 address=/example.com/
というようにドメインを指定しなければいい。
address=/ad.example.com/
address=/ads.example.com/
address=/ads-foo.example.com/
今回は280blockerさんの広告ドメインリストを利用させてもらった。
この場合、リストファイルがBOM付きUTF-8の改行コードCRLFなので、BOM無し改行LFに変換しておく必要がある。
curl -Ss -o 280blocker.txt \
"https://280blocker.net/files/280blocker_domain_$(date +'%Y%m').txt"
tail --byte=+4 280blocker.txt | (1)
sed "s/\r//g" | (2)
sed -E "s@(^[a-zA-Z0-9].+)@address=/\1/@g" | (3)
sudo tee /etc/dnsmasq.d/280blocker.conf > /dev/null
1 | ファイルから BOM を削除。 |
2 | ファイルの改行コードを CRLF から LF に変換。 |
3 | ドメインリストを dnsmasq の設定プロパティ(address=/<domain>/ )に変換。 |
設定終了したら dnsmasq
を再起動。
sudo systemctl restart dnsmasq
おわりに😎
最初 vim
を使おうとしてなかったのと、dnsmasq
の起動オプションになかなか気づけなかったところで詰まってた。
とりあえずこれで Volumio 兼 DNS サーバーなのでエコと言い張れるはず。