diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..256608e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM harbor.ks.easyj.top/zt/alpine:0.1 + +ENV APP_DIR=/app \ + DOMAIN=myschools.me \ + RR=PI1 \ + AL_REGIONID=cn-hangzhou \ + AL_ACCESSKEYID=LTAI5tJV828nqSqGpkouh1FD \ + AL_ACCESSSECRET=aiMEp37bHLOjtoJFTDTfpq1o37cGtA + +COPY ddns6 ${APP_DIR}/ddns6 + +WORKDIR ${APP_DIR} + +RUN chmod +x ddns6 + +EXPOSE 8080 + +CMD ["./ddns6"] \ No newline at end of file diff --git a/main.go b/main.go index 870995e..e81a8d9 100644 --- a/main.go +++ b/main.go @@ -4,15 +4,24 @@ import ( "fmt" "log" "net" + "os" + "strings" "time" "github.com/aliyun/alibaba-cloud-sdk-go/services/alidns" ) func main() { + domain := os.Getenv("DOMAIN") + rr := os.Getenv("RR") + regionID := os.Getenv("AL_REGIONID") + accessKeyID := os.Getenv("AL_ACCESSKEYID") + accessSecret := os.Getenv("AL_ACCESSSECRET") + + fullDNS := fmt.Sprintf("%s.%s", rr, domain) for { - time.Sleep(time.Minute) + time.Sleep(time.Second) addrs, err := net.InterfaceAddrs() if err != nil { @@ -37,25 +46,46 @@ func main() { continue } - client, err := alidns.NewClientWithAccessKey("cn-hangzhou", "", "") + //查询域名对应的IP是否相同,相同时跳过。 + ns, err := net.LookupHost(fullDNS) + if err != nil { + log.Println(err.Error()) + + if !strings.Contains(err.Error(), "no such host") { + continue + } + } + + found := false + for _, n := range ns { + if n == ip6 { + found = true + continue + } + } + if found { + continue + } + + client, err := alidns.NewClientWithAccessKey(regionID, accessKeyID, accessSecret) if err != nil { log.Println(err.Error()) continue } - //查询域名对应的IP是否相同,相同时跳过。 - //修改域名对应的IP,修改成功后continue req := alidns.CreateUpdateDomainRecordRequest() req.Scheme = "https" - req.RR = "pi1" + req.RR = rr req.Value = ip6 req.Type = "AAAA" - req.Domain = "myschools.me" + req.Domain = domain resp, err := client.UpdateDomainRecord(req) if err != nil { log.Println(err.Error()) - continue + if !strings.Contains(err.Error(), "not wodeschool.com") { + continue + } } if resp.IsSuccess() { @@ -67,12 +97,14 @@ func main() { request.Scheme = "https" request.Value = ip6 request.Type = "AAAA" - request.RR = "pi1" - request.DomainName = "dns-example.com" + request.RR = rr + request.DomainName = domain response, err := client.AddDomainRecord(request) if err != nil { fmt.Print(err.Error()) } - fmt.Printf("response is %#v\n", response) + if !response.IsSuccess() { + fmt.Print(response.GetHttpContentString()) + } } } diff --git a/readme.md b/readme.md index 2c83236..67e2477 100644 --- a/readme.md +++ b/readme.md @@ -1,10 +1,31 @@ -DDNS6 +# DDNS6 + +--- + 一、概述 -把当前主机的IPV6向阿里DNS进行注册,实现IPV6 DDNS功能。 + 把当前主机的IPV6向阿里DNS进行注册,实现IPV6 DDNS功能。 二、组件 github.com/alibabacloud-go/domain-20180208 v0.0.2 - github.com/alibabacloud-go/alidns-20150109/v4 v4.0.10 \ No newline at end of file + github.com/alibabacloud-go/alidns-20150109/v4 v4.0.10 + +三、配置 + + 1. 阿里云配置RAM访问控制,权限如下: + + AliyunDNSFullAccess + AliyunHTTPDNSFullAccess + + 2. 环境变量 + DOMAIN 域名 + RR 二级域名 + AL_REGIONID 地域,默认cn-hangzhou + AL_ACCESSKEYID 访问key + AL_ACCESSSECRET 访问私钥 + +四、 调试 + + DOMAIN=myschools.me RR=pi1 go run . \ No newline at end of file