CoreDNSでDNSサーバを構築する方法
CoreDNSでDNSサーバを構築する方法を説明します。
CoreDNSとは
CNCFのプロジェクトであるCoreDNSはGoで書かれたDNSサーバです。 Kubernetesの中で利用されているため、名前は聞いたことがあるでしょうか。 シンプルな作りとシングルバイナリで動作することから、手軽に利用できます。
CoreDNSの実行
CoreDNSはシングルバイナリで動作しますが、ここではDockerを使って実行します。
設定ファイルとしてCorefile
とhosts
をカレントディレクトリに配置して、次のコマンドを実行します。
docker run \
--rm -d --name coredns -p 1053:53/udp -v $(pwd):/data \
coredns/coredns -conf /data/Corefile
Corefile
. {
# 各種プラグイン利用
cache 30
errors
log
loop
reload
health
ready
prometheus
# 自前のレコード(ワイルドカード)
template IN A apps.example.com {
match "^([^\.]+)\.apps\.example\.com\.$"
answer "{{ index .Match 1 }}.apps.example.com. IN A 192.168.10.10"
fallthrough
}
# 自前のレコード(hosts形式)
hosts /data/hosts example.com {
fallthrough
}
# 自前のレコードに該当しない場合、パブリックDNSへフォワード
forward . 1.1.1.1 8.8.8.8
# forward . /etc/resolv.conf
}
hosts
192.168.10.11 a.example.com
192.168.10.12 b.example.com
たったこれだけで、DNSサーバの構築は完了です。
動作検証
hostsに記載したレコードの正引きを検証します。
dig @localhost -p 1053 +noall +ans a.example.com
a.example.com. 30 IN A 192.168.10.11
hostsに記載したレコードの逆引きを検証します。
dig @localhost -p 1053 +noall +ans -x 192.168.10.11
11.10.168.192.in-addr.arpa. 30 IN PTR a.example.com.
ワイルドカードの正引きを検証します。
dig @localhost -p 1053 +noall +ans test.apps.example.com
test.apps.example.com. 30 IN A 192.168.10.10
期待した通り動作しましたね。
参考リンク
- CoreDNSの説明やCorefileの書き方:https://coredns.io/manual/toc/
- Pluginの使い方:https://coredns.io/plugins/