Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ providers/route53 @tresni
providers/rwth @mistererwin
providers/sakuracloud @ttkzw
# providers/softlayer NEEDS VOLUNTEER
providers/tencentdns @cylonchau
providers/transip @blackshadev
providers/unifi @zupolgec
providers/vercel @SukkaW
Expand Down
3 changes: 3 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,9 @@ provider-SAKURACLOUD:
provider-SOFTLAYER:
- changed-files:
- any-glob-to-any-file: providers/softlayer/**
provider-TENCENTDNS:
- changed-files:
- any-glob-to-any-file: providers/tencentdns/**
provider-TRANSIP:
- changed-files:
- any-glob-to-any-file: providers/transip/**
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/pr_integration_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,8 @@ jobs:
#
VERCEL_TEAM_ID: ${{ secrets.VERCEL_TEAM_ID }}
VERCEL_API_TOKEN: ${{ secrets.VERCEL_API_TOKEN }}
TENCENTDNS_SECRET_ID: ${{ secrets.TENCENTDNS_SECRET_ID }}
TENCENTDNS_SECRET_KEY: ${{ secrets.TENCENTDNS_SECRET_KEY }}

concurrency:
group: ${{ github.workflow }}-${{ matrix.provider }}
Expand Down
2 changes: 1 addition & 1 deletion .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ changelog:
regexp: "(?i)^.*(major|new provider|feature)[(\\w)]*:+.*$"
order: 1
- title: 'Provider-specific changes:'
regexp: "(?i)((adguardhome|akamaiedgedns|alidns|autodns|axfrddns|azure_dns|azure_private_dns|azuredns|bind|bunny_dns|bunnydns|cloudflare|cloudflareapi|cloudns|cnr|cscglobal|desec|digitalocean|dnscale|dnsimple|dnsmadeeasy|dnsoverhttps|doh|domainnameshop|dynadot|easyname|exoscale|fortigate|gandi|gandi_v5|gcloud|gcore|gidinet|hedns|hetzner|hetzner_v2|hexonet|hostingde|huaweicloud|infomaniak|internetbs|inwx|joker|linode|loopia|luadns|mikrotik|mythicbeasts|namecheap|namedotcom|netbird|netcup|netlify|ns1|opensrs|oracle|ovh|packetframe|porkbun|powerdns|realtimeregister|route53|rwth|sakuracloud|softlayer|transip|unifi|vercel|vultr).*:)+.*"
regexp: "(?i)((adguardhome|akamaiedgedns|alidns|autodns|axfrddns|azure_dns|azure_private_dns|azuredns|bind|bunny_dns|bunnydns|cloudflare|cloudflareapi|cloudns|cnr|cscglobal|desec|digitalocean|dnscale|dnsimple|dnsmadeeasy|dnsoverhttps|doh|domainnameshop|dynadot|easyname|exoscale|fortigate|gandi|gandi_v5|gcloud|gcore|gidinet|hedns|hetzner|hetzner_v2|hexonet|hostingde|huaweicloud|infomaniak|internetbs|inwx|joker|linode|loopia|luadns|mikrotik|mythicbeasts|namecheap|namedotcom|netbird|netcup|netlify|ns1|opensrs|oracle|ovh|packetframe|porkbun|powerdns|realtimeregister|route53|rwth|sakuracloud|softlayer|tencentdns|transip|unifi|vercel|vultr).*:)+.*"
order: 2
- title: 'Documentation:'
regexp: "(?i)^.*(docs)[(\\w)]*:+.*$"
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ DNSControl supports 62 DNS providers and registrars:
| Windows Server DNS | [MikroTik RouterOS](https://docs.dnscontrol.org/provider/mikrotik) | [Mythic Beasts](https://docs.dnscontrol.org/provider/mythicbeasts) | [Name.com](https://docs.dnscontrol.org/provider/namedotcom)¹ | [Namecheap](https://docs.dnscontrol.org/provider/namecheap)¹ |
| [Netcup](https://docs.dnscontrol.org/provider/netcup) | [Netlify](https://docs.dnscontrol.org/provider/netlify) | [NS1](https://docs.dnscontrol.org/provider/ns1) | [OpenSRS](https://docs.dnscontrol.org/provider/opensrs)² | [Oracle Cloud](https://docs.dnscontrol.org/provider/oracle) |
| [OVH](https://docs.dnscontrol.org/provider/ovh)¹ | [Packetframe](https://docs.dnscontrol.org/provider/packetframe) | [Porkbun](https://docs.dnscontrol.org/provider/porkbun)¹ | [PowerDNS](https://docs.dnscontrol.org/provider/powerdns) | [Realtime Register](https://docs.dnscontrol.org/provider/realtimeregister)¹ |
| [RWTH DNS-Admin](https://docs.dnscontrol.org/provider/rwth) | [Sakura Cloud](https://docs.dnscontrol.org/provider/sakuracloud) | [SoftLayer](https://docs.dnscontrol.org/provider/softlayer) | [TransIP](https://docs.dnscontrol.org/provider/transip) | [UniFi Network](https://docs.dnscontrol.org/provider/unifi) |
| [Vercel](https://docs.dnscontrol.org/provider/vercel) | [Vultr](https://docs.dnscontrol.org/provider/vultr) | [Netbird](https://docs.dnscontrol.org/provider/netbird) | | |
| [RWTH DNS-Admin](https://docs.dnscontrol.org/provider/rwth) | [Sakura Cloud](https://docs.dnscontrol.org/provider/sakuracloud) | [SoftLayer](https://docs.dnscontrol.org/provider/softlayer) | [Tencent Cloud DNS](https://docs.dnscontrol.org/provider/tencentdns)¹ | [TransIP](https://docs.dnscontrol.org/provider/transip) |
| [UniFi Network](https://docs.dnscontrol.org/provider/unifi) | [Vercel](https://docs.dnscontrol.org/provider/vercel) | [Vultr](https://docs.dnscontrol.org/provider/vultr) | [Netbird](https://docs.dnscontrol.org/provider/netbird) | |

¹also supports registrar functions
²registrar only
Expand Down
12 changes: 9 additions & 3 deletions documentation/provider/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ Jump to a table:
| [`RWTH`](rwth.md) | ❌ | ✅ | ❌ |
| [`SAKURACLOUD`](sakuracloud.md) | ❌ | ✅ | ❌ |
| [`SOFTLAYER`](softlayer.md) | ❌ | ✅ | ❌ |
| [`TENCENTDNS`](tencentdns.md) | ❌ | ✅ | ✅ |
| [`TRANSIP`](transip.md) | ❌ | ✅ | ❌ |
| [`UNIFI`](unifi.md) | ❌ | ✅ | ❌ |
| [`VERCEL`](vercel.md) | ❌ | ✅ | ❌ |
Expand Down Expand Up @@ -149,6 +150,7 @@ Jump to a table:
| [`RWTH`](rwth.md) | ❔ | ❌ | ❌ | ✅ |
| [`SAKURACLOUD`](sakuracloud.md) | ❔ | ❌ | ✅ | ✅ |
| [`SOFTLAYER`](softlayer.md) | ❔ | ❔ | ❌ | ❔ |
| [`TENCENTDNS`](tencentdns.md) | ❔ | ✅ | ✅ | ✅ |
| [`TRANSIP`](transip.md) | ✅ | ❌ | ❌ | ✅ |
| [`UNIFI`](unifi.md) | ❌ | ❔ | ❌ | ❌ |
| [`VERCEL`](vercel.md) | ❔ | ❌ | ❌ | ❌ |
Expand Down Expand Up @@ -212,6 +214,7 @@ Jump to a table:
| [`RWTH`](rwth.md) | ❌ | ❔ | ❌ | ✅ | ❔ |
| [`SAKURACLOUD`](sakuracloud.md) | ✅ | ❌ | ❌ | ✅ | ❌ |
| [`SOFTLAYER`](softlayer.md) | ❔ | ❔ | ❌ | ❔ | ❔ |
| [`TENCENTDNS`](tencentdns.md) | ✅ | ❔ | ❔ | ✅ | ❔ |
| [`TRANSIP`](transip.md) | ✅ | ❌ | ❌ | ❌ | ❌ |
| [`UNIFI`](unifi.md) | ❌ | ❔ | ❌ | ❌ | ❔ |
| [`VERCEL`](vercel.md) | ✅ | ❌ | ❌ | ❌ | ❌ |
Expand Down Expand Up @@ -274,6 +277,7 @@ Jump to a table:
| [`RWTH`](rwth.md) | ❔ | ❌ | ✅ | ❔ |
| [`SAKURACLOUD`](sakuracloud.md) | ❌ | ❌ | ✅ | ✅ |
| [`SOFTLAYER`](softlayer.md) | ❔ | ❔ | ✅ | ❔ |
| [`TENCENTDNS`](tencentdns.md) | ❔ | ❔ | ✅ | ❔ |
| [`TRANSIP`](transip.md) | ❌ | ✅ | ✅ | ❌ |
| [`UNIFI`](unifi.md) | ❔ | ❔ | ✅ | ❔ |
| [`VERCEL`](vercel.md) | ❌ | ❌ | ✅ | ❌ |
Expand Down Expand Up @@ -333,6 +337,7 @@ Jump to a table:
| [`ROUTE53`](route53.md) | ✅ | ✅ | ❔ | ✅ | ✅ |
| [`RWTH`](rwth.md) | ✅ | ❔ | ❔ | ✅ | ❌ |
| [`SAKURACLOUD`](sakuracloud.md) | ✅ | ✅ | ❔ | ❌ | ❌ |
| [`TENCENTDNS`](tencentdns.md) | ✅ | ❔ | ❔ | ❔ | ❔ |
| [`TRANSIP`](transip.md) | ✅ | ❌ | ❔ | ✅ | ✅ |
| [`UNIFI`](unifi.md) | ❌ | ❔ | ❔ | ❌ | ❌ |
| [`VERCEL`](vercel.md) | ✅ | ✅ | ❔ | ❌ | ❌ |
Expand Down Expand Up @@ -467,9 +472,10 @@ Providers in this category and their maintainers are:
|[`REALTIMEREGISTER`](realtimeregister.md)|@PJEilers|
|[`ROUTE53`](route53.md)|@tresni|
|[`RWTH`](rwth.md)|@MisterErwin|
|[`SAKURACLOUD`](sakuracloud.md)|@ttkzw|
|[`SOFTLAYER`](softlayer.md)|@jamielennox|
|[`TRANSIP`](transip.md)|@blackshadev|
| [`SAKURACLOUD`](sakuracloud.md) | @ttkzw |
| [`SOFTLAYER`](softlayer.md) | @jamielennox |
| [`TENCENTDNS`](tencentdns.md) | @cylonchau |
| [`TRANSIP`](transip.md) | @blackshadev |
|[`VERCEL`](vercel.md)|@SukkaW|
|[`VULTR`](vultr.md)|@pgaskin|

Expand Down
130 changes: 130 additions & 0 deletions documentation/provider/tencentdns.md
Copy link
Copy Markdown
Member

@SukkaW SukkaW May 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Document how to use ALIAS('@') in the provider docs:

  • If you want to add CNAME at @
  • Configure CNAME flattening at the DNSPod dashboard manually
  • Write ALIAS('@') to dnsconfig.js
  • Explain why write ALIAS('@'). DNSControl requires this because it considers CNAME('@') invalid.
  • Under the hood, this provider overwrites ALIAS to CNAME
  • Explain that DNSPod doesn't support ALIAS at all, all CNAME flattening configurations must be done via the dashboard for now.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I updated the docs to clarify how to use ALIAS with the tencentdns provider.

Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
## Configuration

{% hint style="info" %}
Comment thread
cafferata marked this conversation as resolved.
This provider is developed for the **Tencent Cloud API 3.0** platform.
{% endhint %}

This provider is for [Tencent Cloud DNS](https://cloud.tencent.com/product/dns) (DNSPod). To use this provider, add an entry to `creds.json` with `TYPE` set to `TENCENTDNS` along with your [API secrets](https://console.intl.cloud.tencent.com/cam/capi).

Example:

{% code title="creds.json" %}
```json
{
"tencentdns": {
"TYPE": "TENCENTDNS",
"secret_id": "YOUR_SECRET_ID",
"secret_key": "YOUR_SECRET_KEY",
"site": "cn | intl"
}
}
```
{% endcode %}

Optionally, you can specify a `region` (defaults to `"ap-guangzhou"`):

{% code title="creds.json" %}
```json
{
"tencentdns": {
"TYPE": "TENCENTDNS",
"secret_id": "YOUR_SECRET_ID",
"secret_key": "YOUR_SECRET_KEY",
"region": "ap-guangzhou",
"site": "intl"
}
}
```
{% endcode %}

Optionally, you can specify a `site` (defaults to `"cn"`). Use `"intl"` for Tencent Cloud International accounts:

{% code title="creds.json" %}
```json
{
"tencentdns": {
"TYPE": "TENCENTDNS",
"secret_id": "YOUR_SECRET_ID",
"secret_key": "YOUR_SECRET_KEY",
"site": "intl"
}
}
```
{% endcode %}

Valid `site` values are:

- `cn`: Tencent Cloud mainland China APIs.
- `intl`: Tencent Cloud International APIs.

The `site` setting affects both DNSPod DNS management and registrar nameserver updates.

## Usage

An example configuration:

{% code title="dnsconfig.js" %}
```javascript
var REG_TENCENT = NewRegistrar("tencentdns", "TENCENTDNS");
var DSP_TENCENT = NewDnsProvider("tencentdns", "TENCENTDNS");

D("example.com", REG_TENCENT, DnsProvider(DSP_TENCENT),
A("@", "1.2.3.4"),
CNAME("www", "example.com."),
MX("@", 10, "mail.example.com."),
TXT("test", "hello world")
);
```
{% endcode %}

### Why use `ALIAS` for DNSPod

DNSPod does not natively support the `ALIAS` record type.

In this provider, `ALIAS("@")` is used only as a DNSControl-side representation of CNAME flattening at the zone apex (`@`). It does not mean DNSPod has a real ALIAS record type.

We use `ALIAS("@")` because DNSControl treats `CNAME("@")` as invalid. In standard DNS, a CNAME record cannot be placed at the zone apex, because the apex already contains required records such as `SOA` and `NS`.

For DNSPod, the provider maps `ALIAS("@")` to a CNAME record on `@` under the hood. The actual CNAME flattening behavior must still be configured manually in the DNSPod dashboard.

#### Example:

**Recommended**

Use `ALIAS("@")` for apex CNAME flattening:

```js
D("example.com", REG_NONE, DnsProvider(DNSPOD),
ALIAS("@", "target.example.net.")
);
```
**Not recommended**

Avoid writing CNAME("@") directly:

```js
D("example.com", REG_NONE, DnsProvider(DNSPOD),
CNAME("@", "target.example.net.")
);
```

For compatibility, the DNSPod provider automatically converts apex CNAME("@") to ALIAS("@") internally. This allows DNSControl to treat it as an apex-flattening record instead of a standard apex CNAME.

### Note

DNSPod does not natively support the ALIAS record type. In this provider, ALIAS("@") is only a DNSControl-side representation of apex CNAME flattening.

When pushed to DNSPod, it is stored as a CNAME record on @.

Reference: https://docs.dnspod.com/dns/faq-dns-resolution/?lang=en


## Important Notes

### Features

- **MX Records**: Priority and target are handled automatically.
- **Registrar Support**: Supports updating authoritative nameservers for domains registered with Tencent Cloud.
- **Tencent Cloud Site**: Use `site: "intl"` for Tencent Cloud International site, use `site: "cn"` for Tencent Cloud China site.
- **Line Management**: All records are created on the "默认" (Default) line.
- **New Domains**: DNSControl will automatically create non-existent domains in your account.
4 changes: 4 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,10 @@ require (
github.com/nicholas-fedor/shoutrrr v0.15.0
github.com/nozzle/throttler v0.0.0-20180817012639-2ea982251481
github.com/oracle/oci-go-sdk/v65 v65.114.2
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1406+incompatible
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.93
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.3.78
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain v1.3.66
github.com/urfave/cli/v3 v3.9.0
github.com/vercel/terraform-provider-vercel v1.14.1
github.com/vultr/govultr/v2 v2.17.2
Expand Down
10 changes: 10 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,16 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1406+incompatible h1:tGQadaNd/OjES75vfkiglLavxrKF0972AbJgSVQ1Cco=
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1406+incompatible/go.mod h1:72Wo6Gt6F8d8V+njrAmduVoT9QjPwCyXktpqCWr7PUc=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.66/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.78/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.93 h1:LItHgi4vvgkfLLFLhL8FL2yOxoquKMrhaWy70vewa2g=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.93/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.3.78 h1:Wr/AVJTVlCLG+FJnp2+xveQs9zUT8pB1kfTOZ0drhv8=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.3.78/go.mod h1:cLF8HFXXVj5VmAL/yRn/TEnN14fyRDi1elg1hx4f7Es=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain v1.3.66 h1:cn5pZx45fXoqKIiNbNVzrVNfky16tPL2x1Fq6kBFlgc=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain v1.3.66/go.mod h1:+qAEFuRYl5CHjLOfS55Ce/9jEgX06R6TEWsdVVM60Nc=
github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=
github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=
github.com/transip/gotransip/v6 v6.27.1 h1:J8DfGAxnFZxNYdIRj59D6uFm0FPOkx9tF1aCkGgXeR8=
Expand Down
7 changes: 7 additions & 0 deletions integrationTest/profiles.json
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,13 @@
"domain": "$SL_DOMAIN",
"username": "$SL_USERNAME"
},
"TENCENTDNS": {
"TYPE": "TENCENTDNS",
"domain": "$TENCENTDNS_DOMAIN",
"secret_id": "$TENCENTDNS_SECRET_ID",
"secret_key": "$TENCENTDNS_SECRET_KEY",
"site": "$TENCENTDNS_SITE"
},
"TRANSIP": {
"AccessToken": "$TRANSIP_ACCESS_TOKEN",
"AccountName": "$TRANSIP_ACCOUNT_NAME",
Expand Down
1 change: 1 addition & 0 deletions pkg/providers/_all/all.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ import (
_ "github.com/DNSControl/dnscontrol/v4/providers/rwth"
_ "github.com/DNSControl/dnscontrol/v4/providers/sakuracloud"
_ "github.com/DNSControl/dnscontrol/v4/providers/softlayer"
_ "github.com/DNSControl/dnscontrol/v4/providers/tencentdns"
_ "github.com/DNSControl/dnscontrol/v4/providers/transip"
_ "github.com/DNSControl/dnscontrol/v4/providers/unifi"
_ "github.com/DNSControl/dnscontrol/v4/providers/vercel"
Expand Down
Loading
Loading