120 lines
3.6 KiB
Go
120 lines
3.6 KiB
Go
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
//go:build plus
|
|
|
|
package dnsconfigs
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ddosconfigs"
|
|
)
|
|
|
|
type NSNodeConfig struct {
|
|
Id int64 `yaml:"id" json:"id"`
|
|
IsPlus bool `yaml:"isPlus" json:"isPlus"`
|
|
NodeId string `yaml:"nodeId" json:"nodeId"`
|
|
Secret string `yaml:"secret" json:"secret"`
|
|
ClusterId int64 `yaml:"clusterId" json:"clusterId"`
|
|
AccessLogRef *NSAccessLogRef `yaml:"accessLogRef" json:"accessLogRef"`
|
|
AccessLogWriteTargets *serverconfigs.AccessLogWriteTargets `yaml:"accessLogWriteTargets" json:"accessLogWriteTargets"`
|
|
AccessLogFilePath string `yaml:"accessLogFilePath" json:"accessLogFilePath"`
|
|
AccessLogRotate *serverconfigs.AccessLogRotateConfig `yaml:"accessLogRotate" json:"accessLogRotate"`
|
|
RecursionConfig *NSRecursionConfig `yaml:"recursionConfig" json:"recursionConfig"`
|
|
DDoSProtection *ddosconfigs.ProtectionConfig `yaml:"ddosProtection" json:"ddosProtection"`
|
|
AllowedIPs []string `yaml:"allowedIPs" json:"allowedIPs"`
|
|
TimeZone string `yaml:"timeZone" json:"timeZone"` // 自动设置时区
|
|
Hosts []string `yaml:"hosts" json:"hosts"` // 主机名
|
|
Email string `yaml:"email" json:"email"`
|
|
SOA *NSSOAConfig `yaml:"soa" json:"soa"` // SOA配置
|
|
SOASerial uint32 `yaml:"soaSerial" json:"soaSerial"`
|
|
DetectAgents bool `yaml:"detectAgents" json:"detectAgents"` // 是否实时监测Agents
|
|
|
|
TCP *serverconfigs.TCPProtocolConfig `yaml:"tcp" json:"tcp"` // TCP配置
|
|
TLS *serverconfigs.TLSProtocolConfig `yaml:"tls" json:"tls"` // TLS配置
|
|
UDP *serverconfigs.UDPProtocolConfig `yaml:"udp" json:"udp"` // UDP配置
|
|
DoH *NSDoHConfig `yaml:"doh" json:"doh"` // DoH配置
|
|
|
|
Answer *NSAnswerConfig `yaml:"answer" json:"answer"` // 应答查询
|
|
|
|
APINodeAddrs []*serverconfigs.NetworkAddressConfig `yaml:"apiNodeAddrs" json:"apiNodeAddrs"`
|
|
|
|
paddedId string
|
|
}
|
|
|
|
func (this *NSNodeConfig) Init(ctx context.Context) error {
|
|
this.paddedId = fmt.Sprintf("%08d", this.Id)
|
|
|
|
// accessLog
|
|
if this.AccessLogRef != nil {
|
|
err := this.AccessLogRef.Init()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// 递归DNS
|
|
if this.RecursionConfig != nil {
|
|
err := this.RecursionConfig.Init()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// DDoS
|
|
if this.DDoSProtection != nil {
|
|
err := this.DDoSProtection.Init()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// tcp
|
|
if this.TCP != nil {
|
|
err := this.TCP.Init()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// tls
|
|
if this.TLS != nil {
|
|
err := this.TLS.Init(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// DoH
|
|
if this.DoH != nil {
|
|
err := this.DoH.Init()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// udp
|
|
if this.UDP != nil {
|
|
err := this.UDP.Init()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// api node addrs
|
|
if len(this.APINodeAddrs) > 0 {
|
|
for _, addr := range this.APINodeAddrs {
|
|
err := addr.Init()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (this *NSNodeConfig) PaddedId() string {
|
|
return this.paddedId
|
|
}
|