Skip to content

Commit 05ce1d3

Browse files
committed
边缘节点IP支持IPV6
1 parent 111df18 commit 05ce1d3

5 files changed

Lines changed: 53 additions & 26 deletions

File tree

internal/dnsclients/dnstypes/record.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ type RecordType = string
44

55
const (
66
RecordTypeA RecordType = "A"
7+
RecordTypeAAAA RecordType = "AAAA"
78
RecordTypeCNAME RecordType = "CNAME"
89
RecordTypeTXT RecordType = "TXT"
910
)

internal/rpc/services/service_dns.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,37 @@ import (
77
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
88
)
99

10-
// DNS相关服务
10+
// DNSService DNS相关服务
1111
type DNSService struct {
1212
BaseService
1313
}
1414

15-
// 查找问题
15+
// FindAllDNSIssues 查找问题
1616
func (this *DNSService) FindAllDNSIssues(ctx context.Context, req *pb.FindAllDNSIssuesRequest) (*pb.FindAllDNSIssuesResponse, error) {
1717
// 校验请求
1818
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
1919
if err != nil {
2020
return nil, err
2121
}
2222

23-
result := []*pb.DNSIssue{}
23+
var result = []*pb.DNSIssue{}
24+
var tx = this.NullTx()
25+
var clusters []*models.NodeCluster
2426

25-
tx := this.NullTx()
26-
27-
clusters, err := models.SharedNodeClusterDAO.FindAllEnabledClustersHaveDNSDomain(tx)
28-
if err != nil {
29-
return nil, err
27+
if req.NodeClusterId <= 0 {
28+
clusters, err = models.SharedNodeClusterDAO.FindAllEnabledClustersHaveDNSDomain(tx)
29+
if err != nil {
30+
return nil, err
31+
}
32+
} else {
33+
cluster, err := models.SharedNodeClusterDAO.FindEnabledNodeCluster(tx, req.NodeClusterId)
34+
if err != nil {
35+
return nil, err
36+
}
37+
if cluster == nil {
38+
return &pb.FindAllDNSIssuesResponse{Issues: nil}, nil
39+
}
40+
clusters = []*models.NodeCluster{cluster}
3041
}
3142
for _, cluster := range clusters {
3243
issues, err := models.SharedNodeClusterDAO.CheckClusterDNS(tx, cluster)

internal/rpc/services/service_dns_domain.go

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
1010
"github.com/TeaOSLab/EdgeAPI/internal/errors"
1111
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
12+
"github.com/TeaOSLab/EdgeAPI/internal/utils"
1213
"github.com/TeaOSLab/EdgeAPI/internal/utils/numberutils"
1314
"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
1415
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
@@ -17,12 +18,12 @@ import (
1718
"net"
1819
)
1920

20-
// DNS域名相关服务
21+
// DNSDomainService DNS域名相关服务
2122
type DNSDomainService struct {
2223
BaseService
2324
}
2425

25-
// 创建域名
26+
// CreateDNSDomain 创建域名
2627
func (this *DNSDomainService) CreateDNSDomain(ctx context.Context, req *pb.CreateDNSDomainRequest) (*pb.CreateDNSDomainResponse, error) {
2728
// 校验请求
2829
adminId, userId, err := this.ValidateAdminAndUser(ctx, 0, 0)
@@ -93,7 +94,7 @@ func (this *DNSDomainService) CreateDNSDomain(ctx context.Context, req *pb.Creat
9394
return &pb.CreateDNSDomainResponse{DnsDomainId: domainId}, nil
9495
}
9596

96-
// 修改域名
97+
// UpdateDNSDomain 修改域名
9798
func (this *DNSDomainService) UpdateDNSDomain(ctx context.Context, req *pb.UpdateDNSDomainRequest) (*pb.RPCSuccess, error) {
9899
// 校验请求
99100
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -110,7 +111,7 @@ func (this *DNSDomainService) UpdateDNSDomain(ctx context.Context, req *pb.Updat
110111
return this.Success()
111112
}
112113

113-
// 删除域名
114+
// DeleteDNSDomain 删除域名
114115
func (this *DNSDomainService) DeleteDNSDomain(ctx context.Context, req *pb.DeleteDNSDomainRequest) (*pb.RPCSuccess, error) {
115116
// 校验请求
116117
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -127,7 +128,7 @@ func (this *DNSDomainService) DeleteDNSDomain(ctx context.Context, req *pb.Delet
127128
return this.Success()
128129
}
129130

130-
// 查询单个域名完整信息
131+
// FindEnabledDNSDomain 查询单个域名完整信息
131132
func (this *DNSDomainService) FindEnabledDNSDomain(ctx context.Context, req *pb.FindEnabledDNSDomainRequest) (*pb.FindEnabledDNSDomainResponse, error) {
132133
// 校验请求
133134
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -149,7 +150,7 @@ func (this *DNSDomainService) FindEnabledDNSDomain(ctx context.Context, req *pb.
149150
return &pb.FindEnabledDNSDomainResponse{DnsDomain: pbDomain}, nil
150151
}
151152

152-
// 查询单个域名基础信息
153+
// FindEnabledBasicDNSDomain 查询单个域名基础信息
153154
func (this *DNSDomainService) FindEnabledBasicDNSDomain(ctx context.Context, req *pb.FindEnabledBasicDNSDomainRequest) (*pb.FindEnabledBasicDNSDomainResponse, error) {
154155
// 校验请求
155156
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -175,7 +176,7 @@ func (this *DNSDomainService) FindEnabledBasicDNSDomain(ctx context.Context, req
175176
}}, nil
176177
}
177178

178-
// 计算服务商下的域名数量
179+
// CountAllEnabledDNSDomainsWithDNSProviderId 计算服务商下的域名数量
179180
func (this *DNSDomainService) CountAllEnabledDNSDomainsWithDNSProviderId(ctx context.Context, req *pb.CountAllEnabledDNSDomainsWithDNSProviderIdRequest) (*pb.RPCCountResponse, error) {
180181
// 校验请求
181182
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -192,7 +193,7 @@ func (this *DNSDomainService) CountAllEnabledDNSDomainsWithDNSProviderId(ctx con
192193
return this.SuccessCount(count)
193194
}
194195

195-
// 列出服务商下的所有域名
196+
// FindAllEnabledDNSDomainsWithDNSProviderId 列出服务商下的所有域名
196197
func (this *DNSDomainService) FindAllEnabledDNSDomainsWithDNSProviderId(ctx context.Context, req *pb.FindAllEnabledDNSDomainsWithDNSProviderIdRequest) (*pb.FindAllEnabledDNSDomainsWithDNSProviderIdResponse, error) {
197198
// 校验请求
198199
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -219,7 +220,7 @@ func (this *DNSDomainService) FindAllEnabledDNSDomainsWithDNSProviderId(ctx cont
219220
return &pb.FindAllEnabledDNSDomainsWithDNSProviderIdResponse{DnsDomains: result}, nil
220221
}
221222

222-
// 列出服务商下的所有域名基本信息
223+
// FindAllEnabledBasicDNSDomainsWithDNSProviderId 列出服务商下的所有域名基本信息
223224
func (this *DNSDomainService) FindAllEnabledBasicDNSDomainsWithDNSProviderId(ctx context.Context, req *pb.FindAllEnabledBasicDNSDomainsWithDNSProviderIdRequest) (*pb.FindAllEnabledBasicDNSDomainsWithDNSProviderIdResponse, error) {
224225
// 校验请求
225226
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -246,7 +247,7 @@ func (this *DNSDomainService) FindAllEnabledBasicDNSDomainsWithDNSProviderId(ctx
246247
return &pb.FindAllEnabledBasicDNSDomainsWithDNSProviderIdResponse{DnsDomains: result}, nil
247248
}
248249

249-
// 同步域名数据
250+
// SyncDNSDomainData 同步域名数据
250251
func (this *DNSDomainService) SyncDNSDomainData(ctx context.Context, req *pb.SyncDNSDomainDataRequest) (*pb.SyncDNSDomainDataResponse, error) {
251252
// 校验请求
252253
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -256,7 +257,7 @@ func (this *DNSDomainService) SyncDNSDomainData(ctx context.Context, req *pb.Syn
256257
return this.syncClusterDNS(req)
257258
}
258259

259-
// 查看支持的线路
260+
// FindAllDNSDomainRoutes 查看支持的线路
260261
func (this *DNSDomainService) FindAllDNSDomainRoutes(ctx context.Context, req *pb.FindAllDNSDomainRoutesRequest) (*pb.FindAllDNSDomainRoutesResponse, error) {
261262
// 校验请求
262263
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -282,7 +283,7 @@ func (this *DNSDomainService) FindAllDNSDomainRoutes(ctx context.Context, req *p
282283
return &pb.FindAllDNSDomainRoutesResponse{Routes: pbRoutes}, nil
283284
}
284285

285-
// 判断是否有域名可选
286+
// ExistAvailableDomains 判断是否有域名可选
286287
func (this *DNSDomainService) ExistAvailableDomains(ctx context.Context, req *pb.ExistAvailableDomainsRequest) (*pb.ExistAvailableDomainsResponse, error) {
287288
// 校验请求
288289
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -404,7 +405,7 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
404405
nodeRecords := []*dnstypes.Record{} // 之所以用数组再存一遍,是因为dnsName可能会重复
405406
nodeRecordMapping := map[string]*dnstypes.Record{} // value_route => *Record
406407
for _, record := range records {
407-
if record.Type == dnstypes.RecordTypeA && record.Name == clusterDnsName {
408+
if (record.Type == dnstypes.RecordTypeA || record.Type == dnstypes.RecordTypeAAAA) && record.Name == clusterDnsName {
408409
nodeRecords = append(nodeRecords, record)
409410
nodeRecordMapping[record.Value+"_"+record.Route] = record
410411
}
@@ -440,12 +441,16 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
440441
nodeKeys = append(nodeKeys, key)
441442
record, ok := nodeRecordMapping[key]
442443
if !ok {
444+
recordType := dnstypes.RecordTypeA
445+
if utils.IsIPv6(ip) {
446+
recordType = dnstypes.RecordTypeAAAA
447+
}
443448
result = append(result, maps.Map{
444449
"action": "create",
445450
"record": &dnstypes.Record{
446451
Id: "",
447452
Name: clusterDnsName,
448-
Type: dnstypes.RecordTypeA,
453+
Type: recordType,
449454
Value: ip,
450455
Route: route,
451456
},

internal/tasks/dns_task_executor.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients"
88
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
99
"github.com/TeaOSLab/EdgeAPI/internal/remotelogs"
10+
"github.com/TeaOSLab/EdgeAPI/internal/utils"
1011
"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
1112
"github.com/iwind/TeaGo/dbs"
1213
"github.com/iwind/TeaGo/lists"
@@ -278,7 +279,7 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error {
278279
}
279280
oldRecordsMap := map[string]*dnstypes.Record{} // route@value => record
280281
for _, record := range records {
281-
if record.Type == dnstypes.RecordTypeA && record.Name == clusterDNSName {
282+
if (record.Type == dnstypes.RecordTypeA || record.Type == dnstypes.RecordTypeAAAA) && record.Name == clusterDNSName {
282283
key := record.Route + "@" + record.Value
283284
oldRecordsMap[key] = record
284285
}
@@ -310,7 +311,7 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error {
310311
}
311312
for _, ipAddress := range ipAddresses {
312313
ip := ipAddress.Ip
313-
if len(ip) == 0 {
314+
if len(ip) == 0 || ipAddress.CanAccess == 0 {
314315
continue
315316
}
316317
if net.ParseIP(ip) == nil {
@@ -324,10 +325,14 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error {
324325
continue
325326
}
326327

328+
recordType := dnstypes.RecordTypeA
329+
if utils.IsIPv6(ip) {
330+
recordType = dnstypes.RecordTypeAAAA
331+
}
327332
err = manager.AddRecord(domain, &dnstypes.Record{
328333
Id: "",
329334
Name: clusterDNSName,
330-
Type: dnstypes.RecordTypeA,
335+
Type: recordType,
331336
Value: ip,
332337
Route: route,
333338
})

internal/utils/ip.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"strings"
99
)
1010

11-
// 将IP转换为整型
11+
// IP2Long 将IP转换为整型
1212
// 注意IPv6没有顺序
1313
func IP2Long(ip string) uint64 {
1414
if len(ip) == 0 {
@@ -24,3 +24,8 @@ func IP2Long(ip string) uint64 {
2424
}
2525
return uint64(binary.BigEndian.Uint32(s.To4()))
2626
}
27+
28+
// IsIPv6 判断是否为IPv6
29+
func IsIPv6(ip string) bool {
30+
return strings.Contains(ip, ":")
31+
}

0 commit comments

Comments
 (0)