I installed knot-resolver 6.1.0 on macos Sonoma through brew:
❯ brew info knot-resolver
==> knot-resolver ✔: stable 6.1.0 (bottled), HEAD
I can query the resolver through TCP, but not through UDP.
Here is a simple config:
workers: 1
network:
listen:
- interface: 127.0.0.1@53
local-data:
records: |
example.com A 123.4.5.6
logging:
level: debug
Requests:
❯ kdig example.com @127.0.0.1 +tcp +short
123.4.5.6
❯ kdig example.com @127.0.0.1 +short
;; WARNING: response timeout for 127.0.0.1@53(UDP)
;; WARNING: response timeout for 127.0.0.1@53(UDP)
;; WARNING: response timeout for 127.0.0.1@53(UDP)
;; ERROR: failed to query server 127.0.0.1@53(UDP)
Logs for TCP connection:
2026-01-13 10:42:00,782 kresd0[8815]: [defer ] | 127.0.0.1#49545 event CONNECT passes through synchronously
2026-01-13 10:42:00,784 kresd0[8815]: [defer ] | 127.0.0.1#49545 ADD 0.033 ms * 1.00 -> load: 0 on /32
2026-01-13 10:42:00,785 kresd0[8815]: [prlayr] [00000047] (in) Wire buffer submitted to grp 'DNS TCP' in unwrap direction (0: TCP)
2026-01-13 10:42:00,785 kresd0[8815]: [defer ] | 127.0.0.1#49545 UNWRAP
2026-01-13 10:42:00,785 kresd0[8815]: [defer ] | load 0 on /32
2026-01-13 10:42:00,785 kresd0[8815]: [defer ] | CONTINUE
2026-01-13 10:42:00,785 kresd0[8815]: [plan ][00000.00] plan 'example.com.' type 'A' uid [41164.00]
2026-01-13 10:42:00,785 kresd0[8815]: [iterat][41164.00] 'example.com.' type 'A' new uid was assigned .01, parent uid .00
2026-01-13 10:42:00,785 kresd0[8815]: [rules ] => local data applied
2026-01-13 10:42:00,786 kresd0[8815]: [iterat][41164.01] <= rcode: NOERROR
2026-01-13 10:42:00,786 kresd0[8815]: [valdtr][41164.01] <= answer valid, OK
2026-01-13 10:42:00,786 kresd0[8815]: [resolv][41164.01] AD: request classified as SECURE
2026-01-13 10:42:00,786 kresd0[8815]: [resolv][41164.01] finished in state: 4, queries: 1, mempool: 81952 B
2026-01-13 10:42:00,786 kresd0[8815]: [prlayr] [00000047] (in) Buffer submitted to grp 'DNS TCP' in wrap direction (3: DNS_MULTI_STREAM)
2026-01-13 10:42:00,786 kresd0[8815]: [prlayr] [00000047] (in) Pushing IOVec
2026-01-13 10:42:00,786 kresd0[8815]: [defer ] | 127.0.0.1#49545 ADD 0.447 ms * 1.00 -> load: 7 on /32
2026-01-13 10:42:00,786 kresd0[8815]: [defer ] | IDLE
2026-01-13 10:42:00,786 kresd0[8815]: [defer ] | deactivate idle
2026-01-13 10:42:00,786 kresd0[8815]: [defer ] | POLL
2026-01-13 10:42:00,787 kresd0[8815]: [io ] => connection to '127.0.0.1#49545' half-closed by peer (EOF)
2026-01-13 10:42:00,787 kresd0[8815]: [defer ] | 127.0.0.1#49545 event EOF passes through synchronously
2026-01-13 10:42:00,787 kresd0[8815]: [defer ] | 127.0.0.1#49545 event FORCE_CLOSE passes through synchronously
2026-01-13 10:42:00,787 kresd0[8815]: [defer ] | 127.0.0.1#49545 ADD 0.030 ms * 1.00 -> load: 7 on /32
Logs for UDP connection:
2026-01-13 10:43:55,021 kresd0[8815]: [prlayr] [00000001] (in) Wire buffer submitted to grp 'DNS UDP' in unwrap direction (0: UDP)
2026-01-13 10:43:55,021 kresd0[8815]: [defer ] | 127.0.0.1#54145 UNWRAP
2026-01-13 10:43:55,021 kresd0[8815]: [defer ] | unverified address
2026-01-13 10:43:55,021 kresd0[8815]: [defer ] | CONTINUE
2026-01-13 10:43:55,021 kresd0[8815]: [plan ][00000.00] plan 'example.com.' type 'A' uid [05349.00]
2026-01-13 10:43:55,021 kresd0[8815]: [iterat][05349.00] 'example.com.' type 'A' new uid was assigned .01, parent uid .00
2026-01-13 10:43:55,021 kresd0[8815]: [rules ] => local data applied
2026-01-13 10:43:55,021 kresd0[8815]: [iterat][05349.01] <= rcode: NOERROR
2026-01-13 10:43:55,021 kresd0[8815]: [valdtr][05349.01] <= answer valid, OK
2026-01-13 10:43:55,021 kresd0[8815]: [resolv][05349.01] AD: request classified as SECURE
2026-01-13 10:43:55,021 kresd0[8815]: [resolv][05349.01] finished in state: 4, queries: 1, mempool: 16400 B
2026-01-13 10:43:55,021 kresd0[8815]: [prlayr] [00000001] (in) Buffer submitted to grp 'DNS UDP' in wrap direction (3: DNS_DGRAM)
2026-01-13 10:43:55,021 kresd0[8815]: [prlayr] [00000001] (in) Pushing Buffer
2026-01-13 10:43:55,021 kresd0[8815]: [prlayr] [00000001] (in) iteration of group 'DNS UDP' (on 0: UDP) ended with status 'Destination address required (-39)'
2026-01-13 10:43:55,021 kresd0[8815]: [defer ] | IDLE
2026-01-13 10:43:55,021 kresd0[8815]: [defer ] | deactivate idle
2026-01-13 10:43:55,021 kresd0[8815]: [defer ] | POLL
An error Destination address required (-39) is UV_EDESTADDRREQ from libuv and it is related to uv_udp_try_send, probably something wrong with connectionless / connected UDP handles.
I installed knot-resolver 6.1.0 on macos Sonoma through brew:
❯ brew info knot-resolver
==> knot-resolver ✔: stable 6.1.0 (bottled), HEAD
I can query the resolver through TCP, but not through UDP.
Here is a simple config:
Requests:
Logs for TCP connection:
Logs for UDP connection:
An error
Destination address required (-39)is UV_EDESTADDRREQ from libuv and it is related touv_udp_try_send, probably something wrong with connectionless / connected UDP handles.