ローカル環境で名前解決したいけど、 hostsの管理が面倒だったり、AndroidやiPhoneなどのスマホから名前解決が出来ない場合、ローカルに内部DNSサーバを立てて解決します

サンプル

Dockerの方が手軽で楽ですが、Dockerを使わない(or使えない)場合の setup.shもあるので、Debian系列の場合は参考になればと思います(Raspberry PI向けに作りました)

Dockerfile

andyshinn/dnsmasqイメージを利用させてもらいます。Dockerfileも以下の通り、たった4行なのでとてもシンプルです

1
2
3
4
FROM alpine:edge
RUN apk --no-cache add dnsmasq
EXPOSE 53 53/udp
ENTRYPOINT ["dnsmasq", "-k"]

DNSサーバ側: docker-compose.yml

extra_hostsにドメインとIPを列挙します

1
2
3
4
5
6
7
8
9
10
11
dnsmasq:
image: andyshinn/dnsmasq
container_name: dnsmasq
ports:
- "53:53/udp"
- "53:53/tcp"
extra_hosts:
- "hoge.local:192.168.2.100"
- "admin.hoge.local:192.168.2.100"
cap_add:
- NET_ADMIN

あとはupするだけです

1
$ docker-compose up -d

クライアント側: DNSの設定をする

クライアントはWindowsだったりMacだったりするので割愛しますが、例えばWindowsだとこんな感じに、DNSサーバを設定に記述して下さい。(AndroidやiPhoneなども、検索すれば設定方法出てくると思います)

/img/dnsmasq.jpg

クライアント側: 確認

IPが引けるか確認します

1
2
3
4
5
6
$ nslookup hoge.local
Server: 10.0.2.3
Address: 10.0.2.3#53

Name: hoge.local
Address: 192.168.2.100