因此,我们将尝试使用GO SDK操纵DNS记录(不是直接REST API)。我经历了Google搜索结果的第一页,为GO提供SDK的公司是:
- IBM networking-go-sdk -161.26.0.10和161.26.0.11-定时解决自己的网站
- aws route53-169.254.169.253-定时解决自己的网站
- dnsimple dnsimple-go -162.159.27.4和199.247.155.53-160-180ms和70-75ms,来自SG
- Google googleapis-8.8.8和8.8.8和8.8.4.4-0ms for sg
- gcore gcore-dns-sdk-go-199.247.155.53和2.56.220.2-0ms和0ms和0-171ms(仅首次命中率为171ms,其余为0ms),来自SG )
我以前已经使用了Google SDK来用于非DNS的东西,有点太原始了,需要许多步骤。您必须创建一个项目,启用API,创建服务帐户,为该帐户设置许可,下载recretentials.json,然后使用其SDK点击 - 并不是很简单,所以今天我们要尝试G-core的DNS,显然是非常简单,只需访问他们的网站并注册,个人资料> API令牌>创建令牌,将其复制到某些文件(例如:.token
文件)。
这是如何创建区域,添加A记录并删除所有内容的示例:
package main
import (
"context"
_ "embed"
"strings"
"time"
"github.com/G-Core/gcore-dns-sdk-go"
"github.com/kokizzu/gotro/L"
)
//go:embed .token
var apiToken stringfunc main() {
apiToken = strings.TrimSpace(apiToken)
// init SDK
sdk := dnssdk.NewClient(dnssdk.PermanentAPIKeyAuth(apiToken), func(client *dnssdk.Client) {
client.Debug = true
})
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
const zoneName = `benalu2.dev`
// create zone
_, err := sdk.CreateZone(ctx, zoneName)
if err != nil && !strings.Contains(err.Error(), `already exists`) {
L.PanicIf(err, `sdk.CreateZone`)
}
// get zone
zoneResp, err := sdk.Zone(ctx, zoneName)
L.PanicIf(err, `sdk.Zone`)
L.Describe(zoneResp)
// add A record
err = sdk.AddZoneRRSet(ctx,
zoneName, // zone
`www.`+zoneName, // name
`A`, // rrtype
[]dnssdk.ResourceRecord{
{ // https://apidocs.gcore.com/dns#tag/rrsets/operation/CreateRRSet
Content: []any{
`194.233.65.174`,
},
},
},
120, // TTL
)
L.PanicIf(err, `AddZoneRRSet`)
// get A record
rr, err := sdk.RRSet(ctx, zoneName, `www.`+zoneName, `A`)
L.PanicIf(err, `sdk.RRSet`)
L.Describe(rr) // delete A record
err = sdk.DeleteRRSet(ctx, zoneName, `www.`+zoneName, `A`)
L.PanicIf(err, `sdk.DeleteRRSet`)
// delete zone
err = sdk.DeleteZone(ctx, zoneName)
L.PanicIf(err, `sdk.DeleteZone`)
}
完整的源代码存储库是here。显然,使用其SDK操纵DNS记录非常容易,在编程添加记录后,我需要做的就是将(设置权威命名服务器)委派到其NS:NS1.GCORELABS.NET和NS2.GCDN.Services.services.services.in我在Google域上购买了域名,然后我只需要更改此域:
然后等待它正确委派(直到所有仍在缓存旧授权ns已清除的DNS服务器),我想是这样。本文在Kokizzu的个人blog的许可下重新发布