【ネットワーク】内向きDNSサーバーの構築に関して(Windows Pro & Docker)
前回の DHCPサーバー に続き、DNSサーバーを構築したので、備忘録として残しておく。
DNSサーバーとは
DNSとは、 Domain Name Systemの略称であり、インターネット上でドメイン名を管理・運用するために開発されたシステムである。通常目にしているホームページのURLやメールアドレスのドメイン名だけでは、目的地のサーバーにアクセスすることができない。IPアドレスというインターネット上の住所の役割をする番号が必要になってくる。DNSでは、ドメイン名とIPアドレスの紐付けを行っている。この巨大なデータベースを1台のサーバーですべて管理するのではなく、サーバーを階層化し分散してドメイン名とIPアドレスの対応を管理している。DNSサーバーは、まさにドメイン名とIPアドレスの変換機のようなものである。
今回は、DHCPサーバーで割り当てた、ローカルネットワーク内の各デバイスの宛先に任意の名前(ドメイン名)をつけるべく、内向きDNSサーバーを構築した。
構成概要
ネットワーク構成は以下のようにした。 以前の記事と同様に、制御用のPCと、各制御用のデバイス(Raspberry Pi)をLANケーブルで接続し、ローカルネットワークを構築している。PCのIPアドレスは固定とし、各デバイスはDHCPによりIPアドレスを割り当てられる。そして、割り当てられたIPアドレスから、DNSサーバーでドメイン名を取得する。(逆引き:IPアドレスからドメイン名を取得すること)
構築方法
Windows上の内向きDNSサーバーを構築するにあたり、以下の方法を検討した。(PCは、Windows Proであるが、Windows Serverを搭載していないモデルである。)
- BIND9をインストールする
- Docker上にDNSサーバーを構築する
1.BIND9をインストールする
BIND(バインド)は、「Barkley Internet Name Domain」の略称であり、世界で最も多く利用されているOSSのDNSサーバである。一番簡単に構築できそうであったが、インストーラーでエラーが発生してインストールすることができなかった。
本手段は不可能であると判断して、諦めることにした。(Windows10のOSのアップデートの問題か?)
2.Docker上にDNSサーバーを構築する
Windows上でDockerを起動するには、Hyper-Vが必要なので、Windows10 Pro以上が必要である。(Hyper-V を用いて、ハードウェアの仮想化が実現可能となる。概要図を示しておく。)
構築手順は以下の通りである。
1.Docker for Windows をインストールする
2.dockerのインストールを確認するために、バージョン情報確認
$ docker -v $ docker-compose -v
3.Dockerfileとdocker-compose.ymlを作成してください。
FROM alpine:latest RUN apk update && \ apk upgrade && \ apk --no-cache add bash RUN apk --no-cache add dnsmasq EXPOSE 53 53/udp ENTRYPOINT ["dnsmasq", "-k"]
version: '2' services: dnsmasq: restart: always image: andyshinn/dnsmasq container_name: dnsmasq ports: - "53:53/udp" - "53:53/tcp" extra_hosts: // DNSの設定 // "ドメイン名 : IPアドレス" - "ifconfig.io:192.168.99.1" - "device1:192.168.99.11" - "device2:192.168.99.12" - "device3:192.168.99.13" - (以下、省略。device10まで設定) cap_add: - NET_ADMIN
4.dockerコンテナを起動する
$ docker-compose up
5.PCのDNSサーバーのアドレスを設定する
6. OpenDHCPServer.iniの一部変更し、OpenDHCPServerを再起動する
DomainServer=192.168.99.1 //DNSサーバーのIPアドレスを設定する
7.nslookupでDNSを確認する
$ nslookup 192.168.99.11 サーバー:ifconfig.io Address: 192.168.99.1 名前:device1 Address: 192.168.99.11
無事に、DNSの逆引きをすることができた。
もしDNSが確認できない場合
ping
でファイアウォールなどの影響がないか確認してください。
一方向のみpingが通らない場合は、以下を確認してみてください。
- コントロールパネルから Windowsファイアウォールを選択する
- 詳細設定をクリックする
- 「ファイルとプリンターの共有(エコー要求 - ICMPv4 受信)」をダブルクリックする
- 「接続を許可する(L)」のラジオボタンにチェックし、「OK」を選択する
まとめ
Hyper-Vがあったおかげで、Windows上で意外にも簡単にDockerでDNSサーバーを構築することができた。
では、ステキな開発ライフを。