4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

corednsを使って30分で作る社内用DNS

Posted at

はじめに

社内では、ネットワークはあってもDNSを立てていなかったので、社内サーバーにアクセスするときは常にアドレスの直打ちをしていた。
その方法だとサーバーのアドレスが変更した時などの周知が大変になるなど、運用に難があったため、さくっと社内用のDNSを立てようとなった。
使うDNSは最近kubernetes関係で流行っているcorednsを使う。

ゴール

アドレスの直打ちではなく、名前入力だけで社内サーバーにアクセスできるようになる。

環境

MBP Sierra OS
Ubuntu Server 16.04(DNSサーバー ドメイン名:hoge.local)
Ubuntu Server 18.04(名前検索用サーバー ホスト名:piyo)

coredns Ver.1.1.3

Goのインストール

corednsはGolangで動いているが、サーバーにGoを入れていなかったため、はじめにGoをインストールする

$ sudo apt install golang-1.9

Goの1.9を直接インストールした場合はリンクがついていないため、手動でリンクをつけないといけない

$ sudo ln -s /usr/lib/go-1.9/bin/go /usr/bin/go
$ sudo ln -s /usr/lib/go-1.9/bin/gofmt /usr/bin/gofmt

この状態でならGoは起動するはず

$ go version
go version go1.9.2 linux/amd64

corednsのインストール

corednsのインストールはdockerで行う方法もあるが、インストール途中で失敗(Makefileが無いとメセージが出る)したため、公式ドキュメントのgitをクローンして入れる。

CoreDNS 公式

$ export GOPATH=${GOPATH-~/go}
$ mkdir -p $GOPATH/src/github.com/coredns
$ cd $GOPATH/src/github.com/coredns/
$ git clone https://github.com/coredns/coredns.git
$ cd coredns
$ make CHECKS= godeps all

インストールがうまくいけば下記コマンドが使える(makeしたパス内でしか動かない)

$ ./coredns -version
CoreDNS-1.1.3
linux/amd64, go1.9.2, 6fcb2dd

corednsの設定

Corefileの記述

corednsは「Corefile」を参照して名前解決を行う。
makeしたあとはこのCorefileがなかったため自作をする

$ sudo vi Corefile

. {
    errors
    log . {
        class denial
    }
    cache
    whoami
    proxy . 8.8.8.8:53 {
        protocol https_google
    }
}

 local {
    hosts /etc/hosts local {
      192.168.1.101 piyo.foo.local
    }
    errors
    log
    whoami
}

/etc/hostsの設定

今回は名前解決するクライアントが少なかったため、静的にhostsファイルを追加していくスタイルにした。

$ sudo vi /etc/hosts

192.168.1.101 piyo.foo.local

これで準備は完了したため実際にcorednsを起動してみる

特にオプションを記載しなければポートは53,設定ファイルはCorefileを読むようになっている

$ sudo ./coredns 

mac側の設定

macのdns設定を今回設定したサーバーのアドレスに変更する

主な手順は
Wifiのアイコンから「ネットワーク環境設定を開く」→詳細のDNSタブにサーバーのアドレスを追加して適用

でいける

mac側でnslookupを実行し、名前解決をしてみる

$ nslookup
Name:    piyo.foo.local
Address: 192.168.1.101

名前解決ができている

pingも同様に飛ばしてみるとちゃんと届くはず

最終操作

無事設定が終わったら、サーバーのバックグラウンドで動き続けるようにしておく

$ nohup sudo ./coredns &

終わりに

kubernetesの環境によく使われるcorednsだが、社内用dnsとしてもとても簡単に使える
動的な設定ではetcdを使うそうだが、今回は使わなかったためネットワークが大きくなった際にまた挑戦したい

つまづいたところ

corednsのインストール

公式ドキュメントのインストール方法にはバイナリ、docker、ソースから引っ張る(wget,git clone)という方法が推奨されていたが、git clone以外の方法が全て失敗したため今回この方法をとった。
いずれもMakefileがないというメッセージが出て止まってしまった

./coredns実行時のエラー

Corefileを作った後に./corednsを実行しようとした時に以下のメッセージが出た。

$ sudo ./coredns
listen tcp :8080: bind: address already in use

8080ポートのサービスはもともと別のサービスが動いていたが、
coredns内の設定で明記した箇所はない

調べてみると、当初Corefile内にpluginとして「health」を追加していたが、
これがGoで動いており、この設定に8080ポートが指定されていた

このhealthを削除したところエラーがなくなったため、これでよしとした

参考ページ

coredns公式マニュアル
Ubuntu 16.04にGolang 1.9をインストール
CoreDNS入門

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?