content/explugins/recursor.md
+++ title = "recursor" description = "recursor resolves domains using defined IP addresses or resolving other mapped domains using defined resolvers" weight = 10 tags = [ "plugin" , "recursor" ] categories = [ "plugin", "external" ] date = "2023-01-30T16:15:00+02:00" repo = "https://github.com/kinjelom/coredns-recursor" home = "https://github.com/kinjelom/coredns-recursor/blob/main/README.md" +++
The recursor resolves domains using defined IP addresses or resolving other mapped domains using defined resolvers.
recursor {
[external-yaml config-file-path]
[external-json config-file-path]
[verbose 0..2]
zone: zone.name
[resolver non-default {
urls udp://ip-1:port udp://ip-n:port
[timeout_ms 500]
}]
[alias alias-name | * {
[hosts domain-1 domain-n]
[ips ip-1 ip-n]
[resolver_name non-default]
[ttl custom-ttl]
}]
}
The recursor definition:
zone - DNS zone for the recursorverbose - stdout logs level:
0 - minimal1 - middle2 - talkativeresolvers - other DNS servers:
default overrides system default resolverurls: list of URL addresses, example: udp://127.0.0.1:53 (system default is represented by ://default)timeout_ms: resolver connection timeout in millisecodsaliases - domain aliases:
* if you want the recursor to be a DNS repeaterips: IP addresses to return as a part of answerhosts: domains to be resolved so that the IP addresses obtained in this way will be returned as a part of answerresolver_name: the defined resolver reference, default is... default of course :)ttl: DNS record Time To Live in secondsIf monitoring is enabled (via the prometheus directive) the following metric is exported.
This plugin implements dynamic health checking. It will always return healthy though.
recursor {
[external-yaml config-file-path]
[external-json config-file-path]
[verbose 0..2]
zone: demo.svc
resolver dns-c {
urls udp://1.1.1.1:53 udp://1.0.0.1:53
timeout_ms 500
}
resolver dns-g {
urls udp://8.8.8.8:53 udp://8.8.4.4:53
}
resolver demo {
urls udp://10.0.0.1:53
}
alias alias1 {
hosts www.example.org www.example.com
resolver_name dns-c
ttl 11
}
alias alias2 {
ips 10.0.0.1 10.0.0.2
ttl 12
}
alias alias3 {
ips 10.0.0.1 10.0.0.2
hosts www.example.net
resolver_name dns-g
ttl 13
}
alias alias4 {
hosts www.example.net
ttl 14
}
alias * {
resolver_name demo
ttl 15
}
}
zone: demo.svc
resolvers:
dns-c:
urls: [ udp://1.1.1.1:53, udp://1.0.0.1:53 ]
timeout_ms: 500
dns-g:
urls: [ udp://8.8.8.8:53, udp://8.8.4.4:53 ]
demo:
urls: [ udp://10.0.0.1:53 ]
aliases:
alias1:
hosts: [ www.example.org, www.example.com ]
resolver_name: dns-c
ttl: 11
alias2:
ips: [ 10.0.0.1, 10.0.0.2 ]
ttl: 12
alias3:
ips: [ 10.0.0.1, 10.0.0.2 ]
hosts: [ www.example.net ]
resolver_name: dns-g
ttl: 13
alias4:
hosts: [ www.example.net ]
ttl: 14
"*":
resolver_name: demo
ttl: 15
{
"zone": "demo.svc",
"resolvers": {
"dns-c": {
"urls": [ "udp://1.1.1.1:53", "udp://1.0.0.1:53" ],
"timeout_ms": 500
},
"dns-g": {
"urls": [ "udp://8.8.8.8:53", "udp://8.8.4.4:53" ]
},
"demo": {
"urls": [ "udp://10.0.0.1:53" ]
}
},
"aliases": {
"alias1": {
"hosts": [ "www.example.org", "www.example.com" ],
"resolver_name": "dns-c",
"ttl": 11
},
"alias2": {
"ips": [ "10.0.0.1", "10.0.0.2" ],
"ttl": 12
},
"alias3": {
"ips": [ "10.0.0.1", "10.0.0.2" ],
"hosts": [ "www.example.net" ],
"resolver_name": "dns-g",
"ttl": 13
},
"alias4": {
"hosts": [ "www.example.net" ],
"ttl": 14
},
"*": {
"resolver_name": "demo",
"ttl": 15
}
}
}
See the manual.