Open9
DockerによるCoreDNS構築
目的
自宅LAN内の名前解決を行いたい
具体的には「192.168.11.*」でサーバにアクセスするのではなく
「hoge.com」でアクセスできるようにしたい
手段
自宅サーバにDNSサーバを構築する
そして構築したDNSサーバをルータに指定することで名前解決ができるようにする
構成
DNSサーバにはCoreDNSを採用する。
CoreDNSはGoで書かれたDNSサーバでKubernetesなどにも利用されている
またDockerを利用して構築を行う
参考
公式やdockerfileは下記を参考にする
dockerの構成は以下のようにする
/CoreDNS
├── Dockerfile
├── compose.yaml
├── /config
├── Corefile
├── hosts
Dockerfile
FROM coredns/coredns:1.11.1
EXPOSE 53 53/udp
VOLUME ["/etc/coredns"]
ENTRYPOINT ["/coredns"]
CMD ["-conf", "/etc/coredns/Corefile"]
compose.yaml
services:
coredns:
build: .
container_name: coredns
restart: always
expose:
- '53'
- '53/udp'
ports:
- '53:53'
- '53:53/udp'
volumes:
- './config:/etc/coredns'
Corefile
. {
### 使用するプラグイン
log
errors
reload
cache 30
# 自前のレコード(hosts形式)
hosts /etc/coredns/hosts {
fallthrough
}
# 自前のレコードに引っかからない場合はルータへ
forward . 192.168.11.1
}
hosts
192.168.11.11 hoge.com
「systemd-resolved」が53番ポートで待受を行なっているためCoreDNSが起動できません
参考サイトを元に設定を修正します
$ sudo vim /etc/systemd/resolved.conf
[Resolve]
+ DNSStubListener=no
+ DNS=127.0.0.1
$ sudo systemctl restart systemd-resolved
$ sudo reboot
compose.yamlがあるフォルダに移動しコンテナを起動する
$ sudo docker compose up -d
起動後「dig」コマンドで設定したドメインがヒットすればOKのはず
$ dig hoge.com
自分が使用しているルータではDHCPのDNSオプションを指定する
するとルータは以下のDHCP接続のノートPCで参照するDNSが構築したものに変化する
「8.8.8.8」はGoogleさんのパブリックDNS