Skip to content

Commit

Permalink
feat: custom dns resolver
Browse files Browse the repository at this point in the history
  • Loading branch information
fritterhoff committed Aug 8, 2024
1 parent 3d967d7 commit d190d9c
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 3 deletions.
1 change: 1 addition & 0 deletions acme/challenge.go
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,7 @@ func dns01Validate(ctx context.Context, ch *Challenge, db DB, jwk *jose.JSONWebK
vc := MustClientFromContext(ctx)
txtRecords, err := vc.LookupTxt(dns01ChallengeHost(domain))
if err != nil {
logrus.Warnf("error looking up TXT records for domain %s: %v", domain, err)
return storeError(ctx, db, ch, false, WrapError(ErrorDNSType, err,
"error looking up TXT records for domain %s", domain))
}
Expand Down
24 changes: 21 additions & 3 deletions acme/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ package acme
import (
"context"
"crypto/tls"
"fmt"
"net"
"net/http"
"os"
"time"
)

Expand Down Expand Up @@ -45,8 +47,9 @@ func MustClientFromContext(ctx context.Context) Client {
}

type client struct {
http *http.Client
dialer *net.Dialer
http *http.Client
dialer *net.Dialer
resolver *net.Resolver
}

// NewClient returns an implementation of Client for verifying ACME challenges.
Expand All @@ -65,15 +68,30 @@ func NewClient() Client {
dialer: &net.Dialer{
Timeout: 30 * time.Second,
},
resolver: getResolver(),
}
}

func getResolver() *net.Resolver {
if os.Getenv("DNS_RESOLVER") != "" {
return &net.Resolver{
PreferGo: true,
Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
d := net.Dialer{
Timeout: time.Millisecond * time.Duration(10000),
}
return d.DialContext(ctx, network, fmt.Sprintf("%s:53", os.Getenv("DNS_RESOLVER")))
}}
}
return net.DefaultResolver
}

func (c *client) Get(url string) (*http.Response, error) {
return c.http.Get(url)
}

func (c *client) LookupTxt(name string) ([]string, error) {
return net.LookupTXT(name)
return c.resolver.LookupTXT(context.Background(), name)
}

func (c *client) TLSDial(network, addr string, config *tls.Config) (*tls.Conn, error) {
Expand Down

0 comments on commit d190d9c

Please sign in to comment.