aboutsummaryrefslogtreecommitdiff
path: root/middleware/reverse/README.md
blob: e9189e5feb7e21330cd00c817a384636df5e2de7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# reverse

The *reverse* middleware allows CoreDNS to respond dynamicly to an PTR request and the related A/AAAA request.

## Syntax

~~~
reverse NETWORK... {
    hostname TEMPLATE
    [ttl TTL]
    [fallthrough]
~~~

* **NETWORK** one or more CIDR formatted networks to respond on.
* `hostname` inject the IP and zone to an template for the hostname. Defaults to "ip-{IP}.{zone[1]}". See below for template.
* `ttl` defaults to 60
* `fallthrough` If zone matches and no record can be generated, pass request to the next middleware.

### Template Syntax

The template for the hostname is used for generating the PTR for an reverse lookup and matching the
forward lookup back to an IP.

#### `{ip}`

The `{ip}` symbol is **required** to make reverse work.
For IPv4 lookups the "." is replaced with an "-", i.e.: 10.1.1.1 results in "10-1-1-1"
With IPv6 lookups the ":" is removed, and any zero ranged are expanded, i.e.:
"ffff::ffff" results in "ffff000000000000000000000000ffff"

#### `{zone[i]}`

The `{zone[i]}` symbol is **optional** and can be replaced by a fixed (zone) string.
The zone will be matched by the zones listed in *this* configuration stanza.
`i` needs to be replaced to the index of the configured listener zones, starting with 1.

## Examples

~~~ txt
arpa compute.internal {
    # proxy unmatched requests
    proxy . 8.8.8.8

    # answer requests for IPs in this networks
    # PTR 1.0.32.10.in-addr.arpa. 3600 ip-10-0-32-1.compute.internal.
    # A ip-10-0-32-1.compute.internal. 3600 10.0.32.1
    # v6 is also possible
    # PTR 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.d.f.ip6.arpa. 3600 ip-fd010000000000000000000000000001.compute.internal.
    # AAAA ip-fd010000000000000000000000000001.compute.internal. 3600 fd01::1
    reverse 10.32.0.0/16 fd01::/16 {
        # template of the ip injection to hostname, zone resolved to compute.internal.
        hostname ip-{ip}.{zone[2]}

        ttl 3600

        # Forward unanswered or unmatched requests to proxy # without this flag, requesting A/AAAA
        records on compute.internal. will end here.
        fallthrough
    }
}
~~~


~~~ txt
32.10.in-addr.arpa.arpa arpa.company.org {

    reverse 10.32.0.0/16 {
        # template of the ip injection to hostname, zone resolved to arpa.company.org.
        hostname "ip-{ip}.v4.{zone[2]}"

        ttl 3600

        # fallthrough is not required, v4.arpa.company.org. will be only answered here
    }

    # cidr closer to the ip wins, so we can overwrite the "default"
    reverse 10.32.2.0/24 {
        # its also possible to set fix domain suffix
        hostname ip-{ip}.fix.arpa.company.org.

        ttl 3600
    }
}
~~~