diff --git a/.goreleaser.yml b/.goreleaser.yml index 5cb386d..2754228 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -22,10 +22,14 @@ builds: - id: default env: - CGO_ENABLED=0 + # GOOS list to build for. + # For more info refer to: https://golang.org/doc/install/source#environment + # Defaults are darwin and linux. goos: - windows - linux - darwin + - freebsd goarch: - 386 - amd64 @@ -45,6 +49,8 @@ builds: ignore: - goos: darwin goarch: 386 + - goos: freebsd + goarch: arm # https://goreleaser.com/customization/archive/ archives: diff --git a/README.md b/README.md index 17b9827..54b52e1 100644 --- a/README.md +++ b/README.md @@ -370,7 +370,7 @@ Config file format(see `./glider.conf.example` as an example): 1. Clone the source code: ```bash - git clone https://github.com/nadoo/glider + git clone https://github.com/nadoo/glider && cd glider ``` 2. Customize features: @@ -381,7 +381,7 @@ Config file format(see `./glider.conf.example` as an example): 3. Build it(requires **Go 1.16+** ) ```bash - cd glider && go build -v -ldflags "-s -w" + go build -v -ldflags "-s -w" ``` diff --git a/dns/client.go b/dns/client.go index 11ba922..c3bff36 100644 --- a/dns/client.go +++ b/dns/client.go @@ -150,7 +150,7 @@ func (c *Client) exchange(qname string, reqBytes []byte, preferTCP bool) ( network = "tcp" dialer := c.proxy.NextDialer(qname + ":53") - // if we are resolving the dialer's domain, then use Direct to avoid denpency loop + // if we are resolving the dialer's domain, then use Direct to avoid dependency loop // TODO: dialer.Addr() == "REJECT", tricky if strings.Contains(dialer.Addr(), qname) || dialer.Addr() == "REJECT" { dialer = proxy.Default diff --git a/go.mod b/go.mod index 2221668..e90e97d 100644 --- a/go.mod +++ b/go.mod @@ -9,15 +9,16 @@ require ( github.com/dgryski/go-rc2 v0.0.0-20150621095337-8a9021637152 github.com/ebfe/rc2 v0.0.0-20131011165748-24b9757f5521 // indirect github.com/insomniacslk/dhcp v0.0.0-20210315110227-c51060810aaa - github.com/klauspost/cpuid/v2 v2.0.5 // indirect + github.com/klauspost/cpuid/v2 v2.0.6 // indirect github.com/klauspost/reedsolomon v1.9.12 // indirect + github.com/mdlayher/raw v0.0.0-20210412142147-51b895745faf // indirect github.com/nadoo/conflag v0.2.3 github.com/nadoo/ipset v0.3.0 github.com/tjfoc/gmsm v1.4.0 // indirect github.com/xtaci/kcp-go/v5 v5.6.1 - golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670 - golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4 // indirect - golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4 // indirect + golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc + golang.org/x/net v0.0.0-20210415231046-e915ea6b2b7d // indirect + golang.org/x/sys v0.0.0-20210415045647-66c3f260301c // indirect ) // Replace dependency modules with local developing copy diff --git a/go.sum b/go.sum index e5f5077..828980f 100644 --- a/go.sum +++ b/go.sum @@ -50,8 +50,8 @@ github.com/klauspost/cpuid v1.2.4/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= github.com/klauspost/cpuid/v2 v2.0.2/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.5 h1:qnfhwbFriwDIX51QncuNU5mEMf+6KE3t7O8V2KQl3Dg= -github.com/klauspost/cpuid/v2 v2.0.5/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.6 h1:dQ5ueTiftKxp0gyjKSx5+8BtPWkyQbd95m8Gys/RarI= +github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/reedsolomon v1.9.9/go.mod h1:O7yFFHiQwDR6b2t63KPUpccPtNdp5ADgh1gg4fd12wo= github.com/klauspost/reedsolomon v1.9.12 h1:EyOucRmcrLH+2hqKGdoA5SM8pwPKR6BJsf3r6zpYOA0= github.com/klauspost/reedsolomon v1.9.12/go.mod h1:nLvuzNvy1ZDNQW30IuMc2ZWCbiqrJgdLoUS2X8HAUVg= @@ -62,8 +62,9 @@ github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqc github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY= github.com/mdlayher/netlink v1.1.1/go.mod h1:WTYpFb/WTvlRJAyKhZL5/uy69TDDpHHu2VZmb2XgV7o= github.com/mdlayher/raw v0.0.0-20190606142536-fef19f00fc18/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg= -github.com/mdlayher/raw v0.0.0-20191009151244-50f2db8cc065 h1:aFkJ6lx4FPip+S+Uw4aTegFMct9shDvP+79PsSxpm3w= github.com/mdlayher/raw v0.0.0-20191009151244-50f2db8cc065/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg= +github.com/mdlayher/raw v0.0.0-20210412142147-51b895745faf h1:InctQoB89TIkmgIFQeIL4KXNvWc1iebQXdZggqPSwL8= +github.com/mdlayher/raw v0.0.0-20210412142147-51b895745faf/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg= github.com/mmcloughlin/avo v0.0.0-20200803215136-443f81d77104/go.mod h1:wqKykBG2QzQDJEzvRkcS8x6MiSJkF52hXZsXcjaB3ls= github.com/nadoo/conflag v0.2.3 h1:/+rTaN0bHTIiQbPl1WZK78JRoqjlNqJ9Zf05ep0o5jI= github.com/nadoo/conflag v0.2.3/go.mod h1:dzFfDUpXdr2uS2oV+udpy5N2vfNOu/bFzjhX1WI52co= @@ -102,8 +103,8 @@ golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670 h1:gzMM0EjIYiRmJI3+jBdFuoynZlpxa2JQZsolKu09BXo= -golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc h1:+q90ECDSAQirdykUN6sPEiBXBsp8Csjcca8Oy7bgLTA= +golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -127,8 +128,8 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4 h1:b0LrWgu8+q7z4J+0Y3Umo5q1dL7NXBkKBWkaVkAq17E= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210415231046-e915ea6b2b7d h1:BgJvlyh+UqCUaPlscHJ+PN8GcpfrFdr7NHjd1JL0+Gs= +golang.org/x/net v0.0.0-20210415231046-e915ea6b2b7d/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -152,13 +153,14 @@ golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4 h1:EZ2mChiOa8udjfp6rRmswTbtZN/QzUQp4ptM4rnjHvc= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210415045647-66c3f260301c h1:6L+uOeS3OQt/f4eFHXZcTxeZrGCuz+CLElgEBjbcTA4= +golang.org/x/sys v0.0.0-20210415045647-66c3f260301c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= diff --git a/main.go b/main.go index 6fe8a77..c4cfa64 100644 --- a/main.go +++ b/main.go @@ -18,7 +18,7 @@ import ( ) var ( - version = "0.13.2" + version = "0.14.0" config = parseConfig() ) diff --git a/proxy/direct.go b/proxy/direct.go index e56949f..cb96add 100644 --- a/proxy/direct.go +++ b/proxy/direct.go @@ -25,7 +25,7 @@ func NewDirect(intface string, dialTimeout, relayTimeout time.Duration) (*Direct if intface != "" { if ip := net.ParseIP(intface); ip != nil { - d.ip = net.ParseIP(intface) + d.ip = ip } else { iface, err := net.InterfaceByName(intface) if err != nil { diff --git a/proxy/server.go b/proxy/server.go index 9b0e37f..6e18a99 100644 --- a/proxy/server.go +++ b/proxy/server.go @@ -29,8 +29,8 @@ func RegisterServer(name string, c ServerCreator) { // ServerFromURL calls the registered creator to create proxy servers. // dialer is the default upstream dialer so cannot be nil, we can use Default when calling this function. -func ServerFromURL(s string, p Proxy) (Server, error) { - if p == nil { +func ServerFromURL(s string, proxy Proxy) (Server, error) { + if proxy == nil { return nil, errors.New("ServerFromURL: dialer cannot be nil") } @@ -41,7 +41,7 @@ func ServerFromURL(s string, p Proxy) (Server, error) { scheme := s[:strings.Index(s, ":")] c, ok := serverCreators[strings.ToLower(scheme)] if ok { - return c(s, p) + return c(s, proxy) } return nil, errors.New("unknown scheme '" + scheme + "'") diff --git a/proxy/tls/tls.go b/proxy/tls/tls.go index 6dbd813..14f38dd 100644 --- a/proxy/tls/tls.go +++ b/proxy/tls/tls.go @@ -52,7 +52,7 @@ func NewTLS(s string, d proxy.Dialer, p proxy.Proxy) (*TLS, error) { keyFile: query.Get("key"), } - if _, p, _ := net.SplitHostPort(t.addr); p == "" { + if _, port, _ := net.SplitHostPort(t.addr); port == "" { t.addr = net.JoinHostPort(t.addr, "443") } diff --git a/proxy/trojan/trojan.go b/proxy/trojan/trojan.go index d0a90b5..f95e65a 100644 --- a/proxy/trojan/trojan.go +++ b/proxy/trojan/trojan.go @@ -58,7 +58,7 @@ func NewTrojan(s string, d proxy.Dialer, p proxy.Proxy) (*Trojan, error) { // fallback: "127.0.0.1:80", } - if _, p, _ := net.SplitHostPort(t.addr); p == "" { + if _, port, _ := net.SplitHostPort(t.addr); port == "" { t.addr = net.JoinHostPort(t.addr, "443") } diff --git a/rule/group.go b/rule/group.go index fa49735..cb51266 100644 --- a/rule/group.go +++ b/rule/group.go @@ -194,7 +194,7 @@ func (p *FwdrGroup) Check() { } addr := u.Host - if _, p, _ := net.SplitHostPort(addr); p == "" { + if _, port, _ := net.SplitHostPort(addr); port == "" { addr = net.JoinHostPort(addr, "80") }