From 785adeb6c18f6bae35c6af6397f91e6d35e9d209 Mon Sep 17 00:00:00 2001 From: Douglas Mayle Date: Wed, 20 May 2020 16:09:37 +0200 Subject: [PATCH] Fix issue with too large DNS messages This is an import of the fix for issue 10135 in the rancher fork of this project ( rancher/rancher#10135 ). --- provider/rfc2136/rfc2136.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/provider/rfc2136/rfc2136.go b/provider/rfc2136/rfc2136.go index 77c92464c..7cb9f48c2 100644 --- a/provider/rfc2136/rfc2136.go +++ b/provider/rfc2136/rfc2136.go @@ -33,6 +33,11 @@ import ( "sigs.k8s.io/external-dns/provider" ) +const ( + // maximum size of a UDP transport message in DNS protocol + udpMaxMsgSize = 512 +) + // rfc2136 provider type type rfc2136Provider struct { nameserver string @@ -309,6 +314,10 @@ func (r rfc2136Provider) SendMessage(msg *dns.Msg) error { msg.SetTsig(r.tsigKeyName, r.tsigSecretAlg, 300, time.Now().Unix()) } + if msg.Len() > udpMaxMsgSize { + c.Net = "tcp" + } + resp, _, err := c.Exchange(msg, r.nameserver) if err != nil { log.Infof("error in dns.Client.Exchange: %s", err)