-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.go
72 lines (65 loc) · 1.75 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// Copyright 2018 Sean.ZH
package main
import (
"flag"
"log"
"net/http"
"strconv"
"github.com/miekg/dns"
)
var FlagUsingMemdb = flag.Bool("m", false, "using memory db")
var FlagUsingMongo = flag.String("mgo", "", "mongo db addr")
var FlagUsingDnsOverTls = flag.Bool("t", false, "using dns over tls")
var FlagProxyTls = flag.Bool("pt", false, "proxy using tls")
var FlagHTTPPort = flag.Int("p", 10083, "http port")
var FlagDebugMode = flag.Bool("d", false, "debug mode")
var FlagNoneProxy = flag.Bool("n", false, "none proxy")
var FlagRcodeNoRecord = flag.Int("rc", dns.RcodeNameError, "no record error rcode")
// UpDNS create new dns service
func UpDNS(conf *Config, db DataManagerI) {
h := NewHandler(conf, db)
err := dns.ListenAndServe(":53", "udp", h)
if err != nil {
panic(err)
}
}
// UpDoT
func UpDoT(conf *Config, db DataManagerI) {
cert := "/etc/letsencrypt/live/dilfish.dev-0001/fullchain.pem"
key := "/etc/letsencrypt/live/dilfish.dev-0001/privkey.pem"
h := NewHandler(conf, db)
err := dns.ListenAndServeTLS(":853", cert, key, h)
if err != nil {
panic(err)
}
}
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
flag.Parse()
var conf Config
conf.Addr = *FlagUsingMongo
conf.DB = "dnslite"
conf.Coll = "records"
conf.UsingMemDB = *FlagUsingMemdb
if *FlagRcodeNoRecord == 0 {
*FlagRcodeNoRecord = dns.RcodeNameError
}
log.Println("using mem db:", conf.UsingMemDB)
db := NewDB(&conf)
if db == nil {
log.Println("new db error")
return
}
if *FlagUsingDnsOverTls {
go UpDoT(&conf, db)
}
go UpDNS(&conf, db)
api := NewApiHandler(&conf, db)
if api == nil {
log.Println("bad api")
return
}
log.Println("listen on:", *FlagHTTPPort)
err := http.ListenAndServe(":"+strconv.FormatInt(int64(*FlagHTTPPort), 10), api)
panic(err)
}