diff --git a/internal/autocert/config.go b/internal/autocert/config.go index 5126bf15..d7e7c5cb 100644 --- a/internal/autocert/config.go +++ b/internal/autocert/config.go @@ -11,6 +11,7 @@ import ( "github.com/go-acme/lego/v4/certcrypto" "github.com/go-acme/lego/v4/challenge" + "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/lego" "github.com/rs/zerolog/log" "github.com/yusing/go-proxy/internal/common" @@ -27,6 +28,8 @@ type Config struct { Provider string `json:"provider,omitempty"` Options map[string]any `json:"options,omitempty"` + Resolvers []string `json:"resolvers,omitempty"` + // Custom ACME CA CADirURL string `json:"ca_dir_url,omitempty"` CACerts []string `json:"ca_certs,omitempty"` @@ -111,6 +114,12 @@ func (cfg *Config) Validate() gperr.Error { return b.Error() } +func (cfg *Config) dns01Options() []dns01.ChallengeOption { + return []dns01.ChallengeOption{ + dns01.CondOption(len(cfg.Resolvers) > 0, dns01.AddRecursiveNameservers(cfg.Resolvers)), + } +} + func (cfg *Config) GetLegoConfig() (*User, *lego.Config, gperr.Error) { if err := cfg.Validate(); err != nil { return nil, nil, err diff --git a/internal/autocert/provider.go b/internal/autocert/provider.go index 83dda295..1743dac0 100644 --- a/internal/autocert/provider.go +++ b/internal/autocert/provider.go @@ -286,7 +286,7 @@ func (p *Provider) initClient() error { return err } - err = legoClient.Challenge.SetDNS01Provider(p.cfg.challengeProvider) + err = legoClient.Challenge.SetDNS01Provider(p.cfg.challengeProvider, p.cfg.dns01Options()...) if err != nil { return err }