FreeBSD Manual Pages
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 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 } } . { 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) • 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 : client'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 September 2022 COREDNS-VIEW(7)
NAME | DESCRIPTION | SYNTAX | EXAMPLES | EXPRESSIONS | METADATA
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+14.3.quarterly>
