Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
COREDNS-VIEW(7)			CoreDNS	Plugins		       COREDNS-VIEW(7)

NAME
       view  -	defines	 conditions  that  must	be met for a DNS request to be
       routed to the server block.

DESCRIPTION
       view defines an expression that must evaluate to	true for a DNS request
       to be routed to the server block.  This enables advanced	 server	 block
       routing functions such as split dns.

SYNTAX
	      view NAME	{
		expr EXPRESSION
	      }

          view	 NAME  -  The name of the view used by metrics and exported as
	   metadata for	requests that match the	view's expression

          expr	EXPRESSION - CoreDNS will only route incoming queries  to  the
	   enclosing server block if the EXPRESSION evaluates to true. See the
	   Expressions section for available variables and functions.  If mul-
	   tiple  instances  of	view are defined, all EXPRESSION must evaluate
	   to true for CoreDNS will only route incoming	queries	to the enclos-
	   ing server block.

       For expression syntax and examples, see the  Expressions	 and  Examples
       sections.

EXAMPLES
       Implement  CIDR	based split DNS	routing.  This will return a different
       answer for test.	depending on client's IP address.  It returns  ...   *
       test.  3600  IN	A  1.1.1.1,  for  queries  with	 a  source  address in
       127.0.0.0/24 * test. 3600 IN A 2.2.2.2, for queries with	a  source  ad-
       dress  in 192.168.0.0/16	* test.	3600 IN	AAAA 2001:0DB8::1, for queries
       with a source address in	2001:0DB8::/32 * test. 3600 IN A 3.3.3.3,  for
       all others

	      .	{
		view example1 {
		  expr incidr(client_ip(), '127.0.0.0/24')
		}
		hosts {
		  1.1.1.1 test
		}
	      }

	      .	{
		view example2 {
		  expr incidr(client_ip(), '192.168.0.0/16')
		}
		hosts {
		  2.2.2.2 test
		}
	      }

	      .	{
		view v6_example1 {
		  expr incidr(client_ip(), '2001:0DB8::/32')
		}
		hosts {
		  2001:0DB8::1 test
		}
	      }

	      }

	      .	{
		hosts {
		  3.3.3.3 test
		}
	      }

       Send  all  A  and  AAAA requests	to 10.0.0.6, and all other requests to
       10.0.0.1.

	      .	{
		view example {
		  expr type() in ['A', 'AAAA']
		}
		forward	. 10.0.0.6
	      }

	      .	{
		forward	. 10.0.0.1
	      }

       Send all	requests for abc.*.example.com (where *	can be any  number  of
       labels),	 to  10.0.0.2,	and all	other requests to 10.0.0.1.  Note that
       the regex pattern is enclosed in	single quotes, and backslashes are es-
       caped with backslashes.

	      .	{
		view example {
		  expr name() matches '^abc\\..*\\.example\\.com\\.$'
		}
		forward	. 10.0.0.2
	      }

	      .	{
		forward	. 10.0.0.1
	      }

EXPRESSIONS
       To  evaluate  expressions,  view	 uses  the  expr-lang/expr  package  (
       https://github.com/expr-lang/expr   <https://github.com/expr-lang/expr>
       ).  For example,	an expression could  look  like:  (type()  ==  'A'  &&
       name() == 'example.com.') || client_ip()	== '1.2.3.4'.

       All expressions should be written to evaluate to	a boolean value.

       See https://github.com/expr-lang/expr/blob/master/docs/Language-Defini-
       tion.md	 <https://github.com/expr-lang/expr/blob/master/docs/Language-
       Definition.md> as a detailed reference for valid	syntax.

   AVAILABLE EXPRESSION	FUNCTIONS
       In the context of the view plugin, expressions can reference DNS	 query
       information by using utility functions defined below.

   DNS QUERY FUNCTIONS
          bufsize() int: the EDNS0 buffer size	advertised in the query

          class() string: class of the	request	(IN, CH, ...)

          client_ip()	string:	 client's IP address, for IPv6 addresses these
	   are enclosed	in brackets: [::1]

          do()	bool: the EDNS0	DO (DNSSEC OK) bit set in the query

          id()	int: query ID

          name() string: name of the request (the domain name requested  end-
	   ing with a dot): example.com.

          opcode() int: query OPCODE

          port() string: client's port

          proto() string: protocol used (tcp or udp)

          server_ip()	string:	 server's IP address; for IPv6 addresses these
	   are enclosed	in brackets: [::1]

          server_port() string	: server's port

          size() int: request size in bytes

          type() string: type of the request (A, AAAA,	TXT, ...)

   UTILITY FUNCTIONS
          incidr(ip string, cidr string) bool:	returns	true if	ip  is	within
	   cidr

          metadata(label  string) - returns the value for the metadata	match-
	   ing label

METADATA
       The view	plugin will publish the	following metadata,  if	 the  metadata
       plugin is also enabled:

          view/name: the name of the view handling the	current	request

CoreDNS				   June	2025		       COREDNS-VIEW(7)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=coredns-view&sektion=7&manpath=FreeBSD+Ports+15.0>

home | help