diff --git a/README.md b/README.md index 9c2e784..34d3727 100644 --- a/README.md +++ b/README.md @@ -138,7 +138,7 @@ glider -h -rules-dir string rule file folder -service value - enable services + run specified services, format: SERVICE_NAME[,SERVICE_CONFIG] -strategy string forward strategy, default: rr (default "rr") -verbose @@ -373,9 +373,9 @@ glider -config CONFIGPATH -listen :8080 -verbose #### Scheme: -service=SERVICE_NAME[,SERVICE_CONFIG] +```service=SERVICE_NAME[,SERVICE_CONFIG]``` -- dhcpd(from v0.11.0): +- dhcpd: - service=dhcpd,INTERFACE,START_IP,END_IP - e.g., service=dhcpd,en0,192.168.254.100,192.168.254.199 diff --git a/config.go b/config.go index 4b1440c..65ddd9a 100644 --- a/config.go +++ b/config.go @@ -63,7 +63,7 @@ func parseConfig() *Config { flag.IntVar(&conf.DNSConfig.MinTTL, "dnsminttl", 0, "minimum TTL value for entries in the CACHE(seconds)") flag.StringSliceUniqVar(&conf.DNSConfig.Records, "dnsrecord", nil, "custom dns record, format: domain/ip") - flag.StringSliceUniqVar(&conf.Services, "service", nil, "enable services") + flag.StringSliceUniqVar(&conf.Services, "service", nil, "run specified services, format: SERVICE_NAME[,SERVICE_CONFIG]") flag.Usage = usage err := flag.Parse() diff --git a/common/conn/conn.go b/proxy/conn.go similarity index 99% rename from common/conn/conn.go rename to proxy/conn.go index 3ce6d4c..4e64a40 100644 --- a/common/conn/conn.go +++ b/proxy/conn.go @@ -1,4 +1,4 @@ -package conn +package proxy import ( "bufio" diff --git a/proxy/http/client.go b/proxy/http/client.go index 3a653c7..da44e7e 100644 --- a/proxy/http/client.go +++ b/proxy/http/client.go @@ -6,7 +6,6 @@ import ( "net" "net/textproto" - "github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/log" "github.com/nadoo/glider/common/pool" "github.com/nadoo/glider/proxy" @@ -51,7 +50,7 @@ func (s *HTTP) Dial(network, addr string) (net.Conn, error) { return nil, err } - c := conn.NewConn(rc) + c := proxy.NewConn(rc) tpr := textproto.NewReader(c.Reader()) line, err := tpr.ReadLine() if err != nil { diff --git a/proxy/http/server.go b/proxy/http/server.go index e69a7a4..1c6abd6 100644 --- a/proxy/http/server.go +++ b/proxy/http/server.go @@ -9,7 +9,6 @@ import ( "strings" "time" - "github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/log" "github.com/nadoo/glider/common/pool" "github.com/nadoo/glider/proxy" @@ -46,15 +45,15 @@ func (s *HTTP) ListenAndServe() { func (s *HTTP) Serve(cc net.Conn) { defer cc.Close() - var c *conn.Conn + var c *proxy.Conn switch cc := cc.(type) { - case *conn.Conn: + case *proxy.Conn: c = cc case *net.TCPConn: cc.SetKeepAlive(true) - c = conn.NewConn(cc) + c = proxy.NewConn(cc) default: - c = conn.NewConn(cc) + c = proxy.NewConn(cc) } req, err := parseRequest(c.Reader()) @@ -72,7 +71,7 @@ func (s *HTTP) Serve(cc net.Conn) { s.servRequest(req, c) } -func (s *HTTP) servRequest(req *request, c *conn.Conn) { +func (s *HTTP) servRequest(req *request, c *proxy.Conn) { // Auth if s.user != "" && s.password != "" { if user, pass, ok := extractUserPass(req.auth); !ok || user != s.user || pass != s.password { @@ -103,7 +102,7 @@ func (s *HTTP) servHTTPS(r *request, c net.Conn) { log.F("[http] %s <-> %s [c] via %s", c.RemoteAddr(), r.uri, dialer.Addr()) - if err = conn.Relay(c, rc); err != nil { + if err = proxy.Relay(c, rc); err != nil { log.F("[http] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), r.uri, dialer.Addr(), err) // record remote conn failure only if !strings.Contains(err.Error(), s.addr) { @@ -112,7 +111,7 @@ func (s *HTTP) servHTTPS(r *request, c net.Conn) { } } -func (s *HTTP) servHTTP(req *request, c *conn.Conn) { +func (s *HTTP) servHTTP(req *request, c *proxy.Conn) { rc, dialer, err := s.proxy.Dial("tcp", req.target) if err != nil { fmt.Fprintf(c, "%s 502 ERROR\r\n\r\n", req.proto) @@ -134,7 +133,7 @@ func (s *HTTP) servHTTP(req *request, c *conn.Conn) { // copy the left request bytes to remote server. eg. length specificed or chunked body. go func() { if _, err := c.Reader().Peek(1); err == nil { - conn.Copy(rc, c) + proxy.Copy(rc, c) rc.SetDeadline(time.Now()) c.SetDeadline(time.Now()) } @@ -168,5 +167,5 @@ func (s *HTTP) servHTTP(req *request, c *conn.Conn) { log.F("[http] %s <-> %s via %s", c.RemoteAddr(), req.target, dialer.Addr()) c.Write(buf.Bytes()) - conn.Copy(c, r) + proxy.Copy(c, r) } diff --git a/proxy/mixed/mixed.go b/proxy/mixed/mixed.go index 54f7a04..e53908c 100644 --- a/proxy/mixed/mixed.go +++ b/proxy/mixed/mixed.go @@ -5,7 +5,6 @@ import ( "net" "net/url" - "github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/log" "github.com/nadoo/glider/proxy" "github.com/nadoo/glider/proxy/http" @@ -87,7 +86,7 @@ func (m *Mixed) Serve(c net.Conn) { c.SetKeepAlive(true) } - cc := conn.NewConn(c) + cc := proxy.NewConn(c) head, err := cc.Peek(1) if err != nil { // log.F("[mixed] socks5 peek error: %s", err) diff --git a/proxy/redir/redir_linux.go b/proxy/redir/redir_linux.go index c91390c..92ccc21 100644 --- a/proxy/redir/redir_linux.go +++ b/proxy/redir/redir_linux.go @@ -11,7 +11,6 @@ import ( "syscall" "unsafe" - "github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/log" "github.com/nadoo/glider/common/socks" "github.com/nadoo/glider/proxy" @@ -114,7 +113,7 @@ func (s *RedirProxy) Serve(c net.Conn) { log.F("[redir] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr()) - if err = conn.Relay(c, rc); err != nil { + if err = proxy.Relay(c, rc); err != nil { log.F("[redir] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err) // record remote conn failure only if !strings.Contains(err.Error(), s.addr) { diff --git a/proxy/socks5/socks5.go b/proxy/socks5/socks5.go index 8442f27..2f14f5a 100644 --- a/proxy/socks5/socks5.go +++ b/proxy/socks5/socks5.go @@ -19,7 +19,6 @@ import ( "sync" "time" - "github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/log" "github.com/nadoo/glider/common/pool" "github.com/nadoo/glider/common/socks" @@ -142,7 +141,7 @@ func (s *Socks5) Serve(c net.Conn) { log.F("[socks5] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr()) - if err = conn.Relay(c, rc); err != nil { + if err = proxy.Relay(c, rc); err != nil { log.F("[socks5] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err) // record remote conn failure only if !strings.Contains(err.Error(), s.addr) { @@ -163,7 +162,7 @@ func (s *Socks5) ListenAndServeUDP() { log.F("[socks5-udp] listening UDP on %s", s.addr) var nm sync.Map - buf := make([]byte, conn.UDPBufSize) + buf := make([]byte, proxy.UDPBufSize) for { c := NewPktConn(lc, nil, nil, true, nil) @@ -192,7 +191,7 @@ func (s *Socks5) ListenAndServeUDP() { nm.Store(raddr.String(), pc) go func() { - conn.RelayUDP(c, raddr, pc, 2*time.Minute) + proxy.RelayUDP(c, raddr, pc, 2*time.Minute) pc.Close() nm.Delete(raddr.String()) }() diff --git a/proxy/ss/ss.go b/proxy/ss/ss.go index 8baded1..de45b1e 100644 --- a/proxy/ss/ss.go +++ b/proxy/ss/ss.go @@ -10,7 +10,6 @@ import ( "github.com/nadoo/go-shadowsocks2/core" - "github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/log" "github.com/nadoo/glider/common/pool" "github.com/nadoo/glider/common/socks" @@ -122,7 +121,7 @@ func (s *SS) Serve(c net.Conn) { } defer rc.Close() - buf := pool.GetBuffer(conn.UDPBufSize) + buf := pool.GetBuffer(proxy.UDPBufSize) defer pool.PutBuffer(buf) n, err := c.Read(buf) @@ -160,7 +159,7 @@ func (s *SS) Serve(c net.Conn) { log.F("[ss] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr()) - if err = conn.Relay(c, rc); err != nil { + if err = proxy.Relay(c, rc); err != nil { log.F("[ss] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err) // record remote conn failure only if !strings.Contains(err.Error(), s.addr) { @@ -183,7 +182,7 @@ func (s *SS) ListenAndServeUDP() { log.F("[ss-udp] listening UDP on %s", s.addr) var nm sync.Map - buf := make([]byte, conn.UDPBufSize) + buf := make([]byte, proxy.UDPBufSize) for { c := NewPktConn(lc, nil, nil, true) @@ -207,7 +206,7 @@ func (s *SS) ListenAndServeUDP() { nm.Store(raddr.String(), pc) go func() { - conn.RelayUDP(c, raddr, pc, 2*time.Minute) + proxy.RelayUDP(c, raddr, pc, 2*time.Minute) pc.Close() nm.Delete(raddr.String()) }() diff --git a/proxy/tcptun/tcptun.go b/proxy/tcptun/tcptun.go index e76e85b..2db3927 100644 --- a/proxy/tcptun/tcptun.go +++ b/proxy/tcptun/tcptun.go @@ -6,7 +6,6 @@ import ( "net/url" "strings" - "github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/log" "github.com/nadoo/glider/proxy" ) @@ -90,7 +89,7 @@ func (s *TCPTun) Serve(c net.Conn) { log.F("[tcptun] %s <-> %s via %s", c.RemoteAddr(), s.raddr, dialer.Addr()) - if err = conn.Relay(c, rc); err != nil { + if err = proxy.Relay(c, rc); err != nil { log.F("[tcptun] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), s.raddr, dialer.Addr(), err) // record remote conn failure only if !strings.Contains(err.Error(), s.addr) { diff --git a/proxy/trojan/packet.go b/proxy/trojan/packet.go index 8ad4050..09d284f 100644 --- a/proxy/trojan/packet.go +++ b/proxy/trojan/packet.go @@ -6,9 +6,9 @@ import ( "io" "net" - "github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/pool" "github.com/nadoo/glider/common/socks" + "github.com/nadoo/glider/proxy" ) // PktConn . @@ -41,7 +41,7 @@ func (pc *PktConn) ReadFrom(b []byte) (int, net.Addr, error) { } length := int(binary.BigEndian.Uint16(b[:2])) - if length > conn.UDPBufSize { + if length > proxy.UDPBufSize { return 0, nil, errors.New("packet invalid") } diff --git a/proxy/udptun/udptun.go b/proxy/udptun/udptun.go index 9aef394..9b1c778 100644 --- a/proxy/udptun/udptun.go +++ b/proxy/udptun/udptun.go @@ -8,7 +8,6 @@ import ( "sync" "time" - "github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/log" "github.com/nadoo/glider/proxy" ) @@ -66,7 +65,7 @@ func (s *UDPTun) ListenAndServe() { log.F("[udptun] listening UDP on %s", s.addr) var nm sync.Map - buf := make([]byte, conn.UDPBufSize) + buf := make([]byte, proxy.UDPBufSize) for { n, raddr, err := c.ReadFrom(buf) @@ -88,7 +87,7 @@ func (s *UDPTun) ListenAndServe() { nm.Store(raddr.String(), pc) go func(c, pc net.PacketConn, raddr net.Addr) { - conn.RelayUDP(c, raddr, pc, 2*time.Minute) + proxy.RelayUDP(c, raddr, pc, 2*time.Minute) pc.Close() nm.Delete(raddr.String()) }(c, pc, raddr) diff --git a/proxy/uottun/uottun.go b/proxy/uottun/uottun.go index 97cdb54..4f3699c 100644 --- a/proxy/uottun/uottun.go +++ b/proxy/uottun/uottun.go @@ -8,7 +8,6 @@ import ( "strings" "time" - "github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/log" "github.com/nadoo/glider/proxy" ) @@ -64,7 +63,7 @@ func (s *UoTTun) ListenAndServe() { log.F("[uottun] listening UDP on %s", s.addr) - buf := make([]byte, conn.UDPBufSize) + buf := make([]byte, proxy.UDPBufSize) for { n, clientAddr, err := c.ReadFrom(buf) @@ -82,7 +81,7 @@ func (s *UoTTun) ListenAndServe() { go func() { // no remote forwarder, just a local udp forwarder if urc, ok := rc.(*net.UDPConn); ok { - conn.RelayUDP(c, clientAddr, urc, 2*time.Minute) + proxy.RelayUDP(c, clientAddr, urc, 2*time.Minute) urc.Close() return } diff --git a/proxy/vless/client.go b/proxy/vless/client.go index 7e5760b..4fe1fc4 100644 --- a/proxy/vless/client.go +++ b/proxy/vless/client.go @@ -9,8 +9,8 @@ import ( "net" "strings" - "github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/pool" + "github.com/nadoo/glider/proxy" ) const Version byte = 0 @@ -69,7 +69,7 @@ func (c *Conn) Read(b []byte) (n int, err error) { } if addLen := int64(buf[1]); addLen > 0 { - conn.CopyN(ioutil.Discard, c.Conn, addLen) + proxy.CopyN(ioutil.Discard, c.Conn, addLen) } c.rcved = true }