redis

ソース ホーム

以下を有効にします
redis:github.com/codysnider/coredns-redis

redis - redis データベースからのゾーンデータの読み込みを可能にします。

説明

redis は redis データベースからゾーンデータの読み込みを可能にします。このプラグインは plugins.cfgetcd のすぐ隣に配置する必要があります。

構文

redis

redis は redis サーバーから権限ゾーンを読み込みます。

アドレスはデフォルトでローカル redis サーバー (localhost:6379) になります。

redis {
    address ADDR
    password PWD
    prefix PREFIX
    suffix SUFFIX
    connect_timeout TIMEOUT
    read_timeout TIMEOUT
    ttl TTL
}
  • address は、ホスト:ポート または ip:ポート の形式で接続する redis サーバーのアドレスです。
  • password は redis サーバーの 認証 キーです。
  • connect_timeout は redis サーバーの接続を待機する ms 単位の時間です。
  • read_timeout は redis サーバーの応答を待機する ms 単位の時間です。
  • ttl は提供されていない場合、DNS レコードのデフォルトの ttl、300 です。
  • prefix はすべての redis キーに PREFIX を追加します。
  • suffix はすべての redis キーに SUFFIX を追加します。

. {
    redis example.com {
        address localhost:6379
        password foobared
        connect_timeout 100
        read_timeout 100
        ttl 360
        prefix _dns:
    }
}

逆ゾーン

逆ゾーンはまだサポートされていません。

プロキシ

プロキシはまだサポートされていません。

redis db のゾーン形式

ゾーン

各ゾーンは、ゾーン をキーとするハッシュマップとして redis に格納されます。

redis-cli>KEYS *
1) "example.com."
2) "example.net."
redis-cli>

DNS RR

DNS RR は、アドレスをフィールドキーとして使用して、ハッシュマップ内の JSON 文字列として redis に格納されます。@ はゾーン自体の RR 値に使用されます。

A

{
    "a":{
        "ip4" : "1.2.3.4",
        "ttl" : 360
    }
}

AAAA

{
    "aaaa":{
        "ip6" : "::1",
        "ttl" : 360
    }
}

CNAME

{
    "cname":{
        "host" : "x.example.com.",
        "ttl" : 360
    }
}

TXT

{
    "txt":{
        "text" : "this is a text",
        "ttl" : 360
    }
}

NS

{
    "ns":{
        "host" : "ns1.example.com.",
        "ttl" : 360
    }
}

MX

{
    "mx":{
        "host" : "mx1.example.com",
        "priority" : 10,
        "ttl" : 360
    }
}

SRV

{
    "srv":{
        "host" : "sip.example.com.",
        "port" : 555,
        "priority" : 10,
        "weight" : 100,
        "ttl" : 360
    }
}

SOA

{
    "soa":{
        "ttl" : 100,
        "mbox" : "hostmaster.example.com.",
        "ns" : "ns1.example.com.",
        "refresh" : 44,
        "retry" : 55,
        "expire" : 66
    }
}

$ORIGIN example.net.
 example.net.                 300 IN  SOA   <SOA RDATA>
 example.net.                 300     NS    ns1.example.net.
 example.net.                 300     NS    ns2.example.net.
 *.example.net.               300     TXT   "this is a wildcard"
 *.example.net.               300     MX    10 host1.example.net.
 sub.*.example.net.           300     TXT   "this is not a wildcard"
 host1.example.net.           300     A     5.5.5.5
 _ssh.tcp.host1.example.net.  300     SRV   <SRV RDATA>
 _ssh.tcp.host2.example.net.  300     SRV   <SRV RDATA>
 subdel.example.net.          300     NS    ns1.subdel.example.net.
 subdel.example.net.          300     NS    ns2.subdel.example.net.

上記のゾーンデータは、以下のように redis に格納する必要があります。

redis-cli> hgetall example.net.
 1) "_ssh._tcp.host1"
 2) "{\"srv\":[{\"ttl\":300, \"target\":\"tcp.example.com.\",\"port\":123,\"priority\":10,\"weight\":100}]}"
 3) "*"
 4) "{\"txt\":[{\"ttl\":300, \"text\":\"this is a wildcard\"}],\"mx\":[{\"ttl\":300, \"host\":\"host1.example.net.\",\"preference\": 10}]}"
 5) "host1"
 6) "{\"a\":[{\"ttl\":300, \"ip\":\"5.5.5.5\"}]}"
 7) "sub.*"
 8) "{\"txt\":[{\"ttl\":300, \"text\":\"this is not a wildcard\"}]}"
 9) "_ssh._tcp.host2"
10) "{\"srv\":[{\"ttl\":300, \"target\":\"tcp.example.com.\",\"port\":123,\"priority\":10,\"weight\":100}]}"
11) "subdel"
12) "{\"ns\":[{\"ttl\":300, \"host\":\"ns1.subdel.example.net.\"},{\"ttl\":300, \"host\":\"ns2.subdel.example.net.\"}]}"
13) "@"
14) "{\"soa\":{\"ttl\":300, \"minttl\":100, \"mbox\":\"hostmaster.example.net.\",\"ns\":\"ns1.example.net.\",\"refresh\":44,\"retry\":55,\"expire\":66},\"ns\":[{\"ttl\":300, \"host\":\"ns1.example.net.\"},{\"ttl\":300, \"host\":\"ns2.example.net.\"}]}"
redis-cli>