Skip to content

Commit db2c142

Browse files
authored
[CHAOSPLT-1102][FIX][NETWORK] handle DNS response truncation (#992)
* fix(network): handle DNS response truncation Implements UDP-first with TCP fallback to resolve DNS truncation issues that caused incomplete IP resolution. Adds EDNS0 support with 4KB buffer size to reduce UDP truncation frequency. The previous implementation ignored the TC (truncated) bit in DNS responses, causing services with many IPs (load balancers, CDNs) to return incomplete address lists. This fix ensures all IPs are discovered by automatically retrying truncated responses over TCP. * update vendors * update licenses Jira: CHAOSPLT-1102
1 parent 5062ac1 commit db2c142

File tree

133 files changed

+25458
-19415
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

133 files changed

+25458
-19415
lines changed

LICENSE-3rdparty.csv

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,9 @@ golang.org/x/tools,golang.org/x/tools/go/ast/inspector,BSD-3-Clause
560560
golang.org/x/tools,golang.org/x/tools/go/gcexportdata,BSD-3-Clause
561561
golang.org/x/tools,golang.org/x/tools/go/packages,BSD-3-Clause
562562
golang.org/x/tools,golang.org/x/tools/go/types/objectpath,BSD-3-Clause
563+
golang.org/x/tools,golang.org/x/tools/go/types/typeutil,BSD-3-Clause
563564
golang.org/x/tools,golang.org/x/tools/internal/aliases,BSD-3-Clause
565+
golang.org/x/tools,golang.org/x/tools/internal/astutil/edge,BSD-3-Clause
564566
golang.org/x/tools,golang.org/x/tools/internal/event,BSD-3-Clause
565567
golang.org/x/tools,golang.org/x/tools/internal/event/core,BSD-3-Clause
566568
golang.org/x/tools,golang.org/x/tools/internal/event/keys,BSD-3-Clause
@@ -570,7 +572,7 @@ golang.org/x/tools,golang.org/x/tools/internal/gocommand,BSD-3-Clause
570572
golang.org/x/tools,golang.org/x/tools/internal/packagesinternal,BSD-3-Clause
571573
golang.org/x/tools,golang.org/x/tools/internal/pkgbits,BSD-3-Clause
572574
golang.org/x/tools,golang.org/x/tools/internal/stdlib,BSD-3-Clause
573-
golang.org/x/tools,golang.org/x/tools/internal/tokeninternal,BSD-3-Clause
575+
golang.org/x/tools,golang.org/x/tools/internal/typeparams,BSD-3-Clause
574576
golang.org/x/tools,golang.org/x/tools/internal/typesinternal,BSD-3-Clause
575577
golang.org/x/tools,golang.org/x/tools/internal/versions,BSD-3-Clause
576578
golang.org/x/xerrors,golang.org/x/xerrors,BSD-3-Clause

go.mod

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ require (
2121
github.com/go-playground/validator/v10 v10.23.0
2222
github.com/google/uuid v1.6.0
2323
github.com/hashicorp/go-multierror v1.1.1
24-
github.com/miekg/dns v1.1.55
24+
github.com/miekg/dns v1.1.68
2525
github.com/mitchellh/go-homedir v1.1.0
2626
github.com/onsi/ginkgo/v2 v2.14.0
2727
github.com/onsi/gomega v1.30.0
@@ -37,7 +37,7 @@ require (
3737
go.opentelemetry.io/otel v1.29.0
3838
go.opentelemetry.io/otel/trace v1.29.0
3939
go.uber.org/zap v1.27.0
40-
golang.org/x/sys v0.31.0
40+
golang.org/x/sys v0.33.0
4141
google.golang.org/grpc v1.65.0
4242
google.golang.org/protobuf v1.34.2
4343
gopkg.in/DataDog/dd-trace-go.v1 v1.70.1
@@ -96,7 +96,7 @@ require (
9696
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
9797
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 // indirect
9898
go.opentelemetry.io/otel/sdk v1.29.0 // indirect
99-
golang.org/x/crypto v0.36.0 // indirect
99+
golang.org/x/crypto v0.38.0 // indirect
100100
golang.org/x/exp v0.0.0-20240318143956-a85f2c67cd81 // indirect
101101
google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd // indirect
102102
)
@@ -192,14 +192,14 @@ require (
192192
go.opentelemetry.io/otel/metric v1.29.0 // indirect
193193
go.uber.org/atomic v1.11.0 // indirect
194194
go.uber.org/multierr v1.11.0 // indirect
195-
golang.org/x/mod v0.20.0 // indirect
196-
golang.org/x/net v0.38.0 // indirect
195+
golang.org/x/mod v0.24.0 // indirect
196+
golang.org/x/net v0.40.0 // indirect
197197
golang.org/x/oauth2 v0.27.0 // indirect
198-
golang.org/x/sync v0.12.0 // indirect
199-
golang.org/x/term v0.30.0 // indirect
200-
golang.org/x/text v0.23.0 // indirect
198+
golang.org/x/sync v0.14.0 // indirect
199+
golang.org/x/term v0.32.0 // indirect
200+
golang.org/x/text v0.25.0 // indirect
201201
golang.org/x/time v0.6.0 // indirect
202-
golang.org/x/tools v0.24.0 // indirect
202+
golang.org/x/tools v0.33.0 // indirect
203203
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
204204
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
205205
gopkg.in/inf.v0 v0.9.1 // indirect

go.sum

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -677,8 +677,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182aff
677677
github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
678678
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
679679
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
680-
github.com/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo=
681-
github.com/miekg/dns v1.1.55/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
680+
github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA=
681+
github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
682682
github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
683683
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4=
684684
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
@@ -1066,8 +1066,8 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh
10661066
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
10671067
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
10681068
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
1069-
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
1070-
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
1069+
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
1070+
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
10711071
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
10721072
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
10731073
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1104,8 +1104,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
11041104
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
11051105
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
11061106
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
1107-
golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
1108-
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
1107+
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
1108+
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
11091109
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
11101110
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
11111111
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1151,8 +1151,8 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v
11511151
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
11521152
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
11531153
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
1154-
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
1155-
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
1154+
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
1155+
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
11561156
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
11571157
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
11581158
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1175,8 +1175,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
11751175
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
11761176
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
11771177
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
1178-
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
1179-
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
1178+
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
1179+
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
11801180
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
11811181
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
11821182
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1270,21 +1270,21 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
12701270
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
12711271
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
12721272
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
1273-
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
1274-
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
1273+
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
1274+
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
12751275
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
12761276
golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY=
1277-
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
1278-
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
1277+
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
1278+
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
12791279
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
12801280
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
12811281
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
12821282
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
12831283
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
12841284
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
12851285
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
1286-
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
1287-
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
1286+
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
1287+
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
12881288
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
12891289
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
12901290
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1353,8 +1353,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
13531353
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
13541354
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
13551355
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
1356-
golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
1357-
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
1356+
golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
1357+
golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
13581358
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
13591359
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
13601360
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

network/dns.go

Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"net"
1111

1212
"github.com/avast/retry-go"
13+
"github.com/hashicorp/go-multierror"
1314
"github.com/miekg/dns"
1415
)
1516

@@ -59,24 +60,37 @@ func (c dnsClient) Resolve(host string) ([]net.IP, error) {
5960
names = append(names, nodeDNSConfig.NameList(host)...)
6061

6162
// do the request on the first configured dns resolver
62-
dnsClient := dns.Client{}
6363
response := &dns.Msg{}
6464

6565
err = retry.Do(func() error {
6666
// query possible resolvers and fqdn based on servers and search domains specified in the dns configuration
67+
multiErr := &multierror.Error{}
68+
6769
for _, name := range names {
68-
dnsMessage := dns.Msg{}
69-
dnsMessage.SetQuestion(name, dns.TypeA)
70+
// try to resolve the given host as an A record
71+
response, err = c.resolve(name, "udp", resolvers)
72+
if err != nil {
73+
multiErr = multierror.Append(multiErr, err)
74+
}
75+
76+
if response == nil {
77+
continue
78+
}
7079

71-
for _, server := range resolvers {
72-
response, _, err = dnsClient.Exchange(&dnsMessage, fmt.Sprintf("%s:53", server))
73-
if response != nil && len(response.Answer) > 0 {
74-
return nil
80+
// if the response is truncated, retry with TCP
81+
if response.Truncated {
82+
response, err = c.resolve(name, "tcp", resolvers)
83+
if err != nil {
84+
multiErr = multierror.Append(multiErr, err)
7585
}
7686
}
87+
88+
if response != nil && len(response.Answer) > 0 {
89+
return nil
90+
}
7791
}
7892

79-
return err
93+
return multiErr
8094
}, retry.Attempts(3))
8195
if err != nil {
8296
return nil, fmt.Errorf("can't resolve the given hostname %s: %w", host, err)
@@ -96,3 +110,35 @@ func (c dnsClient) Resolve(host string) ([]net.IP, error) {
96110

97111
return ips, nil
98112
}
113+
114+
func (c dnsClient) resolve(hostName string, protocol string, resolvers []string) (response *dns.Msg, multiErr error) {
115+
client := dns.Client{}
116+
117+
dnsMessage := dns.Msg{}
118+
dnsMessage.SetQuestion(hostName, dns.TypeA)
119+
120+
switch protocol {
121+
case "tcp":
122+
client.Net = "tcp"
123+
case "udp":
124+
client.Net = "udp"
125+
// Increase EDNS buffer size to reduce truncation
126+
// Refer to RFC 5966 https://www.rfc-editor.org/rfc/rfc5966
127+
dnsMessage.SetEdns0(4096, true)
128+
default:
129+
return nil, fmt.Errorf("unknown protocol %s. Supported protocols are tcp and udp", protocol)
130+
}
131+
132+
for _, server := range resolvers {
133+
var err error
134+
response, _, err = client.Exchange(&dnsMessage, fmt.Sprintf("%s:53", server))
135+
136+
if response != nil && len(response.Answer) > 0 {
137+
break
138+
}
139+
140+
multiErr = multierror.Append(multiErr, err)
141+
}
142+
143+
return response, multiErr
144+
}

vendor/github.com/miekg/dns/README.md

Lines changed: 15 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/miekg/dns/acceptfunc.go

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)