Dnsmasqを使ってDNSサーバとDHCPサーバを構築する

目次

  1. 1. はじめに
  2. 2. ローカルDNSサーバとは
  3. 3. 前提
  4. 4. Dnsmasqのインストール
  5. 5. Dnsmasqの設定
  6. 6. RaspberryPiのネットワークインタフェースを設定
  7. 7. 他のDHCPサーバを停止する
  8. 8. Dnsmasqの起動
  9. 9. 動作確認

はじめに

RaspberryPiは消費電力が非常に少ないので常時起動しておくサーバに最適です。

そこで今回は、RaspberryPiにDnsmasqをインストールし、ローカルDNSサーバ、DHCPサーバを構築してみます。

ローカルDNSサーバとは

その名の通り、ローカルなIPアドレスにドメインを振るサーバです。

例えば、192.168.1.10というアドレスにmain.localというようなドメインを割り当てることができます。

ローカルネットワークに大量に機器が接続されている場合には、IPアドレスではなくドメインでアクセスできるようになるため、利便性の向上が見込めます。

前提

  • ルータのIPアドレス:192.168.0.1
  • RaspberryPiのIPアドレス:192.168.0.2

Dnsmasqのインストール

まず、パッケージリストの更新を行い、Dnsmasqをインストールします。

sudo apt-get update
sudo apt-get install dnsmasq

インストールを続行するか質問されるのでyを入力します。

Do you want to continue? [Y/n] y

自動的にDnsmasqのサービスが開始されてしまうので一旦停止します。

sudo service dnsmasq stop

Dnsmasqの設定

デフォルトの設定ファイルをバックアップします。

sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.old

設定ファイルを編集します。

sudo vi /etc/dnsmasq.conf

/etc/dnsmasq.confの下のほうにある#conf-file=/etc/dnsmasq.more.conf行の#を削除します。

...
# Include another lot of configuration options.
conf-file=/etc/dnsmasq.more.conf
#conf-dir=/etc/dnsmasq.d

# Include all the files in a directory except those ending in .bak
#conf-dir=/etc/dnsmasq.d,.bak

# Include all files in a directory which end in .conf
#conf-dir=/etc/dnsmasq.d/*.conf

/etc/dnsmasq.more.confを作成し、編集します。

sudo vi /etc/dnsmasq.more.conf
domain-needed
bogus-priv
local = /local/
domain = local
expand-hosts

dhcp-range = 192.168.0.100, 192.168.0.200, 12h

dhcp-option = option:router, 192.168.0.1
dhcp-option = option:dns-server, 192.168.0.2, 192.168.0.1
dhcp-option = option:ntp-server, 192.168.0.1

dhcp-host = aa:aa:aa:aa:aa:aa, hoge, 192.168.0.10, infinite
dhcp-host = bb:bb:bb:bb:bb:bb, test

各行の説明をしていきます。

  • domain-needed
    • ローカルホスト名を上位DNSに転送しない
  • bogus-priv
    • ローカルIPアドレスの逆引きを上位DNSに転送しない
  • local = /local/
    • ショートドメイン名を補完するドメイン名(hoge -> hoge.local)
  • domain = local
    • ローカルドメイン名
  • expand-hosts
    • ショートホスト名を補完する
  • dhcp-range = 192.168.0.100, 192.168.0.200, 12h
    • DHCPで割り当てするアドレスの範囲とリース時間
    • 192.168.0.100 ~ 192.168.0.200までのアドレスをDHCPで12時間割り当てる
  • dhcp-option = option:router, 192.168.0.1
    • DHCPクライアントに通知するルータのIPアドレス
  • dhcp-option = option:dns-server, 192.168.0.2, 192.168.0.1
    • DHCPクライアントに通知するDNSサーバのIPアドレス
    • ここでは自分自身とルータのDNSサーバを指定
  • dhcp-option = option:ntp-server, 192.168.0.1
    • DHCPクライアントに通知するNTPサーバのIPアドレス
  • dhcp-host = aa:aa:aa:aa:aa:aa, hoge, 192.168.0.10, infinite
    • MACアドレスとホスト名、IPアドレスを紐付けする(リース時間無限)
  • dhcp-host = bb:bb:bb:bb:bb:bb, test
    • 指定されたMACアドレスを持つ機器に、ホスト名をつける(IPアドレスはDHCPで動的割付)

RaspberryPiのネットワークインタフェースを設定

/etc/network/interfacesを編集します。

sudo vi /etc/network/interfaces

RaspberryPiのIPアドレスを固定します。

auto eth0
iface eth0 inet static
    address 192.168.0.2
    network 192.168.0.0
    netmask 255.255.255.0
    broadcast 192.168.0.255
    gateway 192.168.0.1
    dns-nameservers 127.0.0.1 192.168.0.1
    dns-search local

他のDHCPサーバを停止する

ルータにDHCPサーバ機能が付加されている場合は、その機能をOFFにしてください。
設定方法については各ルータの設定マニュアルをみてください。

Dnsmasqの起動

sudo service dnsmasq start

動作確認

ping hoge

これで正常に応答が帰ってくれば完了です。