diff --git a/agent/utils/ssl/dns_provider.go b/agent/utils/ssl/dns_provider.go
index c4d0f46a09db..141c2287e34c 100644
--- a/agent/utils/ssl/dns_provider.go
+++ b/agent/utils/ssl/dns_provider.go
@@ -24,6 +24,7 @@ import (
"github.com/go-acme/lego/v4/providers/dns/regru"
"github.com/go-acme/lego/v4/providers/dns/route53"
"github.com/go-acme/lego/v4/providers/dns/spaceship"
+ "github.com/go-acme/lego/v4/providers/dns/technitium"
"github.com/go-acme/lego/v4/providers/dns/tencentcloud"
"github.com/go-acme/lego/v4/providers/dns/vercel"
"github.com/go-acme/lego/v4/providers/dns/volcengine"
@@ -59,6 +60,7 @@ const (
Ovh DnsType = "Ovh"
AcmeDNS DnsType = "AcmeDNS"
PorkBun DnsType = "PorkBun"
+ Technitium DnsType = "Technitium"
)
type DNSParam struct {
@@ -301,6 +303,14 @@ func getDNSProviderConfig(dnsType DnsType, params string) (challenge.Provider, e
config.PollingInterval = pollingInterval
config.TTL = ttl
p, err = porkbun.NewDNSProviderConfig(config)
+ case Technitium:
+ config := technitium.NewDefaultConfig()
+ config.BaseURL = param.BaseURL
+ config.APIToken = param.Token
+ config.PropagationTimeout = propagationTimeout
+ config.PollingInterval = pollingInterval
+ config.TTL = ttl
+ p, err = technitium.NewDNSProviderConfig(config)
}
if err != nil {
diff --git a/frontend/src/global/mimetype.ts b/frontend/src/global/mimetype.ts
index 2aecfbb946fd..feed9bcf2ee9 100644
--- a/frontend/src/global/mimetype.ts
+++ b/frontend/src/global/mimetype.ts
@@ -272,6 +272,10 @@ export const DNSTypes = [
label: 'DNSPod (' + i18n.global.t('ssl.deprecated') + ')',
value: 'DnsPod',
},
+ {
+ label: 'Technitium',
+ value: 'Technitium',
+ },
];
export const Fields = [
diff --git a/frontend/src/views/website/ssl/dns-account/create/index.vue b/frontend/src/views/website/ssl/dns-account/create/index.vue
index 231e6a77e50a..f67db22471d5 100644
--- a/frontend/src/views/website/ssl/dns-account/create/index.vue
+++ b/frontend/src/views/website/ssl/dns-account/create/index.vue
@@ -183,6 +183,14 @@