mirror of
https://github.com/taigrr/godns
synced 2025-01-18 04:03:25 -08:00
commit
5f52bfb3f9
@ -69,10 +69,9 @@ docker pull timothyye/godns:1.0
|
||||
docker run -d --name godns --restart=always \
|
||||
-e EMAIL=your_dnspod_account \
|
||||
-e PASSWORD=your_dnspod_password \
|
||||
-e DOMAIN=your_domain \
|
||||
-e SUB_DOMAIN=your_sub_domain DOCKER_IMAGE_ID
|
||||
-e DOMAINS="your_domain1,your_domain2" DOCKER_IMAGE_ID
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Enjoy it!
|
||||
## Enjoy it!
|
||||
|
@ -1,11 +1,17 @@
|
||||
{
|
||||
"email": "",
|
||||
"password": "",
|
||||
"login_token": "",
|
||||
"domain": "",
|
||||
"sub_domain": "",
|
||||
"ip_url": "http://members.3322.org/dyndns/getip",
|
||||
"log_path":"./godns.log",
|
||||
"log_size":16,
|
||||
"log_num":3
|
||||
"email": "example@gmail.com",
|
||||
"password": "",
|
||||
"login_token": "",
|
||||
"domains": [{
|
||||
"domain_name":"example.com",
|
||||
"sub_domains":["www","test"]
|
||||
},{
|
||||
"domain_name":"example2.com",
|
||||
"sub_domains":["www","test"]
|
||||
}
|
||||
],
|
||||
"ip_url": "http://members.3322.org/dyndns/getip",
|
||||
"log_path":"./godns.log",
|
||||
"log_size":16,
|
||||
"log_num":3
|
||||
}
|
||||
|
53
godns.go
53
godns.go
@ -36,13 +36,17 @@ func main() {
|
||||
Email: os.Getenv("EMAIL"),
|
||||
Password: os.Getenv("PASSWORD"),
|
||||
LoginToken: os.Getenv("TOKEN"),
|
||||
Domain: os.Getenv("DOMAIN"),
|
||||
SubDomain: os.Getenv("SUB_DOMAIN"),
|
||||
IPUrl: "http://members.3322.org/dyndns/getip",
|
||||
LogPath: "./godns.log",
|
||||
LogSize: 16,
|
||||
LogNum: 3,
|
||||
}
|
||||
|
||||
if err := LoadDomains(os.Getenv("DOMAINS"), &configuration.Domains); err != nil {
|
||||
fmt.Println(err.Error())
|
||||
log.Println(err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
} else {
|
||||
//Load settings from configurations file
|
||||
if err := LoadSettings(*optConf, &configuration); err != nil {
|
||||
@ -53,12 +57,12 @@ func main() {
|
||||
}
|
||||
|
||||
if err := checkSettings(&configuration); err != nil {
|
||||
log.Println("Settings is invalid! " + err.Error())
|
||||
log.Println("Settings is invalid! ", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := InitLogger(configuration.LogPath, configuration.LogSize, configuration.LogNum); err != nil {
|
||||
log.Println("InitLogger error:" + err.Error())
|
||||
log.Println("InitLogger error:", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
@ -79,9 +83,18 @@ func dnsLoop() {
|
||||
}
|
||||
}()
|
||||
|
||||
for _, domain := range configuration.Domains {
|
||||
go DomainLoop(&domain)
|
||||
}
|
||||
|
||||
select {}
|
||||
}
|
||||
|
||||
func DomainLoop(domain *Domain) {
|
||||
|
||||
for {
|
||||
|
||||
domainID := getDomain(configuration.Domain)
|
||||
domainID := getDomain(domain.DomainName)
|
||||
|
||||
if domainID == -1 {
|
||||
continue
|
||||
@ -93,22 +106,24 @@ func dnsLoop() {
|
||||
log.Println("get_currentIP:", err)
|
||||
continue
|
||||
}
|
||||
|
||||
subDomainID, ip := getSubDomain(domainID, configuration.SubDomain)
|
||||
|
||||
if subDomainID == "" || ip == "" {
|
||||
log.Println("sub_domain:", subDomainID, ip)
|
||||
continue
|
||||
}
|
||||
|
||||
log.Println("currentIp is:", currentIP)
|
||||
|
||||
//Continue to check the IP of sub-domain
|
||||
if len(ip) > 0 && !strings.Contains(currentIP, ip) {
|
||||
log.Println("Start to update record IP...")
|
||||
updateIP(domainID, subDomainID, configuration.SubDomain, currentIP)
|
||||
} else {
|
||||
log.Println("Current IP is same as domain IP, no need to update...")
|
||||
for _, subDomain := range domain.SubDomains {
|
||||
|
||||
subDomainID, ip := getSubDomain(domainID, subDomain)
|
||||
|
||||
if subDomainID == "" || ip == "" {
|
||||
log.Printf("domain: %s.%s subDomainID: %s ip: %s\n", subDomain, domain.DomainName, subDomainID, ip)
|
||||
continue
|
||||
}
|
||||
|
||||
//Continue to check the IP of sub-domain
|
||||
if len(ip) > 0 && !strings.Contains(currentIP, ip) {
|
||||
log.Printf("%s.%s Start to update record IP...\n", subDomain, domain.DomainName)
|
||||
updateIP(domainID, subDomainID, subDomain, currentIP)
|
||||
} else {
|
||||
log.Printf("%s.%s Current IP is same as domain IP, no need to update...\n", subDomain, domain.DomainName)
|
||||
}
|
||||
}
|
||||
|
||||
//Interval is 5 minutes
|
||||
|
55
settings.go
55
settings.go
@ -4,19 +4,24 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Domain struct {
|
||||
DomainName string `json:"domain_name"`
|
||||
SubDomains []string `json:"sub_domains"`
|
||||
}
|
||||
|
||||
//Settings struct
|
||||
type Settings struct {
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
LoginToken string `json:"login_token"`
|
||||
Domain string `json:"domain"`
|
||||
SubDomain string `json:"sub_domain"`
|
||||
IPUrl string `json:"ip_url"`
|
||||
LogPath string `json:"log_path"`
|
||||
LogSize int `json:"log_size"`
|
||||
LogNum int `json:"log_num"`
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
LoginToken string `json:"login_token"`
|
||||
Domains []Domain `json:"domains"`
|
||||
IPUrl string `json:"ip_url"`
|
||||
LogPath string `json:"log_path"`
|
||||
LogSize int `json:"log_size"`
|
||||
LogNum int `json:"log_num"`
|
||||
}
|
||||
|
||||
//LoadSettings -- Load settings from config file
|
||||
@ -36,3 +41,35 @@ func LoadSettings(configPath string, settings *Settings) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
//LoadDomains -- Load domains from domains string
|
||||
func LoadDomains(domainsOrginStr string, domains *[]Domain) error {
|
||||
|
||||
domainsMap := make(map[string]*Domain)
|
||||
domainsArray := strings.Split(domainsOrginStr, ",")
|
||||
for _, host := range domainsArray {
|
||||
dotCount := strings.Count(host, ".")
|
||||
if dotCount < 2 {
|
||||
continue
|
||||
}
|
||||
len := len(host)
|
||||
pos := strings.Index(host, ".")
|
||||
subDomain := host[0:pos]
|
||||
domainName := host[pos+1 : len]
|
||||
|
||||
if d, exist := domainsMap[domainName]; exist {
|
||||
d.SubDomains = append(d.SubDomains, subDomain)
|
||||
} else {
|
||||
d := new(Domain)
|
||||
d.DomainName = domainName
|
||||
d.SubDomains = append(d.SubDomains, subDomain)
|
||||
domainsMap[domainName] = d
|
||||
}
|
||||
}
|
||||
|
||||
for _, d := range domainsMap {
|
||||
*domains = append(*domains, *d)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user