2018年秋に24回分割払い手数料無料キャンペーンに引きつられ買ったものの、 もっぱら4Kモニタの隅っこで鎮座し続けているmac mini (2018)を有効活用すべく、 Dockerで何かしらの常駐鯖を立ててみることに。
DNS鯖を立てる
DNS鯖のLinuxディストリとしてBINDが有名ですが、色々と問題が指摘されているので、今回はNSDを選択。
初期ファイル構成は以下のようにしました。
├── docker-compose.yml └── nsd └── Dockerfile
Dockerfileを書く
ここではhardware/nsd-dnssecをベースにセットアップ。
FROM hardware/nsd-dnssec USER root RUN addgroup -g 991 -S nsd RUN adduser -G nsd -s /sbin/nologin -H -u 991 -S nsd RUN chown nsd:nsd zones
docker-composeを書く
docker-compose
を使えば複数コンテナの管理だけでなく、ボリュームマウント、ポートフォワードなども分かりやすく書けるので活用。
version: "3" services: nsd: build: nsd restart: always container_name: nsd ports: - "53:53" - "53:53/udp" volumes: - ./nsd/conf:/etc/nsd - ./nsd/zones:/zones - ./nsd/db:/var/db/nsd
起動して設定ファイルを編集
docker-compose.yml
が存在するディレクトリで以下のコマンドを実行。
$ docker-compose up -d
コンテナを起動すると、nsd
フォルダ以下にconf
zones
db
フォルダが作成されるので、設定ファイルを書いていきます。
conf/nsd.confの編集
nsdの設定については、例によってArchWikiを参照すると分かりやすい。
例えば、ドメインexample.com
について、192.168.0.***/24
の範囲で解決するとき、
正引き・逆引きの両設定を書くので、実際のnsd.conf
は以下のような形に。
server: server-count: 1 ip4-only: yes hide-version: yes identity: "" zonesdir: "/zones" remote-control: control-enable: yes zone: name: "example.com" zonefile: "example.com.zone" zone: name: "0.168.192.in-addr.arpa" zonefile: "0.168.192.in-addr.arpa.zone"
zoneの編集
続いて先ほど指定したzoneファイルを実際に書いていきます。ここでは192.168.0.2をhostnameというホストに割り当てる設定で。
正引きのzoneファイル
@ IN SOA dns.example.com. root.example.com. ( 2019040400 ; Serial 3600 ; Refresh 900 ; Retry 604800 ; Expire (1week) 3600 ) ; Negative Cache TTL ; Name Server IN NS dns.example.com. ; localhost localhost IN A 127.0.0.1 ; Servers hostname IN A 192.168.0.2
逆引きのzoneファイル
@ IN SOA dns.example.com. root.example.com. ( 2019040401 ; Serial 3600 ; Refresh 900 ; Retry 604800 ; Expire (1week) 3600 ; Negative Cache TTL ) ; Name Servers @ IN NS dns.example.com @ PTR example.com. @ IN A 255.255.255.0 2 IN PTR hostname.example.com
起動
ここまで書けば最低限の設定は完了です。docker-compose up -d --build
で立ち上がればおわり。