ニートのMEMO

ニート生活をしたかった社会人がネットワークやサーバ、プログラミングなどについて勉強したことをメモとして残しているブログです。

Unbound on CentOS7でローカルDNSサーバを構築してみる

【目標】

ホストOSからnslookupで名前解決できていることの確認とブラウザからIPアドレスではなくドメインでアクセスできればOK

前回までの記事

Vagrantの使い方

katoko.hatenablog.com

VagrantでWebServerとUnbound用サーバの構築

katoko.hatenablog.com

Unboundの構築

//パッケージの更新
sudo yum -y update
//ifconfigでinterfaceにIPアドレスが振られていない場合に振る
sudo ifconfig enp0s8 192.168.33.20 netmask 255.255.255.0
//yumでunboundのインストール
sudo yum -y install unbound
//unboundの設定ファイルを書き換える(基本的にコメントアウトか加筆する)
sudo vim /etc/unbound/unbound.conf

server:
    verbosity: 1
    interface: 0.0.0.0 //すべての通信に対して名前解決を行う
    access-control: 0.0.0.0/0 refuse    //defaultは遮断
   //192.168.33.0/24のネットワークは許可(ホストのvagrant用vboxnetが192.168.33.0/24なので←vagrantを使う場合は基本的に同じはず)
    access-control: 192.168.33.0/24 allow
    //test.example.comという存在しないURLを名前解決し、webserverにアクセスできるようにする
    local-data: "test.example.com. IN A 192.168.33.30"

//すべてのドメインに対して名前解決ができない場合は次のDNSサーバー(Googleが提供している)にforwardingする
forward-zone:
    name: "."
    forward-addr: 8.8.8.8
    forward-addr: 8.8.4.4

<補足> 正式なURLでは、末尾に「.」がつく
→ test.example.com.

unboundの起動

$ sudo systemctl start unbound
$ sudo systemctl enable unbound

DNSサーバの変更

/etc/resolv.confを編集しないといけないがNetworkManagerの影響でnetworkサービスを再起動すると設定がデフォルトに戻ってしまう
そこでネットワーク起動時のインターフェースの設定を書き換える

sudo vim /etc/sysconfig/network-scripts/ifcfg-enp0s8
…
DNS1=127.0.0.1  (DNSサーバを追記、unboundサーバのIPアドレスでも可)

//networkサービスの再起動
$ sudo systemctl restart network

//DNSサーバのアドレスが書き換わっていることを確認
cat /etc/resolv.conf

…
nameserver 127.0.0.1
…

検証(名前解決できているか確認)

ホストOSは以下の画面で別途DNSサーバの追加が必要
※追加するDNSは一番上に設定する

f:id:katoko-o:20180512121243p:plain

【unbound起動状態】

[ホストOS]
nslookup test.example.com

[ゲストOS]
nslookup test.example.com

以下のようになっていれば成功(左:ゲストOS、右:ホストOS)

f:id:katoko-o:20180512121304p:plain

ホストOSからWebブラウザでも確認(URL:test.example.com)

f:id:katoko-o:20180512121337p:plain

【unbound停止状態】

[ホストOS]
nslookup test.example.com

[ゲストOS]
nslookup test.example.com

以下のように名前解決できないことが確認できる

f:id:katoko-o:20180512121319p:plain

最後に

ローカルDNSサーバをたてられたので満足

よくDNSサーバとして利用されるBINDとunboundの違いとしては
BINDは昔からあるもので権威DNSサーバにもキャッシュサーバにも使えるがバグが多い

unboundはキャッシュサーバと部分的な権威DNSサーバの機能しかないがBINDよりも2〜4倍ほど性能がいい

あと動作としてよくわからなかったのが

  • unbound止めてもpingが通り続けていたこと
  • DNSサーバから消すとpingが通らなくなること
  • unbound動いてて名前解決もできているのにping通らないことがあったこと