From 846ca0b699733a27c81441ec6ad60e3031dcd419 Mon Sep 17 00:00:00 2001 From: nadoo <287492+nadoo@users.noreply.github.com> Date: Tue, 3 May 2022 18:19:33 +0800 Subject: [PATCH] chore: fixed typo and add some help info --- .Dockerfile | 42 +++++++++++++++++++------------------- README.md | 28 +++++++++++++++++++------ config.go | 10 +++++---- config/glider.conf.example | 2 +- go.mod | 6 +++--- go.sum | 12 +++++------ proxy/direct.go | 13 ++++++++++++ proxy/reject/reject.go | 7 +++++++ proxy/socks4/socks4.go | 5 +---- 9 files changed, 80 insertions(+), 45 deletions(-) diff --git a/.Dockerfile b/.Dockerfile index 7b66405..84d0912 100644 --- a/.Dockerfile +++ b/.Dockerfile @@ -6,27 +6,27 @@ RUN apk add --no-cache ca-certificates ARG TARGETPLATFORM RUN case $TARGETPLATFORM in \ - 'linux/386') \ - export FOLDER='default_linux_386'; \ - ;; \ - 'linux/amd64') \ - export FOLDER='default_linux_amd64_v1'; \ - ;; \ - 'linux/arm/v6') \ - export FOLDER='default_linux_arm_6'; \ - ;; \ - 'linux/arm/v7') \ - export FOLDER='default_linux_arm_7'; \ - ;; \ - 'linux/arm64') \ - export FOLDER='default_linux_arm64'; \ - ;; \ - 'linux/riscv64') \ - export FOLDER='default_linux_riscv64'; \ - ;; \ - *) echo >&2 "error: unsupported architecture '$TARGETPLATFORM'"; exit 1 ;; \ - esac \ - && mv /dist/$FOLDER /app + 'linux/386') \ + export FOLDER='default_linux_386'; \ + ;; \ + 'linux/amd64') \ + export FOLDER='default_linux_amd64_v1'; \ + ;; \ + 'linux/arm/v6') \ + export FOLDER='default_linux_arm_6'; \ + ;; \ + 'linux/arm/v7') \ + export FOLDER='default_linux_arm_7'; \ + ;; \ + 'linux/arm64') \ + export FOLDER='default_linux_arm64'; \ + ;; \ + 'linux/riscv64') \ + export FOLDER='default_linux_riscv64'; \ + ;; \ + *) echo >&2 "error: unsupported architecture '$TARGETPLATFORM'"; exit 1 ;; \ + esac \ + && mv /dist/$FOLDER /app # Final Stage diff --git a/README.md b/README.md index 63ba4f0..76eb809 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ # [glider](https://github.com/nadoo/glider) +[![Go Version](https://img.shields.io/github/go-mod/go-version/nadoo/glider?style=flat-square)](https://go.dev/dl/) [![Go Report Card](https://goreportcard.com/badge/github.com/nadoo/glider?style=flat-square)](https://goreportcard.com/report/github.com/nadoo/glider) [![GitHub release](https://img.shields.io/github/v/release/nadoo/glider.svg?style=flat-square&include_prereleases)](https://github.com/nadoo/glider/releases) [![Actions Status](https://img.shields.io/github/workflow/status/nadoo/glider/Build?style=flat-square)](https://github.com/nadoo/glider/actions) -[![Go Version](https://img.shields.io/github/go-mod/go-version/nadoo/glider?style=flat-square)](https://go.dev/dl/) +[![DockerHub](https://img.shields.io/docker/image-size/nadoo/glider?color=blue&label=docker&style=flat-square)](https://hub.docker.com/r/nadoo/glider) glider is a forward proxy with multiple protocols support, and also a dns/dhcp server with ipset management features(like dnsmasq). @@ -72,7 +73,7 @@ we can set up local listeners as proxy servers, and forward requests to internet |Simple-Obfs | | |√| |transport client only |Redir |√| | | |linux redirect proxy |Redir6 |√| | | |linux redirect proxy(ipv6) -|Tproxy | |√| | |linux tproxy(udp only) +|TProxy | |√| | |linux tproxy(udp only) |Reject | | |√|√|reject all requests @@ -89,10 +90,7 @@ we can set up local listeners as proxy servers, and forward requests to internet #### Run ```bash -glider -config CONFIG_PATH -``` -```bash -glider -verbose -listen :8443 -forward SCHEME://HOST:PORT +glider -verbose -listen :8443 # docker run --rm -it nadoo/glider -verbose -listen :8443 ``` @@ -234,6 +232,16 @@ glider 0.16.1, https://github.com/nadoo/glider (glider.proxy@gmail.com) glider -scheme all ```bash +Direct scheme: + direct:// + +Only needed when you want to load balance multiple interfaces directly: + glider -verbose -listen :8443 -forward direct://#interface=eth0 -forward direct://#interface=eth1 -strategy rr + +Or you can use the high availability mode: + glider -verbose -listen :8443 -forward direct://#interface=eth0&priority=100 -forward direct://#interface=eth1&priority=200 -strategy ha + +-- Http scheme: http://[user:pass@]host:port @@ -254,6 +262,10 @@ Simple-Obfs scheme: Available types for simple-obfs: http, tls +-- +Reject scheme: + reject:// + -- Smux scheme: smux://host:port @@ -404,6 +416,10 @@ Examples: ## Config +```bash +glider -config CONFIG_PATH +``` + - [ConfigFile](config) - [glider.conf.example](config/glider.conf.example) - [office.rule.example](config/rules.d/office.rule.example) diff --git a/config.go b/config.go index 0a68ddd..3959fd9 100644 --- a/config.go +++ b/config.go @@ -92,8 +92,7 @@ check=disable: disable health check`) flag.StringSliceUniqVar(&conf.Services, "service", nil, "run specified services, format: SERVICE_NAME[,SERVICE_CONFIG]") flag.Usage = usage - err := flag.Parse() - if err != nil { + if err := flag.Parse(); err != nil { // flag.Usage() fmt.Fprintf(os.Stderr, "ERROR: %s\n", err) os.Exit(-1) @@ -128,6 +127,11 @@ check=disable: disable health check`) proxy.UDPBufSize = conf.UDPBufSize } + loadRules(conf) + return conf +} + +func loadRules(conf *Config) { // rulefiles for _, ruleFile := range conf.RuleFiles { if !path.IsAbs(ruleFile) { @@ -156,8 +160,6 @@ check=disable: disable health check`) conf.rules = append(conf.rules, rule) } } - - return conf } func usage() { diff --git a/config/glider.conf.example b/config/glider.conf.example index 9e787a9..2e19afd 100644 --- a/config/glider.conf.example +++ b/config/glider.conf.example @@ -293,4 +293,4 @@ rules-dir=rules.d # ENVIRONMENT VARIABLES # ---------- # use {$ENV_VAR_NAME} in VALUE to get the Environment Variable value. -# forwarder=socks5://{$USER_NAME}:{$USER_PASS}@:1080 \ No newline at end of file +# forward=socks5://{$USER_NAME}:{$USER_PASS}@:1080 \ No newline at end of file diff --git a/go.mod b/go.mod index 99141d6..9a92b47 100644 --- a/go.mod +++ b/go.mod @@ -11,8 +11,8 @@ require ( github.com/nadoo/conflag v0.3.1 github.com/nadoo/ipset v0.5.0 github.com/xtaci/kcp-go/v5 v5.6.1 - golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 - golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 + golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f + golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba ) require ( @@ -26,7 +26,7 @@ require ( github.com/templexxx/xorsimd v0.4.1 // indirect github.com/tjfoc/gmsm v1.4.1 // indirect github.com/u-root/uio v0.0.0-20220204230159-dac05f7d2cb4 // indirect - golang.org/x/net v0.0.0-20220421235706-1d1ef9303861 // indirect + golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 // indirect ) // Replace dependency modules with local developing copy diff --git a/go.sum b/go.sum index 23658bd..3101cbc 100644 --- a/go.sum +++ b/go.sum @@ -111,8 +111,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-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f h1:OeJjE6G4dgCY4PIXvIRQbE8+RX+uXZyGhUy/ksMGJoc= +golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 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= @@ -136,8 +136,8 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 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-20220421235706-1d1ef9303861 h1:yssD99+7tqHWO5Gwh81phT+67hg+KttniBr6UnEXOY8= -golang.org/x/net v0.0.0-20220421235706-1d1ef9303861/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= 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= @@ -164,8 +164,8 @@ golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 h1:xHms4gcpe1YE7A3yIllJXP16CMAGuqwO2lX1mTyyRRc= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba h1:AyHWHCBVlIYI5rgEM3o+1PLd0sLPcIAoaUckGQMaWtw= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= 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= diff --git a/proxy/direct.go b/proxy/direct.go index 12a7063..4b5d674 100644 --- a/proxy/direct.go +++ b/proxy/direct.go @@ -133,3 +133,16 @@ func (d *Direct) IFaceIPs() (ips []net.IP) { } return } + +func init() { + AddUsage("direct", ` +Direct scheme: + direct:// + +Only needed when you want to load balance multiple interfaces directly: + glider -verbose -listen :8443 -forward direct://#interface=eth0 -forward direct://#interface=eth1 -strategy rr + +Or you can use the high availability mode: + glider -verbose -listen :8443 -forward direct://#interface=eth0&priority=100 -forward direct://#interface=eth1&priority=200 -strategy ha +`) +} diff --git a/proxy/reject/reject.go b/proxy/reject/reject.go index 33cf487..52af873 100644 --- a/proxy/reject/reject.go +++ b/proxy/reject/reject.go @@ -37,3 +37,10 @@ func (s *Reject) Dial(network, addr string) (net.Conn, error) { func (s *Reject) DialUDP(network, addr string) (net.PacketConn, error) { return nil, errors.New("REJECT") } + +func init() { + proxy.AddUsage("reject", ` +Reject scheme: + reject:// +`) +} diff --git a/proxy/socks4/socks4.go b/proxy/socks4/socks4.go index b6e56b1..7ba02af 100644 --- a/proxy/socks4/socks4.go +++ b/proxy/socks4/socks4.go @@ -118,13 +118,10 @@ func (s *SOCKS4) connect(conn net.Conn, target string) error { return err } - port, err := strconv.Atoi(portStr) + port, err := strconv.ParseUint(portStr, 10, 16) if err != nil { return errors.New("[socks4] failed to parse port number: " + portStr) } - if port < 1 || port > 0xffff { - return errors.New("[socks4] port number out of range: " + portStr) - } const baseBufSize = 8 + 1 // 1 is the len(userid) bufSize := baseBufSize