Docker-unbound

開発環境に DNS キャッシュサーバーが欲しかったので、Docker で unbound を構築してみたメモです。

Dockerfile

Alpine Linux のイメージをもとに unbound をインストールしたイメージを作成します。

DNS で使用する TCP と UDP の53番ポートを EXPOSE しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
FROM alpine

RUN apk update \
&& apk upgrade \
&& apk add --no-cache \
unbound \
&& rm -rf /var/cache/apk/*

RUN unbound-checkconf

EXPOSE 53:53
EXPOSE 53:53/udp
CMD ["tail", "-f", "/dev/null"]

docker-compose.yml

Docker Compose で制御できるように、docker-compose.yml ファイルも作製しました。

1
2
3
4
5
6
7
8
9
10
version: '3.0'
services:
unbound:
build: ./unbound
ports:
- "53:53"
- "53/udp:53/udp"
volumes:
- ./conf:/etc/unbound
command: /usr/sbin/unbound -d -c /etc/unbound/unbound.conf

conf/unbound.conf

unbound の設定ファイルです。

  • 192.18.1.0/24 ネットワークからの要求に対応
  • wp.example.com の問合せに 192.168.1.80 と回答する。
  • それ以外の問合せは上位に転送
1
2
3
4
5
6
7
8
9
10
11
12
13
server:
interface: 0.0.0.0
access-control: 192.168.1.0/24 allow
verbosity: 1
do-ip4: yes
do-ip6: no

local-data: "wp.example.com. IN A 192.168.1.80"
local-data-ptr: "192.168.1.80 wp.example.com."
root-hints: "/etc/unbound/root.hints"
forward-zone:
name: "."
forward-addr: 8.8.8.8

root.hints

ヒントファイルは定期的に更新されるので、cron で取得したいところですが、簡易に運用したいので今回は手作業で取得しました。

1
$ curl -o root.hints https://www.internic.net/domain/named.cache