はじめに
前項ではPowerDNS Authoritative ServerとPowerDNS-Adminをインストールした。
今回はPowerDNS Recursorをインストールすることで本格的におうちの中で利用できるDNSサーバを構築することができる。
今回の構築イメージ。
クライアントPC
↓
PowerDNS Recursor → localドメイン → PowerDNS Authoritative Server
↓
localドメイン以外
↓
Internet
Dockerイメージ
前回のDockerファイルにさらに、PowerDNS RecursorのDockerイメージを追加した。
また、docker-composeでブリッジを作成し各コンテナのIPアドレスを固定で設定することで、PowerDNS Authoritative ServerとRecursorの経路を固定した。
linkの設定では、PowerDNS Authoritative ServerとRecursor同士の通信が正しく行えない問題があったためである。
また、内向きで利用するドメインとその検索先をforward-zonesの項目に設定する。
今回は.localドメインを追加するので下記の用に設定した。
forward-zones=local=<転送先のDNSサーバー>
それ以外の設定は特にいじっていないため、必要に応じてrecursor.confを編集する。
以上で、Dockerファイルの準備は完了した。
このDockerファイルもここにPushしてある。
この状態でコンテナを立ち上げると、以下の様なエラーが発生しポートのバインドに失敗する。
0.0.0.0:53: bind: address already in use
事項で、調査方法と設定変更法を記載する。
Armbianの設定
以下のコマンドで、53番ポートを使用しているアプリを調査。
sudo lsof -i -P | grep "LISTEN"
ポートを占有していた正体は、dnsmasqである。
詳細は割愛するが、簡易DNSサーバである。
Armbianは起動時に、NetworkManger経由でたちあげているようなので、以下のコマンドで設定変更・停止する。
$ sudo vi /etc/NetworkManager/NetworkManager.conf
[main]
dns=none
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq
[ifupdown]
managed=true
[keyfile]
unmanaged-devices=interface-name:p2p0
$ sudo systemctl restart network-manager
DNSの設定確認
ブラウザのアドレスバーにArmbianのIPアドレスを打ち込むとPowerDNS-Adminが表示される。
新規にDNSを登録し、正常に登録されればdigやhostコマンドなどで動作を確認する。
$ dig @<ArmbianのIPアドレス> <作成したアドレス>
もし、PowerDNS-Adminでエラーが出る場合はdocker-compose upをしたターミナルを見るとPowerDNSのログが出ている。
発生しやすいエラーとして、SQLiteへの書き込みが出来ない場合である。
その場合は、ファイルの権限を見直しPowerDNSだけを再起動すれば正しく読み込むことが出来る。
今後の課題
リバースプロキシを設定したが、現在の設定だとPowerDNS以外のサービスの提供が難しい。
そこで、uWSGIを利用してパスを分けようとしたが、正しく起動することが出来なかった。