Skip to content

plugin fails (doing TCP fallback) with big DNS records #64

@kares

Description

@kares

Plugin version 3.1.4 (and bellow) will likely run into issues with DNS records >~ 65.500 bytes.

Description of the problem including expected versus actual behavior

DNS primarily uses UDP and a response usually fits into a UDP datagram.
However, in rare cases the payload might be bigger than 65k, in which case the Resolv library will attempt to do a TCP fallback. This fallback mechanism has a bug when multiple name-servers are involved in a query.

There's no actual reproducer but here's what I assume happens :

  • with multiple nameservers we setup a UDP sender
  • the sender is supposed to "cache" UDP sockets (in case we try multiple servers)
  • the UDP (from a given server) packet we get back is detected as too big
  • switch over to trying a TCP sender next
    (the problem is the TCP sender does not share the original assumption of "caching" multiple sockets)
  • the same server is tried over TCP - perhaps fails (or timeouts)
  • we carry on trying the next name-server from the list using the same TCP sender
    (the TCP sender detects a different IP/port and fails with the host/port don't match: ... error)

Provide logs (if relevant): N/A 3.1.4 did not have backtrace/class logging for unknown errors.
DNS: Unexpected Error.


Seems to be a known upstream Resolv bug: https://bugs.ruby-lang.org/issues/8285

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions