{{define "content"}} {{$s := .Data.Settings}}{{$st := .Data.Stats}}

Resolver

Recursive resolution is performed by forwarding to the upstream servers below.

Resolver settings
{{if not $s.DNS.Recursion}}
Recursion is turned off. This server answers only for its own authoritative zones; every other query is refused.
{{end}}
{{template "stat" dict "Label" "Forwarded queries" "Value" (num $st.Queries) "Icon" "bi-globe2"}} {{template "stat" dict "Label" "Failures" "Value" (num $st.Failures) "Icon" "bi-exclamation-triangle" "Tone" "danger"}} {{template "stat" dict "Label" "Average latency" "Value" (ms $st.AvgLatencyMS) "Icon" "bi-stopwatch"}} {{template "stat" dict "Label" "Healthy upstreams" "Value" (printf "%d / %d" $st.Healthy $st.Upstreams) "Icon" "bi-heart-pulse" "Tone" "success"}}
Upstream servers
{{if .Data.Upstreams}}
{{range .Data.Upstreams}} {{end}}
ServerStatus LatencyQueries FailuresLast used
{{.Address}} {{if .Healthy}} healthy {{else}} resting {{end}} {{if .LastError}}
{{truncate 60 .LastError}}
{{end}}
{{ms .LatencyMS}} {{num .Queries}} {{num .Failures}} {{if .LastUsed}}{{timeAgo .LastUsed}}{{else}}never{{end}}

A server that fails three times in a row is rested for twenty seconds and moved to the back of the selection order. The current strategy is {{$s.Resolver.Strategy}}.

{{else}}
{{template "empty" dict "Icon" "bi-globe2" "Title" "No upstream resolvers configured" "Message" "Recursive resolution needs at least one upstream server. Add one in the resolver settings."}}
{{end}}
Test an upstream
Recursion access control

Recursion is refused for any client not listed here. This is what keeps the server from becoming an open resolver.

Allowed networks
{{if $s.Resolver.AllowNetworks}}
{{range $s.Resolver.AllowNetworks}} {{.}} {{end}}
{{else}}
None — recursion is denied to every client.
{{end}}
{{if $s.Resolver.DenyNetworks}}
Denied networks
{{range $s.Resolver.DenyNetworks}} {{.}} {{end}}
Denies are evaluated before allows.
{{end}}
{{end}}