diff --git a/README.md b/README.md index 0c84e19..72015d1 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ glider -verbose -listen :8443 -forward SCHEME://HOST:PORT #### Help
- glider -help +glider -help ```bash Usage: glider [-listen URL]... [-forward URL]... [OPTION]... @@ -220,7 +220,7 @@ Help: see README.md and glider.conf.example for more details. -- -glider 0.16.0, https://github.com/nadoo/glider +glider 0.16.0, https://github.com/nadoo/glider (glider.proxy@gmail.com) ```
@@ -228,7 +228,7 @@ glider 0.16.0, https://github.com/nadoo/glider #### Schemes
- glider -scheme all +glider -scheme all ```bash KCP scheme: @@ -343,7 +343,7 @@ TLS and Websocket with a specified proxy protocol: #### Examples
- glider -example +glider -example ```bash Examples: @@ -392,13 +392,13 @@ Examples: ## Service -- dhcpd: +- dhcpd / dhcpd-failover: - service=dhcpd,INTERFACE,START_IP,END_IP,LEASE_MINUTES[,MAC=IP,MAC=IP...] - - service=dhcpd,eth1,192.168.1.100,192.168.1.199,720 - - service=dhcpd,eth2,192.168.2.100,192.168.2.199,720,fc:23:34:9e:25:01=192.168.2.101 - service=dhcpd-failover,INTERFACE,START_IP,END_IP,LEASE_MINUTES[,MAC=IP,MAC=IP...] - - note: only serve requests when there's no other dhcp server exists in lan - - detect interval: 1min + - service=dhcpd,eth1,192.168.1.100,192.168.1.199,720 + - service=dhcpd-failover,eth2,192.168.2.100,192.168.2.199,720,fc:23:34:9e:25:01=192.168.2.101 + - note: `dhcpd-failover` only serves requests when there's no other dhcp server exists in lan + - detect interval: 1min ## Linux Service diff --git a/config.go b/config.go index a68b93d..0a68ddd 100644 --- a/config.go +++ b/config.go @@ -215,7 +215,7 @@ Help: see README.md and glider.conf.example for more details. -- -glider %s, https://github.com/nadoo/glider +glider %s, https://github.com/nadoo/glider (glider.proxy@gmail.com) ` var examples = ` diff --git a/dns/message.go b/dns/message.go index 88b1485..aede682 100644 --- a/dns/message.go +++ b/dns/message.go @@ -94,8 +94,7 @@ func (m *Message) AddAnswer(rr *RR) error { // Marshal marshals message struct to []byte. func (m *Message) Marshal() ([]byte, error) { buf := &bytes.Buffer{} - _, err := m.MarshalTo(buf) - if err != nil { + if _, err := m.MarshalTo(buf); err != nil { return nil, err } return buf.Bytes(), nil @@ -137,8 +136,7 @@ func UnmarshalMessage(b []byte) (*Message, error) { } m := &Message{unMarshaled: b} - err := UnmarshalHeader(b[:HeaderLen], &m.Header) - if err != nil { + if err := UnmarshalHeader(b[:HeaderLen], &m.Header); err != nil { return nil, err } @@ -285,14 +283,12 @@ func (q *Question) MarshalTo(w io.Writer) (n int, err error) { return } - err = binary.Write(w, binary.BigEndian, q.QTYPE) - if err != nil { + if err = binary.Write(w, binary.BigEndian, q.QTYPE); err != nil { return } n += 2 - err = binary.Write(w, binary.BigEndian, q.QCLASS) - if err != nil { + if err = binary.Write(w, binary.BigEndian, q.QCLASS); err != nil { return } n += 2 @@ -375,20 +371,17 @@ func (rr *RR) MarshalTo(w io.Writer) (n int, err error) { return } - err = binary.Write(w, binary.BigEndian, rr.TYPE) - if err != nil { + if err = binary.Write(w, binary.BigEndian, rr.TYPE); err != nil { return } n += 2 - err = binary.Write(w, binary.BigEndian, rr.CLASS) - if err != nil { + if err = binary.Write(w, binary.BigEndian, rr.CLASS); err != nil { return } n += 2 - err = binary.Write(w, binary.BigEndian, rr.TTL) - if err != nil { + if err = binary.Write(w, binary.BigEndian, rr.TTL); err != nil { return } n += 4 @@ -399,8 +392,7 @@ func (rr *RR) MarshalTo(w io.Writer) (n int, err error) { } n += 2 - _, err = w.Write(rr.RDATA) - if err != nil { + if _, err = w.Write(rr.RDATA); err != nil { return } n += len(rr.RDATA) @@ -493,8 +485,7 @@ func (m *Message) UnmarshalDomainTo(sb *strings.Builder, b []byte) (int, error) } offset := binary.BigEndian.Uint16(b[idx : idx+2]) - err := m.UnmarshalDomainPointTo(sb, int(offset&0x3FFF)) - if err != nil { + if err := m.UnmarshalDomainPointTo(sb, int(offset&0x3FFF)); err != nil { return 0, err } diff --git a/go.mod b/go.mod index 02b59fc..de522d9 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/nadoo/ipset v0.4.1-0.20220218075046-ca3cdce74266 github.com/xtaci/kcp-go/v5 v5.6.1 golang.org/x/crypto v0.0.0-20220214200702-86341886e292 - golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7 + golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 ) require ( diff --git a/go.sum b/go.sum index 9a78802..fd908b5 100644 --- a/go.sum +++ b/go.sum @@ -49,6 +49,7 @@ github.com/jsimonetti/rtnetlink v0.0.0-20201009170750-9c6f07d100c1/go.mod h1:hqo github.com/jsimonetti/rtnetlink v0.0.0-20201110080708-d2c240429e6c/go.mod h1:huN4d1phzjhlOsNIjFsw2SVRbwIHj3fJDMEU2SDPTmg= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/klauspost/cpuid v1.2.4/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +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.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.11 h1:i2lw1Pm7Yi/4O6XCSyJWqEHI2MDw2FzUK6o/D21xn2A= @@ -164,8 +165,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-20220224120231-95c6836cb0e7 h1:BXxu8t6QN0G1uff4bzZzSkpsax8+ALqTGUtz08QrV00= -golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/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/conn.go b/proxy/conn.go index eb18953..841d580 100644 --- a/proxy/conn.go +++ b/proxy/conn.go @@ -178,9 +178,9 @@ func CopyBuffer(dst io.Writer, src io.Reader) (written int64, err error) { // CopyUDP copys from src to dst at target with read timeout. // if step sets to non-zero value, // the read timeout will be increased from 0 to timeout by step in every read operation. -func CopyUDP(dst net.PacketConn, target net.Addr, src net.PacketConn, timeout time.Duration, step time.Duration) error { - b := pool.GetBuffer(UDPBufSize) - defer pool.PutBuffer(b) +func CopyUDP(dst net.PacketConn, writeTo net.Addr, src net.PacketConn, timeout time.Duration, step time.Duration) error { + buf := pool.GetBuffer(UDPBufSize) + defer pool.PutBuffer(buf) var t time.Duration for { @@ -189,12 +189,16 @@ func CopyUDP(dst net.PacketConn, target net.Addr, src net.PacketConn, timeout ti } src.SetReadDeadline(time.Now().Add(t)) - n, _, err := src.ReadFrom(b) + n, addr, err := src.ReadFrom(buf) if err != nil { return err } - _, err = dst.WriteTo(b[:n], target) + if writeTo != nil { + addr = writeTo + } + + _, err = dst.WriteTo(buf[:n], addr) if err != nil { return err } diff --git a/proxy/smux/client.go b/proxy/smux/client.go index 3174671..f3aaa93 100644 --- a/proxy/smux/client.go +++ b/proxy/smux/client.go @@ -1,7 +1,6 @@ package smux import ( - "errors" "net" "net/url" "sync" @@ -66,7 +65,7 @@ func (s *SmuxClient) Dial(network, addr string) (net.Conn, error) { // DialUDP connects to the given address via the proxy. func (s *SmuxClient) DialUDP(network, addr string) (net.PacketConn, net.Addr, error) { - return nil, nil, errors.New("smux client does not support udp now") + return nil, nil, proxy.ErrNotSupported } func (s *SmuxClient) initConn() error {