クイックスタート

クイックスタートガイド。

まず、CoreDNSを入手します。以下のいずれかの方法で入手してください。

  • 最新リリースをGitHubからダウンロードし、解凍します。これで「coredns」実行ファイルが作成されます。

  • gitからコンパイルするには、GitHubからソースコードを入手します。ディレクトリをcorednsに変更し、

    • go get - いくつかの依存関係を取得します。その他の依存関係はvendoredされています。
    • go build

    これで「coredns」実行ファイルが作成されます。

  • Dockerイメージdocker hubから入手します。

KubernetesでCoreDNSを使用する場合は、kubernetesプラグインを使用したSDに関するこの記事を確認してください。

このクイックスタートの残りの部分では、2つの異なるユースケースに焦点を当てます。

  1. CoreDNSを使用してゾーンファイルを配信する。オプションでゾーンに署名することもできます。
  2. CoreDNSを転送プロキシとして使用する。

CoreDNSは、通常Corefileと呼ばれる構成ファイルを使用して構成されます。

ファイルからの配信

ゾーンファイルから配信する場合は、fileプラグインを使用します。最初に、ゾーンexample.org.と配信するゾーンファイルから始めましょう。

次の内容でファイルexample.orgを作成します。

$ORIGIN example.org.
@	3600 IN	SOA sns.dns.icann.org. noc.dns.icann.org. (
				2017042745 ; serial
				7200       ; refresh (2 hours)
				3600       ; retry (1 hour)
				1209600    ; expire (2 weeks)
				3600       ; minimum (1 hour)
				)

	3600 IN NS a.iana-servers.net.
	3600 IN NS b.iana-servers.net.

www     IN A     127.0.0.1
        IN AAAA  ::1

次の内容でCorefile、Corefileを作成します。

example.org {
    file example.org
    prometheus     # enable metrics
    errors         # show errors
    log            # enable query logs
}

すべてが正しいかどうかを確認するために、CoreDNSを非標準ポートで起動します。 coredns -conf Corefile -dns.port 1053と入力し、digを使用してクエリを送信します。

% dig -p 1053 @localhost AAAA www.example.org +noall +answer

www.example.org.	3600	IN	AAAA	::1

logプラグインでクエリログを有効にしているため、クエリも標準出力に表示されるはずです。

::1 - [24/Jul/2017:10:10:44 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 121 133.449µs

ここから、CoreDNSをポート53で実行し、systemd(Linuxの場合)から起動するように有効にできます。サンプルスクリプトについては、デプロイメントリポジトリを参照してください。 filemetricserrorsプラグインの詳細については、こちらをご覧ください。

プロキシとしてのCoreDNS

別のプラグインは、proxyプラグインです。たとえば、HTTPSを介してDNSリクエストをGoogleに送信できます。次の内容でCorefileを作成します。

. {
    proxy . 8.8.8.8:53 {
        protocol https_google
    }
    prometheus
    errors
    log
}

上記と同様にCoreDNSを起動し、いくつかのクエリを送信します。この場合、CoreDNSはそれらをログに記録する必要があります。

::1 - [24/Jul/2017:10:44:15 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 76 83.396955ms
::1 - [24/Jul/2017:10:44:17 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 76 14.030914ms
::1 - [24/Jul/2017:10:44:19 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 76 13.286384ms

各クエリにかかった時間(「ms」単位)を見ると、非常に遅く、約83ms、13msです。したがって、キャッシュを追加し、cachingプラグインを有効にしましょう。 Corefileに単語「cache」を追加し、CoreDNSをグレースフルリロードします: kill -SIGUSR1 <pid_of_coredns>。そして、もう一度クエリを実行します。

::1 - [24/Jul/2017:11:33:54 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 76 43.469743ms
::1 - [24/Jul/2017:11:33:55 +0000] "AAAA IN www.example.org. udp 45 false 4096" NOERROR 73 133.073µs

最初はまだ「遅い」ですが、後続のクエリはわずか133µsしかかかりません。

考えられるエラー

healthのドキュメントには、「このプラグインは一度有効にするだけでよい」と記載されており、これが有効なCorefileであると考えるかもしれません。

health

. {
    whoami
}

しかし、これは機能せず、やや不可解なエラーにつながります。

"Corefile:3 - Error during parsing: Unknown directive '.'".

ここで何が起こるのでしょうか? healthはゾーンと見なされ、パーサーはディレクティブ(cacheetcdなど)を確認すると予想しますが、代わりに次のトークンは.であり、これはディレクティブではありません。 Corefileは次のように構成する必要があります。

. {
    whoami
    health
}

healthのドキュメントのその行は、一度healthが指定されると、1つのサーバーに対してのみ指定した場合でも、CoreDNSプロセス全体に対してグローバルであることを意味します。

こちらもご覧ください

CoreDNSで使用できる多数のその他のプラグインがあります。また、独自のプラグインを作成することもできます。

クエリがどのように処理されるかは、CoreDNSがDNSクエリを処理する方法の詳細な説明です。

Miek Gieben
公開日: および ドキュメントクイックスタートのタグが付けられ、675語を使用しています。