1
1
/**
2
- * dingo: a Google DNS over HTTPS caching proxy written in Go
2
+ * dingo: a DNS caching proxy written in Go
3
3
*
4
4
* Copyright (C) 2016 Pawel Foremski <[email protected] >
5
5
* Licensed under GNU GPL v3
@@ -15,29 +15,17 @@ import "net"
15
15
import "flag"
16
16
import "log"
17
17
import "github.com/miekg/dns"
18
- import "net/http"
19
- import "net/url"
20
18
import "time"
21
- import "io/ioutil"
22
- import "encoding/json"
23
- import "crypto/tls"
24
- import "math/rand"
25
- import "strings"
26
19
import "github.com/patrickmn/go-cache"
27
- // import "github.com/devsisters/goquic "
20
+ import "math/rand "
28
21
29
22
/**********************************************************************/
30
23
31
24
/* command-line arguments */
32
25
var (
33
- bindip = flag .String ("bind" , "0.0.0.0" , "bind to interface ip " )
26
+ bindip = flag .String ("bind" , "0.0.0.0" , "IP address to bind to " )
34
27
port = flag .Int ("port" , 32000 , "listen on port number" )
35
- dbglvl = flag .Int ("dbg" , 1 , "debugging level" )
36
- workers = flag .Int ("workers" , 10 , "number of independent workers" )
37
- server = flag .String ("server" , "216.58.209.174" , "Google DNS web server address" )
38
- sni = flag .String ("sni" , "www.google.com" , "SNI string to send (should match server certificate)" )
39
- edns = flag .String ("edns" , "0.0.0.0/0" , "edns client subnet" )
40
- nopad = flag .Bool ("nopad" , false , "disable random padding" )
28
+ dbglvl = flag .Int ("dbg" , 2 , "debugging level" )
41
29
)
42
30
43
31
/**********************************************************************/
@@ -149,57 +137,6 @@ func resolve(name string, qtype int) Reply {
149
137
return <- rchan
150
138
}
151
139
152
- /* resolves queries */
153
- func resolver (server string ) {
154
- /* setup the HTTP client */
155
- var httpTr = http .DefaultTransport .(* http.Transport )
156
- // var httpTr = goquic.NewRoundTripper(true)
157
- var tlsCfg = & tls.Config { ServerName : * sni }
158
- httpTr .TLSClientConfig = tlsCfg ;
159
- // req,_ := http.NewRequest("GET", "https://www.google.com/", nil)
160
- // httpTr.RoundTrip(req)
161
- var httpClient = & http.Client { Timeout : time .Second * 10 , Transport : httpTr }
162
-
163
- for q := range qchan {
164
- /* make the new response object */
165
- r := Reply { Status : - 1 }
166
-
167
- /* prepare the query */
168
- v := url.Values {}
169
- v .Set ("name" , q .Name )
170
- v .Set ("type" , fmt .Sprintf ("%d" , q .Type ))
171
- if len (* edns ) > 0 {
172
- v .Set ("edns_client_subnet" , * edns )
173
- }
174
- if ! * nopad {
175
- v .Set ("random_padding" , strings .Repeat (string (65 + rand .Intn (26 )), rand .Intn (500 )))
176
- }
177
-
178
- /* prepare request, send proper HTTP 'Host:' header */
179
- addr := fmt .Sprintf ("https://%s/resolve?%s" , server , v .Encode ())
180
- hreq ,_ := http .NewRequest ("GET" , addr , nil )
181
- hreq .Host = "dns.google.com"
182
-
183
- /* send the query */
184
- resp ,err := httpClient .Do (hreq )
185
- if (err == nil ) {
186
- dbg (2 , "[%s/%d] %s %s" , q .Name , q .Type , resp .Status , resp .Proto )
187
-
188
- /* read */
189
- buf ,_ := ioutil .ReadAll (resp .Body )
190
- resp .Body .Close ()
191
- dbg (7 , " reply: %s" , buf )
192
-
193
- /* parse JSON? */
194
- if (resp .StatusCode == 200 ) { json .Unmarshal (buf , & r ) }
195
- r .Now = time .Now ()
196
- } else { dbg (1 , "[%s/%d] error: %s" , q .Name , q .Type , err .Error ()) }
197
-
198
- /* write the reply */
199
- * q .rchan <- r
200
- }
201
- }
202
-
203
140
/* main */
204
141
func main () {
205
142
/* prepare */
@@ -215,10 +152,11 @@ func main() {
215
152
if err != nil { die (err ) }
216
153
217
154
/* start workers */
218
- for i := 0 ; i < * workers ; i ++ { go resolver (* server ) }
155
+ gdns_start ()
156
+ // odns_start()
219
157
220
158
/* accept new connections forever */
221
- dbg (1 , "dingo ver. 0.1 started on UDP port %d" , laddr .Port )
159
+ dbg (1 , "dingo ver. 0.11 started on UDP port %d" , laddr .Port )
222
160
var buf []byte
223
161
for {
224
162
buf = make ([]byte , 1500 )
0 commit comments