Skip to content

Cannot use resolver through UDP on mac #136

Description

@t0rs0

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions