| 
									
										
										
										
											2019-08-30 15:58:25 +01:00
										 |  |  | .\" Generated by Mmark Markdown Processer - mmark.miek.nl | 
					
						
							| 
									
										
										
										
											2020-06-13 07:41:05 -07:00
										 |  |  | .TH "COREDNS-FORWARD" 7 "June 2020" "CoreDNS" "CoreDNS Plugins" | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 12:37:27 +01:00
										 |  |  | .SH "NAME" | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							|  |  |  | \fIforward\fP - facilitates proxying DNS messages to upstream resolvers. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 12:37:27 +01:00
										 |  |  | .SH "DESCRIPTION" | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							|  |  |  | The \fIforward\fP plugin re-uses already opened sockets to the upstreams. It supports UDP, TCP and | 
					
						
							|  |  |  | DNS-over-TLS and uses in band health checking. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							| 
									
										
										
										
											2020-03-06 11:11:45 +00:00
										 |  |  | When it detects an error a health check is performed. This checks runs in a loop, starting with | 
					
						
							|  |  |  | a \fI0.5s\fP interval and exponentially backing off with randomized intervals up to \fI15s\fP for as long | 
					
						
							|  |  |  | as the upstream reports unhealthy. The exponential backoff will reset to \fI0.5s\fP after 2 minutes. | 
					
						
							|  |  |  | Once healthy we stop health checking (until the next error). The health checks use a recursive | 
					
						
							|  |  |  | DNS query (\fB\fC. IN NS\fR) to get upstream health. Any response that is not a network error (REFUSED, | 
					
						
							|  |  |  | NOTIMPL, SERVFAIL, etc) is taken as a healthy upstream. The health check uses the same protocol as | 
					
						
							|  |  |  | specified in \fBTO\fP. If \fB\fCmax_fails\fR is set to 0, no checking is performed and upstreams will always | 
					
						
							|  |  |  | be considered healthy. | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							|  |  |  | When \fIall\fP upstreams are down it assumes health checking as a mechanism has failed and will try to | 
					
						
							|  |  |  | connect to a random upstream (which may or may not work). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							|  |  |  | This plugin can only be used once per Server Block. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 12:37:27 +01:00
										 |  |  | .SH "SYNTAX" | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | In its most basic form, a simple forwarder uses this syntax: | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							|  |  |  | .RS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | .nf | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | forward FROM TO... | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .fi | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .RE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fBFROM\fP is the base domain to match for the request to be forwarded. | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fBTO...\fP are the destination endpoints to forward to. The \fBTO\fP syntax allows you to specify | 
					
						
							|  |  |  | a protocol, \fB\fCtls://9.9.9.9\fR or \fB\fCdns://\fR (or no protocol) for plain DNS. The number of upstreams is | 
					
						
							|  |  |  | limited to 15. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							|  |  |  | Multiple upstreams are randomized (see \fB\fCpolicy\fR) on first use. When a healthy proxy returns an error | 
					
						
							|  |  |  | during the exchange the next upstream in the list is tried. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | Extra knobs are available with an expanded syntax: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							|  |  |  | .RS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .nf | 
					
						
							|  |  |  | forward FROM TO... { | 
					
						
							|  |  |  |     except IGNORED\_NAMES... | 
					
						
							|  |  |  |     force\_tcp | 
					
						
							|  |  |  |     prefer\_udp | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  |     expire DURATION | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  |     max\_fails INTEGER | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  |     tls CERT KEY CA | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  |     tls\_servername NAME | 
					
						
							|  |  |  |     policy random|round\_robin|sequential | 
					
						
							| 
									
										
										
										
											2020-03-06 11:11:45 +00:00
										 |  |  |     health\_check DURATION [no\_rec] | 
					
						
							|  |  |  |     max\_concurrent MAX | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | .fi | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .RE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fBFROM\fP and \fBTO...\fP as above. | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fBIGNORED_NAMES\fP in \fB\fCexcept\fR is a space-separated list of domains to exclude from forwarding. | 
					
						
							|  |  |  | Requests that match none of these names will be passed through. | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fB\fCforce_tcp\fR, use TCP even when the request comes in over UDP. | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fB\fCprefer_udp\fR, try first using UDP even when the request comes in over TCP. If response is truncated | 
					
						
							|  |  |  | (TC flag set in response) then do another attempt over TCP. In case if both \fB\fCforce_tcp\fR and | 
					
						
							|  |  |  | \fB\fCprefer_udp\fR options specified the \fB\fCforce_tcp\fR takes precedence. | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fB\fCmax_fails\fR is the number of subsequent failed health checks that are needed before considering | 
					
						
							|  |  |  | an upstream to be down. If 0, the upstream will never be marked as down (nor health checked). | 
					
						
							|  |  |  | Default is 2. | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fB\fCexpire\fR \fBDURATION\fP, expire (cached) connections after this time, the default is 10s. | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fB\fCtls\fR \fBCERT\fP \fBKEY\fP \fBCA\fP define the TLS properties for TLS connection. From 0 to 3 arguments can be | 
					
						
							|  |  |  | provided with the meaning as described below | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .RS | 
					
						
							|  |  |  | .IP \(en 4 | 
					
						
							|  |  |  | \fB\fCtls\fR - no client authentication is used, and the system CAs are used to verify the server certificate | 
					
						
							|  |  |  | .IP \(en 4 | 
					
						
							|  |  |  | \fB\fCtls\fR \fBCA\fP - no client authentication is used, and the file CA is used to verify the server certificate | 
					
						
							|  |  |  | .IP \(en 4 | 
					
						
							|  |  |  | \fB\fCtls\fR \fBCERT\fP \fBKEY\fP - client authentication is used with the specified cert/key pair. | 
					
						
							|  |  |  | The server certificate is verified with the system CAs | 
					
						
							|  |  |  | .IP \(en 4 | 
					
						
							|  |  |  | \fB\fCtls\fR \fBCERT\fP \fBKEY\fP  \fBCA\fP - client authentication is used with the specified cert/key pair. | 
					
						
							|  |  |  | The server certificate is verified using the specified CA file | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .RE | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fB\fCtls_servername\fR \fBNAME\fP allows you to set a server name in the TLS configuration; for instance 9.9.9.9 | 
					
						
							|  |  |  | needs this to be set to \fB\fCdns.quad9.net\fR. Multiple upstreams are still allowed in this scenario, | 
					
						
							|  |  |  | but they have to use the same \fB\fCtls_servername\fR. E.g. mixing 9.9.9.9 (QuadDNS) with 1.1.1.1 | 
					
						
							|  |  |  | (Cloudflare) will not work. | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fB\fCpolicy\fR specifies the policy to use for selecting upstream servers. The default is \fB\fCrandom\fR. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .RS | 
					
						
							|  |  |  | .IP \(en 4 | 
					
						
							|  |  |  | \fB\fCrandom\fR is a policy that implements random upstream selection. | 
					
						
							|  |  |  | .IP \(en 4 | 
					
						
							|  |  |  | \fB\fCround_robin\fR is a policy that selects hosts based on round robin ordering. | 
					
						
							|  |  |  | .IP \(en 4 | 
					
						
							|  |  |  | \fB\fCsequential\fR is a policy that selects hosts based on sequential ordering. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .RE | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							| 
									
										
										
										
											2020-03-06 11:11:45 +00:00
										 |  |  | \fB\fChealth_check\fR configure the behaviour of health checking of the upstream servers | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .RS | 
					
						
							|  |  |  | .IP \(en 4 | 
					
						
							|  |  |  | \fB\fC<duration>\fR - use a different duration for health checking, the default duration is 0.5s. | 
					
						
							|  |  |  | .IP \(en 4 | 
					
						
							|  |  |  | \fB\fCno_rec\fR - optional argument that sets the RecursionDesired-flag of the dns-query used in health checking to \fB\fCfalse\fR. | 
					
						
							|  |  |  | The flag is default \fB\fCtrue\fR. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .RE | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fB\fCmax_concurrent\fR \fBMAX\fP will limit the number of concurrent queries to \fBMAX\fP.  Any new query that would | 
					
						
							|  |  |  | raise the number of concurrent queries above the \fBMAX\fP will result in a SERVFAIL response. This | 
					
						
							|  |  |  | response does not count as a health failure. When choosing a value for \fBMAX\fP, pick a number | 
					
						
							|  |  |  | at least greater than the expected \fIupstream query rate\fP * \fIlatency\fP of the upstream servers. | 
					
						
							|  |  |  | As an upper bound for \fBMAX\fP, consider that each concurrent query will use about 2kb of memory. | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							|  |  |  | Also note the TLS config is "global" for the whole forwarding proxy if you need a different | 
					
						
							|  |  |  | \fB\fCtls-name\fR for different upstreams you're out of luck. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							| 
									
										
										
										
											2020-06-13 07:41:05 -07:00
										 |  |  | On each endpoint, the timeouts for communication are set as follows: | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							| 
									
										
										
										
											2020-06-13 07:41:05 -07:00
										 |  |  | The dial timeout by default is 30s, and can decrease automatically down to 100ms based on early results. | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .IP \(bu 4 | 
					
						
							| 
									
										
										
										
											2020-06-13 07:41:05 -07:00
										 |  |  | The read timeout is static at 2s. | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 12:37:27 +01:00
										 |  |  | .SH "METRICS" | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							| 
									
										
										
										
											2019-10-10 07:45:28 +01:00
										 |  |  | If monitoring is enabled (via the \fIprometheus\fP plugin) then the following metric are exported: | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | .IP \(bu 4 | 
					
						
							| 
									
										
										
										
											2020-06-24 04:54:32 +00:00
										 |  |  | \fB\fCcoredns_forward_requests_total{to}\fR - query count per upstream. | 
					
						
							| 
									
										
										
										
											2020-06-24 12:54:03 +08:00
										 |  |  | .IP \(bu 4 | 
					
						
							|  |  |  | \fB\fCcoredns_forward_responses_total{to}\fR - Counter of responses made per upstream. | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .IP \(bu 4 | 
					
						
							| 
									
										
										
										
											2020-06-24 12:54:03 +08:00
										 |  |  | \fB\fCcoredns_forward_request_duration_seconds{to}\fR - duration per upstream interaction. | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .IP \(bu 4 | 
					
						
							| 
									
										
										
										
											2020-03-31 14:18:39 +00:00
										 |  |  | \fB\fCcoredns_forward_responses_total{to, rcode}\fR - count of RCODEs per upstream. | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .IP \(bu 4 | 
					
						
							| 
									
										
										
										
											2020-03-31 14:18:39 +00:00
										 |  |  | \fB\fCcoredns_forward_healthcheck_failures_total{to}\fR - number of failed health checks per upstream. | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .IP \(bu 4 | 
					
						
							| 
									
										
										
										
											2020-03-31 14:18:39 +00:00
										 |  |  | \fB\fCcoredns_forward_healthcheck_broken_total{}\fR - counter of when all upstreams are unhealthy, | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | and we are randomly (this always uses the \fB\fCrandom\fR policy) spraying to an upstream. | 
					
						
							| 
									
										
										
										
											2020-03-06 11:11:45 +00:00
										 |  |  | .IP \(bu 4 | 
					
						
							| 
									
										
										
										
											2020-03-31 14:18:39 +00:00
										 |  |  | \fB\fCmax_concurrent_rejects_total{}\fR - counter of the number of queries rejected because the | 
					
						
							| 
									
										
										
										
											2020-03-06 11:11:45 +00:00
										 |  |  | number of concurrent queries were at maximum. | 
					
						
							| 
									
										
										
										
											2019-09-27 13:30:22 +01:00
										 |  |  | Where \fB\fCto\fR is one of the upstream servers (\fBTO\fP from the config), \fB\fCrcode\fR is the returned RCODE | 
					
						
							|  |  |  | from the upstream. | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-06 11:11:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 12:37:27 +01:00
										 |  |  | .SH "EXAMPLES" | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							|  |  |  | Proxy all requests within \fB\fCexample.org.\fR to a nameserver running on a different port: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							|  |  |  | .RS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .nf | 
					
						
							|  |  |  | example.org { | 
					
						
							|  |  |  |     forward . 127.0.0.1:9005 | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | .fi | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .RE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							|  |  |  | Load balance all requests between three resolvers, one of which has a IPv6 address. | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							|  |  |  | .RS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .nf | 
					
						
							|  |  |  | \&. { | 
					
						
							|  |  |  |     forward . 10.0.0.10:53 10.0.0.11:1053 [2003::1]:53 | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | .fi | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .RE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							|  |  |  | Forward everything except requests to \fB\fCexample.org\fR | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							|  |  |  | .RS | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .nf | 
					
						
							|  |  |  | \&. { | 
					
						
							|  |  |  |     forward . 10.0.0.10:1234 { | 
					
						
							|  |  |  |         except example.org | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | .fi | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .RE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							|  |  |  | Proxy everything except \fB\fCexample.org\fR using the host's \fB\fCresolv.conf\fR's nameservers: | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							|  |  |  | .RS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .nf | 
					
						
							|  |  |  | \&. { | 
					
						
							|  |  |  |     forward . /etc/resolv.conf { | 
					
						
							|  |  |  |         except example.org | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | .fi | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .RE | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							|  |  |  | Proxy all requests to 9.9.9.9 using the DNS-over-TLS protocol, and cache every answer for up to 30 | 
					
						
							|  |  |  | seconds. Note the \fB\fCtls_servername\fR is mandatory if you want a working setup, as 9.9.9.9 can't be | 
					
						
							|  |  |  | used in the TLS negotiation. Also set the health check duration to 5s to not completely swamp the | 
					
						
							|  |  |  | service with health checks. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							|  |  |  | .RS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .nf | 
					
						
							|  |  |  | \&. { | 
					
						
							|  |  |  |     forward . tls://9.9.9.9 { | 
					
						
							|  |  |  |        tls\_servername dns.quad9.net | 
					
						
							|  |  |  |        health\_check 5s | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |     cache 30 | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 15:00:25 +00:00
										 |  |  | .fi | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .RE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PP | 
					
						
							| 
									
										
										
										
											2018-12-11 20:46:02 +00:00
										 |  |  | Or with multiple upstreams from the same provider | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							|  |  |  | .RS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .nf | 
					
						
							|  |  |  | \&. { | 
					
						
							|  |  |  |     forward . tls://1.1.1.1 tls://1.0.0.1 { | 
					
						
							|  |  |  |        tls\_servername cloudflare\-dns.com | 
					
						
							|  |  |  |        health\_check 5s | 
					
						
							| 
									
										
										
										
											2018-12-11 20:46:02 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |     cache 30 | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-11 20:46:02 +00:00
										 |  |  | .fi | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .RE | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 12:37:27 +01:00
										 |  |  | .SH "BUGS" | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							|  |  |  | The TLS config is global for the whole forwarding proxy if you need a different \fB\fCtls_servername\fR for | 
					
						
							|  |  |  | different upstreams you're out of luck. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-24 12:37:27 +01:00
										 |  |  | .SH "ALSO SEE" | 
					
						
							| 
									
										
										
										
											2019-04-06 08:42:40 +01:00
										 |  |  | .PP | 
					
						
							|  |  |  | RFC 7858 | 
					
						
							|  |  |  | \[la]https://tools.ietf.org/html/rfc7858\[ra] for DNS over TLS. | 
					
						
							|  |  |  | 
 |