diff --git a/.goreleaser.yml b/.goreleaser.yml index 104cedd..5cb386d 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -73,4 +73,6 @@ checksum: # https://goreleaser.com/customization/release/ release: - draft: true \ No newline at end of file + prerelease: true + draft: true + \ No newline at end of file diff --git a/README.md b/README.md index 1d4c541..feba922 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,6 @@ we can set up local listeners as proxy servers, and forward requests to internet ## Protocols
click to see details - |Protocol | Listen/TCP | Listen/UDP | Forward/TCP | Forward/UDP | Description |:-: |:-:|:-:|:-:|:-:|:- |Mixed |√|√| | |http+socks5 server @@ -275,8 +274,23 @@ Config file format(see `./glider.conf.example` as an example): KEY=VALUE KEY=VALUE # KEY equals to command line flag name: listen forward strategy... +``` + +
+ +run: +```bash +glider -config CONFIGPATH +``` +```bash +glider -verbose -listen :8443 -forward SCHEME://HOST:PORT +``` + +### Examples + +
+click to see details -Examples: ./glider -config glider.conf -run glider with specified config file. @@ -313,21 +327,9 @@ Examples: Services: dhcpd: service=dhcpd,INTERFACE,START_IP,END_IP e.g.,service=dhcpd,eth1,192.168.50.100,192.168.50.199 -```
-run: -```bash -glider -verbose -listen :8443 -forward SCHEME://HOST:PORT -``` -```bash -glider -config CONFIGPATH -``` -```bash -glider -config CONFIGPATH -listen :8080 -verbose -``` - ## Config - [ConfigFile](config) diff --git a/go.mod b/go.mod index 19a7e2c..63f999c 100644 --- a/go.mod +++ b/go.mod @@ -14,11 +14,11 @@ require ( github.com/nadoo/ipset v0.3.0 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect github.com/xtaci/kcp-go/v5 v5.6.1 - golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392 + golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c golang.org/x/mod v0.4.0 // indirect golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb // indirect golang.org/x/sys v0.0.0-20201202213521-69691e467435 // indirect - golang.org/x/tools v0.0.0-20201202200335-bef1c476418a // indirect + golang.org/x/tools v0.0.0-20201203230154-39497347062d // indirect gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect ) diff --git a/go.sum b/go.sum index cf38a75..c7cdf00 100644 --- a/go.sum +++ b/go.sum @@ -87,8 +87,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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-20201124201722-c8d3bf9c5392 h1:xYJJ3S178yv++9zXV/hnr29plCAGO9vAFG9dorqaFQc= -golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c h1:9HhBz5L/UjnK9XLtiZhYAdue5BVKep3PMmS2LuPDt8k= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -145,8 +145,8 @@ golang.org/x/tools v0.0.0-20200425043458-8463f397d07c/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200808161706-5bf02b21f123/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20201105001634-bc3cf281b174 h1:0rx0F4EjJNbxTuzWe0KjKcIzs+3VEb/Mrs/d1ciNz1c= golang.org/x/tools v0.0.0-20201105001634-bc3cf281b174/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201202200335-bef1c476418a h1:TYqOq/v+Ri5aADpldxXOj6PmvcPMOJbLjdALzZDQT2M= -golang.org/x/tools v0.0.0-20201202200335-bef1c476418a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201203230154-39497347062d h1:ChJAHTAuCcMx4RHS9P/KnYnJ1UEgJDZNRtvF0TJ0wbg= +golang.org/x/tools v0.0.0-20201203230154-39497347062d/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/proxy/udp/udp.go b/proxy/udp/udp.go index 2f0cee2..6630930 100644 --- a/proxy/udp/udp.go +++ b/proxy/udp/udp.go @@ -76,13 +76,13 @@ func (s *UDP) ListenAndServe() { if !ok && v == nil { // we know we are creating an udp tunnel, so the dial addr is meaningless, // we use lraddr here to help the unix client to identify the source socket. - pc, _, raddr, err := s.proxy.DialUDP("udp", lraddr.String()) + pc, dialer, writeTo, err := s.proxy.DialUDP("udp", lraddr.String()) if err != nil { log.F("[udp] remote dial error: %v", err) continue } - session = newNatEntry(pc, raddr) + session = newNatEntry(pc, writeTo) nm.Store(lraddr.String(), session) go func(c, pc net.PacketConn, lraddr net.Addr) { @@ -91,15 +91,15 @@ func (s *UDP) ListenAndServe() { nm.Delete(lraddr.String()) }(c, pc, lraddr) - log.F("[udp] %s <-> %s", lraddr, raddr) + log.F("[udp] %s <-> %s", lraddr, dialer.Addr()) } else { session = v.(*natEntry) } - _, err = session.WriteTo(buf[:n], session.raddr) + _, err = session.WriteTo(buf[:n], session.writeTo) if err != nil { - log.F("[udp] remote write error: %v, raddr: %s", err, session.raddr) + log.F("[udp] writeTo %s error: %v", session.writeTo, err) continue } @@ -108,11 +108,11 @@ func (s *UDP) ListenAndServe() { type natEntry struct { net.PacketConn - raddr net.Addr + writeTo net.Addr } -func newNatEntry(pc net.PacketConn, raddr net.Addr) *natEntry { - return &natEntry{PacketConn: pc, raddr: raddr} +func newNatEntry(pc net.PacketConn, writeTo net.Addr) *natEntry { + return &natEntry{PacketConn: pc, writeTo: writeTo} } // Serve serves a connection. diff --git a/proxy/unix/server.go b/proxy/unix/server.go index 39601e8..ea02ba7 100644 --- a/proxy/unix/server.go +++ b/proxy/unix/server.go @@ -116,13 +116,13 @@ func (s *Unix) ListenAndServeUDP() { var session *natEntry v, ok := nm.Load(lraddr.String()) if !ok && v == nil { - pc, _, raddr, err := s.proxy.DialUDP("udp", "") + pc, dialer, writeTo, err := s.proxy.DialUDP("udp", "") if err != nil { log.F("[unix] remote dial error: %v", err) continue } - session = newNatEntry(pc, raddr) + session = newNatEntry(pc, writeTo) nm.Store(lraddr.String(), session) go func(c, pc net.PacketConn, lraddr net.Addr) { @@ -131,15 +131,15 @@ func (s *Unix) ListenAndServeUDP() { nm.Delete(lraddr.String()) }(c, pc, lraddr) - log.F("[unix] %s <-> %s", lraddr, raddr) + log.F("[unix] %s <-> %s", lraddr, dialer.Addr()) } else { session = v.(*natEntry) } - _, err = session.WriteTo(buf[:n], session.raddr) + _, err = session.WriteTo(buf[:n], session.writeTo) if err != nil { - log.F("[unix] remote write error: %v, raddr: %s", err, session.raddr) + log.F("[unix] writeTo %s error: %v", session.writeTo, err) continue } @@ -148,9 +148,9 @@ func (s *Unix) ListenAndServeUDP() { type natEntry struct { net.PacketConn - raddr net.Addr + writeTo net.Addr } -func newNatEntry(pc net.PacketConn, raddr net.Addr) *natEntry { - return &natEntry{PacketConn: pc, raddr: raddr} +func newNatEntry(pc net.PacketConn, writeTo net.Addr) *natEntry { + return &natEntry{PacketConn: pc, writeTo: writeTo} }