You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailscale/net/dns
Nick Hill 17335d2104 net/dns/resolver: forward SERVFAIL responses over PeerDNS
As per the docstring, (*forwarder).forwardWithDestChan should either send to responseChan
and returns nil, or returns a non-nil error (without sending to the channel).
However, this does not hold when all upstream DNS servers replied with an error.

We've been handling this special error path in (*Resolver).Query but not in (*Resolver).HandlePeerDNSQuery.
As a result, SERVFAIL responses from upstream servers were being converted into HTTP 503 responses,
instead of being properly forwarded as SERVFAIL within a successful HTTP response, as per RFC 8484, section 4.2.1:
A successful HTTP response with a 2xx status code (see Section 6.3 of [RFC7231]) is used for any valid DNS response,
regardless of the DNS response code. For example, a successful 2xx HTTP status code is used even with a DNS message
whose DNS response code indicates failure, such as SERVFAIL or NXDOMAIN.

In this PR we fix (*forwarder).forwardWithDestChan to no longer return an error when it sends a response to responseChan,
and remove the special handling in (*Resolver).Query, as it is no longer necessary.

Updates #13571

Signed-off-by: Nick Hill <mykola.khyl@gmail.com>
3 weeks ago
..
publicdns net/dns/publicdns: remove additional information in DOH URL passed to IPv6 address generation for controlD. 4 months ago
recursive all: use Go 1.22 range-over-int 7 months ago
resolvconffile clientupdate, net/dns: fix some "tailsacle" typos 7 months ago
resolver net/dns/resolver: forward SERVFAIL responses over PeerDNS 3 weeks ago
config.go all: add test for package comments, fix, add comments as needed 4 months ago
debian_resolvconf.go all: update copyright and license headers 2 years ago
direct.go net/dns: ensure /etc/resolv.conf is world-readable even with a umask 4 months ago
direct_linux.go net/dns: updated gonotify dependency to v2 that supports closable context 2 months ago
direct_notlinux.go all: update copyright and license headers 2 years ago
direct_test.go clientupdate, net/dns: fix some "tailsacle" typos 7 months ago
direct_unix_test.go net/dns: ensure /etc/resolv.conf is world-readable even with a umask 4 months ago
flush_default.go all: update copyright and license headers 2 years ago
flush_windows.go cmd/tailscaled, net/dns, wgengine/router: start Windows child processes with DETACHED_PROCESS when I/O is being piped 5 months ago
ini.go all: update copyright and license headers 2 years ago
ini_test.go all: update copyright and license headers 2 years ago
manager.go cli: implement `tailscale dns status` (#13353) 2 months ago
manager_darwin.go net/dns: support GetBaseConfig on Darwin OSS tailscaled (#13351) 2 months ago
manager_default.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 5 months ago
manager_freebsd.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 5 months ago
manager_linux.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 5 months ago
manager_linux_test.go net/dns: ensure /etc/resolv.conf is world-readable even with a umask 4 months ago
manager_openbsd.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 5 months ago
manager_tcp_test.go net/dns, health: raise health warning for failing forwarded DNS queries (#12888) 3 months ago
manager_test.go net/dns: ensure multiple hosts with the same IP address are combined into a single HostEntry 4 months ago
manager_windows.go net/dns: disable DNS registration for Tailscale interface on Windows 2 months ago
manager_windows_test.go util/winutil/gp, net/dns: add package for Group Policy API 4 months ago
nm.go all: cleanup unused code, part 2 (#10670) 11 months ago
noop.go all: update copyright and license headers 2 years ago
nrpt_windows.go util/winutil/gp, net/dns: add package for Group Policy API 4 months ago
openresolv.go net/dns: log more info when openresolv commands fail 9 months ago
osconfig.go net/dns: fix IsZero and Equal methods on OSConfig 2 months ago
osconfig_test.go net/dns: fix IsZero and Equal methods on OSConfig 2 months ago
resolvconf-workaround.sh all: update copyright and license headers 2 years ago
resolvconf.go net/dns: properly detect newer debian resolvconf 1 year ago
resolvconfpath_default.go net/dns: overwrite /tmp/resolv.conf on gokrazy 1 year ago
resolvconfpath_gokrazy.go net/dns: overwrite /tmp/resolv.conf on gokrazy 1 year ago
resolvd.go all: update copyright and license headers 2 years ago
resolved.go health, all: remove health.Global, finish plumbing health.Tracker 6 months ago
utf.go all: update copyright and license headers 2 years ago
utf_test.go all: update copyright and license headers 2 years ago
wsl_windows.go net/dns: ensure /etc/resolv.conf is world-readable even with a umask 4 months ago