diff --git a/conf/sower.toml b/conf/sower.toml index 9a30f19..0c5188e 100644 --- a/conf/sower.toml +++ b/conf/sower.toml @@ -4,9 +4,10 @@ server_addr="remote-server:5533" # replce it to remote server dns_server="114.114.114.114" # client_ip="192.168.0.1" blocklist=[ - "*.*.google.com", # google + "*.google.com", # google + "ocsp.pki.goog", "g.co", - "*.*.goo.gl", + "*.goo.gl", "*.googleusercontent.com", "*.googleapis.com", "gmail.com", @@ -24,19 +25,21 @@ blocklist=[ "www.linkedin.com", "www.reddit.com", # reddit "www.redditmedia.com", - "*.*.blogspot.com", # blogspot + "*.blogspot.com", # blogspot "www.blogger.com", "www.feedburner.com", "img1.blogblog.com", - "*.*.aws.amazon.com", # amazon + "*.aws.amazon.com", # amazon "m.media-amazon.com", "*.awsstatic.com", - "*.*.*.cloudfront.net", # atlassian + "*.cloudfront.net", # atlassian "*.medium.com", "accounts-static.cdn.mozilla.net", # firefox + "*.services.mozilla.com", "pocket-image-cache.com", # pocket "*.golang.org", # golang "go.googlesource.com", + "godoc.org", "gist.github.com", # github "*.k8s.io", # k8s "k8s.gcr.io", @@ -61,5 +64,7 @@ blocklist=[ "*.nyt.com", "bandwagonhost.com", # bandwagonhost "www.bwh1.net", + "*.akadns.net", # suggestions + "*.haxx.se", ] verbose=1 diff --git a/dns/dns.go b/dns/dns.go index 3407cbc..43d56fe 100644 --- a/dns/dns.go +++ b/dns/dns.go @@ -35,6 +35,9 @@ func StartDNS(dnsServer string) { func bestTry(w dns.ResponseWriter, r *dns.Msg, domain, dnsServer string) { msg, _ := dns.Exchange(r, dnsServer+":53") + if msg == nil { + return + } if len(msg.Answer) == 0 { // expose any response w.WriteMsg(msg) return @@ -65,18 +68,29 @@ func manual(w dns.ResponseWriter, r *dns.Msg, domain, dnsServer string) { w.WriteMsg(localA(r, domain)) return } - glog.V(2).Infof("match %s fail", domain) - // expose any response - msg, _ := dns.Exchange(r, dnsServer+":53") + msg, _ := dns.Exchange(r, dnsServer+":53") // expose any response + if msg == nil { + glog.V(1).Infof("get dns of %s fail", domain) + return + } w.WriteMsg(msg) + + if conf.Conf.Verbose != 0 && len(msg.Answer) != 0 { + go func() { + _, err := net.DialTimeout("tcp", domain+":http", 3*time.Second) + if err != nil && strings.Contains(err.Error(), "timeout") { + glog.V(1).Infof("SUGGEST check (%s) http(s) service: %s", domain, err) + } + }() + } } func localA(r *dns.Msg, domain string) *dns.Msg { m := new(dns.Msg) m.SetReply(r) m.Answer = []dns.RR{&dns.A{ - Hdr: dns.RR_Header{Name: domain, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 720}, + Hdr: dns.RR_Header{Name: domain, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 20}, A: conf.Conf.ClientIPNet, }} return m diff --git a/dns/suffixTree.go b/dns/suffixTree.go index 037332a..30d87d3 100644 --- a/dns/suffixTree.go +++ b/dns/suffixTree.go @@ -60,9 +60,6 @@ func (n *Node) matchSecs(secs []string) bool { return n.matchSecs(secs[:length-1]) } - if n, ok := n.Node["*"]; ok { - return n.matchSecs(secs[:length-1]) - } - - return false + _, ok := n.Node["*"] + return ok } diff --git a/proxy/client.go b/proxy/client.go index 37240e6..c7f7329 100644 --- a/proxy/client.go +++ b/proxy/client.go @@ -23,7 +23,7 @@ func StartClient(server string) { continue } } - glog.Infoln("new session to", sess.RemoteAddr()) + glog.Infof("new session from (%s) to (%s)", sess.LocalAddr(), sess.RemoteAddr()) for { // session rotate logic select { @@ -41,13 +41,13 @@ func StartClient(server string) { } func openStream(conn net.Conn, sess quic.Session, reDialCh chan<- net.Conn) bool { - glog.V(1).Infoln("new request from", conn.RemoteAddr()) + glog.V(2).Infoln("new request from", conn.RemoteAddr()) okCh := make(chan struct{}) go func() { stream, err := sess.OpenStream() if err != nil { - glog.Warningf("connect to remote(%s) fail:%s\n", sess.RemoteAddr(), err) + glog.Warningf("start stream to (%s) fail:%s\n", sess.RemoteAddr(), err) reDialCh <- conn close(okCh) return @@ -62,7 +62,9 @@ func openStream(conn net.Conn, sess quic.Session, reDialCh chan<- net.Conn) bool } close(okCh) - conn.(*net.TCPConn).SetKeepAlive(true) + if err := conn.(*net.TCPConn).SetKeepAlive(true); err != nil { + glog.Warningln(err) + } relay(&streamConn{stream, sess}, conn) conn.Close() }() @@ -70,7 +72,7 @@ func openStream(conn net.Conn, sess quic.Session, reDialCh chan<- net.Conn) bool select { case _, ok := <-okCh: // false means close on error return ok - case <-time.After(time.Second): + case <-time.After(500 * time.Millisecond): return false } } diff --git a/proxy/server.go b/proxy/server.go index 8004ab0..3da855b 100644 --- a/proxy/server.go +++ b/proxy/server.go @@ -56,7 +56,8 @@ func acceptStream(stream quic.Stream, sess quic.Session) { return } defer rc.Close() - rc.(*net.TCPConn).SetKeepAlive(true) - + if err := rc.(*net.TCPConn).SetKeepAlive(true); err != nil { + glog.Warningln(err) + } relay(rc, conn) }