mirror of
https://github.com/wweir/sower.git
synced 2024-04-21 12:42:15 +00:00
Add suggestion for manual rule
This commit is contained in:
+10
-5
@@ -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
|
||||
|
||||
+18
-4
@@ -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
|
||||
|
||||
+2
-5
@@ -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
|
||||
}
|
||||
|
||||
+7
-5
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user