7839

雑草魂エンジニアブログ

【ネットワーク】内向き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アドレスからドメイン名を取得すること)

f:id:serip39:20200626003614j:plain

構築方法

Windows上の内向きDNSサーバーを構築するにあたり、以下の方法を検討した。(PCは、Windows Proであるが、Windows Serverを搭載していないモデルである。)

  1. BIND9をインストールする
  2. Docker上にDNSサーバーを構築する

1.BIND9をインストールする

www.isc.org

BIND(バインド)は、「Barkley Internet Name Domain」の略称であり、世界で最も多く利用されているOSSDNSサーバである。一番簡単に構築できそうであったが、インストーラーでエラーが発生してインストールすることができなかった。

f:id:serip39:20200626005259p:plain

本手段は不可能であると判断して、諦めることにした。(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サーバーのアドレスを設定する

f:id:serip39:20200626013940p:plain

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が通らない場合は、以下を確認してみてください。

  1. コントロールパネルから Windowsファイアウォールを選択する
  2. 詳細設定をクリックする
  3. 「ファイルとプリンターの共有(エコー要求 - ICMPv4 受信)」をダブルクリックする
  4. 「接続を許可する(L)」のラジオボタンにチェックし、「OK」を選択する

まとめ

Hyper-Vがあったおかげで、Windows上で意外にも簡単にDockerでDNSサーバーを構築することができた。

では、ステキな開発ライフを。