Open9

DockerによるCoreDNS構築

でぶねこでぶねこ

目的

自宅LAN内の名前解決を行いたい
具体的には「192.168.11.*」でサーバにアクセスするのではなく
「hoge.com」でアクセスできるようにしたい

手段

自宅サーバにDNSサーバを構築する
そして構築したDNSサーバをルータに指定することで名前解決ができるようにする

構成

DNSサーバにはCoreDNSを採用する。
CoreDNSはGoで書かれたDNSサーバでKubernetesなどにも利用されている
またDockerを利用して構築を行う

参考

公式やdockerfileは下記を参考にする
https://coredns.io/
https://qiita.com/nomunomu0504/items/8bd03343072146e8bf27
https://github.com/burkeazbill/docker-coredns

でぶねこでぶねこ

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
}
でぶねこでぶねこ

compose.yamlがあるフォルダに移動しコンテナを起動する

$ sudo docker compose up -d

起動後「dig」コマンドで設定したドメインがヒットすればOKのはず

$ dig hoge.com
でぶねこでぶねこ

自分が使用しているルータではDHCPのDNSオプションを指定する
するとルータは以下のDHCP接続のノートPCで参照するDNSが構築したものに変化する
「8.8.8.8」はGoogleさんのパブリックDNS