diff --git a/CHANGELOG b/CHANGELOG index 8366654..a8f675b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,21 +1,8 @@ proxy更新日志 v3.2 -1.内网穿透功能server端-r参数增加了协议和key设置 - - -r 完整格式是:PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT - - 1.1.协议PROTOCOL:默认是tcp,可以是udp. - 比如: -r "udp://:10053@:53" -r "tcp://:10800@:1080" -r ":8080@:80" - 如果指定了--udp参数,PROTOCOL默认为udp; - 如果没有指定--udp参数,PROTOCOL默认为tcp; - - 1.2.CLIENT_KEY:默认是default. - 比如: -r "udp://:10053@[test1]:53" -r "tcp://:10800@[test2]:1080" -r ":8080@:80" - 如果指定了--key参数,CLIENT_KEY留空默认为--key指定的值; - 如果没有指定--key参数,CLIENT_KEY留空默认为default;p; - - 1.3.LOCAL_IP为空默认是绑定全部ip.CLIENT_LOCAL_HOST留空默认是127.0.0.1 +1.内网穿透功能server端-r参数增加了协议和key设置. 2.手册增加了对-r参数的详细说明. +3.修复了普通模式也检查证书文件的bug. v3.1 1.优化了内网穿透功能,bridge,client和server只需要启动一个即可。 diff --git a/config.go b/config.go index fc5608a..cfa576b 100755 --- a/config.go +++ b/config.go @@ -92,7 +92,14 @@ func initConfig() (err error) { serviceName := kingpin.MustParse(app.Parse(os.Args[1:])) - if *certTLS != "" && *keyTLS != "" { + if *httpArgs.ParentType == "tls" || + *tcpArgs.ParentType == "tls" || + *udpArgs.ParentType == "tls" || + *httpArgs.LocalType == "tls" || + *tcpArgs.IsTLS || + serviceName == "tserver" || + serviceName == "tclient" || + serviceName == "tbridge" { args.CertBytes, args.KeyBytes = tlsBytes(*certTLS, *keyTLS) } @@ -103,6 +110,7 @@ func initConfig() (err error) { tunnelBridgeArgs.Args = args tunnelClientArgs.Args = args tunnelServerArgs.Args = args + poster() //regist services and run service services.Regist("http", services.NewHTTP(), httpArgs) diff --git a/docs/faststart.md b/docs/faststart.md deleted file mode 100644 index b3b2d8f..0000000 --- a/docs/faststart.md +++ /dev/null @@ -1,40 +0,0 @@ -这里以vps centos 64位为例子 -Linux 部分 -1.Putty工具(或其他工具) -root登入 -2.下载批量命令文件install_auto.sh(64位的话直接执行这个命令即可)   -#curl -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh | bash -注意 -这里的install_auto.sh 源码可以下载修改proxy版本,保存后执行. - -3.修改/etc/proxy/proxy.toml配置文件 - - - -#/usr/bin/proxyd status -如果未运行那么执行调试命令:/usr/bin/proxy   -如果一切正常,可以使用proxyd命令管理proxy,执行 proxyd 可以查看用法. -后台启动proxy: proxyd start -4.下载证书加密文件/etc/proxy/proxy.crt和/etc/proxy/proxy.key到windows   -Windows部分   -5.https://github.com/snail007/goproxy/releases 下载对应windows版本 - - -我的是d:盘 -6.修改windows下的proxy.toml vps服务ip和上面设置的端口哦 - -然后运行proxy.exe即可.   -这时候浏览器代理服务器就是127.0.0.1:9501啦,完毕! - -要隐藏windows命令用工具下载RunHiddenConsole.exe 写个bat文件都放proxy目录下就行 -Start.bat - -@echo off -echo Starting -RunHiddenConsole D:/proxy/proxy.exe - -Stop.bat -@echo off -echo Stopping -taskkill /F /IM proxy.exe > nul -exit diff --git a/docs/images/image001.png b/docs/images/image001.png deleted file mode 100644 index 62090d6..0000000 Binary files a/docs/images/image001.png and /dev/null differ diff --git a/docs/images/image002.png b/docs/images/image002.png deleted file mode 100644 index a1ab58b..0000000 Binary files a/docs/images/image002.png and /dev/null differ diff --git a/docs/images/image003.png b/docs/images/image003.png deleted file mode 100644 index 101ea10..0000000 Binary files a/docs/images/image003.png and /dev/null differ diff --git a/docs/images/image004.png b/docs/images/image004.png deleted file mode 100644 index 0860f49..0000000 Binary files a/docs/images/image004.png and /dev/null differ diff --git a/docs/images/image005.jpg b/docs/images/image005.jpg deleted file mode 100644 index 162ec6b..0000000 Binary files a/docs/images/image005.jpg and /dev/null differ diff --git a/docs/images/image006.png b/docs/images/image006.png deleted file mode 100644 index 69e0594..0000000 Binary files a/docs/images/image006.png and /dev/null differ diff --git a/docs/images/image007.png b/docs/images/image007.png deleted file mode 100644 index 475d9c0..0000000 Binary files a/docs/images/image007.png and /dev/null differ diff --git a/docs/images/logo.jpg b/docs/images/logo.jpg deleted file mode 100644 index fc33250..0000000 Binary files a/docs/images/logo.jpg and /dev/null differ diff --git a/services/http.go b/services/http.go index a0d3e32..c73d28b 100644 --- a/services/http.go +++ b/services/http.go @@ -25,6 +25,11 @@ func NewHTTP() Service { basicAuth: utils.BasicAuth{}, } } +func (s *HTTP) CheckArgs() { + if *s.cfg.Parent != "" && *s.cfg.ParentType == "" { + log.Fatalf("parent type unkown,use -T ") + } +} func (s *HTTP) InitService() { s.InitBasicAuth() if *s.cfg.Parent != "" { @@ -38,13 +43,12 @@ func (s *HTTP) StopService() { } func (s *HTTP) Start(args interface{}) (err error) { s.cfg = args.(HTTPArgs) + s.CheckArgs() if *s.cfg.Parent != "" { log.Printf("use %s parent %s", *s.cfg.ParentType, *s.cfg.Parent) s.InitOutConnPool() } - s.InitService() - host, port, _ := net.SplitHostPort(*s.cfg.Local) p, _ := strconv.Atoi(port) sc := utils.NewServerChannel(host, p) diff --git a/services/tcp.go b/services/tcp.go index 6bea35f..708c622 100644 --- a/services/tcp.go +++ b/services/tcp.go @@ -24,6 +24,14 @@ func NewTCP() Service { cfg: TCPArgs{}, } } +func (s *TCP) CheckArgs() { + if *s.cfg.Parent == "" { + log.Fatalf("parent required for %s %s", s.cfg.Protocol(), *s.cfg.Local) + } + if *s.cfg.ParentType == "" { + log.Fatalf("parent type unkown,use -T ") + } +} func (s *TCP) InitService() { s.InitOutConnPool() } @@ -34,12 +42,8 @@ func (s *TCP) StopService() { } func (s *TCP) Start(args interface{}) (err error) { s.cfg = args.(TCPArgs) - if *s.cfg.Parent != "" { - log.Printf("use %s parent %s", *s.cfg.ParentType, *s.cfg.Parent) - } else { - log.Fatalf("parent required for %s %s", s.cfg.Protocol(), *s.cfg.Local) - } - + s.CheckArgs() + log.Printf("use %s parent %s", *s.cfg.ParentType, *s.cfg.Parent) s.InitService() host, port, _ := net.SplitHostPort(*s.cfg.Local) diff --git a/services/tunnel_bridge.go b/services/tunnel_bridge.go index 10a200d..8f8be25 100644 --- a/services/tunnel_bridge.go +++ b/services/tunnel_bridge.go @@ -32,7 +32,7 @@ func NewTunnelBridge() Service { func (s *TunnelBridge) InitService() { } -func (s *TunnelBridge) Check() { +func (s *TunnelBridge) CheckArgs() { if s.cfg.CertBytes == nil || s.cfg.KeyBytes == nil { log.Fatalf("cert and key file required") } @@ -43,7 +43,7 @@ func (s *TunnelBridge) StopService() { } func (s *TunnelBridge) Start(args interface{}) (err error) { s.cfg = args.(TunnelBridgeArgs) - s.Check() + s.CheckArgs() s.InitService() host, port, _ := net.SplitHostPort(*s.cfg.Local) p, _ := strconv.Atoi(port) diff --git a/services/tunnel_client.go b/services/tunnel_client.go index 58d5531..1f2a210 100644 --- a/services/tunnel_client.go +++ b/services/tunnel_client.go @@ -25,7 +25,7 @@ func NewTunnelClient() Service { func (s *TunnelClient) InitService() { } -func (s *TunnelClient) Check() { +func (s *TunnelClient) CheckArgs() { if *s.cfg.Parent != "" { log.Printf("use tls parent %s", *s.cfg.Parent) } else { @@ -39,7 +39,7 @@ func (s *TunnelClient) StopService() { } func (s *TunnelClient) Start(args interface{}) (err error) { s.cfg = args.(TunnelClientArgs) - s.Check() + s.CheckArgs() s.InitService() log.Printf("proxy on tunnel client mode") for { diff --git a/services/tunnel_server.go b/services/tunnel_server.go index a7c645e..5d97625 100644 --- a/services/tunnel_server.go +++ b/services/tunnel_server.go @@ -93,7 +93,7 @@ type UDPItem struct { func (s *TunnelServer) InitService() { s.UDPConnDeamon() } -func (s *TunnelServer) Check() { +func (s *TunnelServer) CheckArgs() { if *s.cfg.Remote == "" { log.Fatalf("remote required") } @@ -105,7 +105,7 @@ func (s *TunnelServer) StopService() { } func (s *TunnelServer) Start(args interface{}) (err error) { s.cfg = args.(TunnelServerArgs) - s.Check() + s.CheckArgs() s.InitService() host, port, _ := net.SplitHostPort(*s.cfg.Local) p, _ := strconv.Atoi(port) @@ -219,8 +219,7 @@ func (s *TunnelServer) UDPConnDeamon() { var outConn net.Conn // var hb utils.HeartbeatReadWriter var ID string - var cmdChn = make(chan bool, 1) - + // var cmdChn = make(chan bool, 1000) var err error for { item := <-s.udpChn @@ -229,25 +228,19 @@ func (s *TunnelServer) UDPConnDeamon() { for { outConn, ID, err = s.GetOutConn("") if err != nil { - cmdChn <- true + // cmdChn <- true outConn = nil utils.CloseConn(&outConn) log.Printf("connect to %s fail, err: %s, retrying...", *s.cfg.Parent, err) time.Sleep(time.Second * 3) continue } else { - // hb = utils.NewHeartbeatReadWriter(&outConn, 3, func(err error, hb *utils.HeartbeatReadWriter) { - // log.Printf("%s conn %s to bridge released", *s.cfg.Key, ID) - // hb.Close() - // }) - // go func(outConn net.Conn, hb utils.HeartbeatReadWriter, ID string) { go func(outConn net.Conn, ID string) { go func() { - <-cmdChn - outConn.Close() + // <-cmdChn + // outConn.Close() }() for { - //srcAddrFromConn, body, err := utils.ReadUDPPacket(&hb) srcAddrFromConn, body, err := utils.ReadUDPPacket(outConn) if err == io.EOF || err == io.ErrUnexpectedEOF { log.Printf("UDP deamon connection %s exited", ID) @@ -272,18 +265,13 @@ func (s *TunnelServer) UDPConnDeamon() { } //log.Printf("udp response to local %s success , %v", srcAddrFromConn, body) } - // }(outConn, hb, ID) }(outConn, ID) break } } } outConn.SetWriteDeadline(time.Now().Add(time.Second)) - // _, err = hb.Write(utils.UDPPacket(item.srcAddr.String(), *item.packet)) _, err = outConn.Write(utils.UDPPacket(item.srcAddr.String(), *item.packet)) - // writer := bufio.NewWriter(outConn) - // writer.Write(utils.UDPPacket(item.srcAddr.String(), *item.packet)) - // err := writer.Flush() outConn.SetWriteDeadline(time.Time{}) if err != nil { utils.CloseConn(&outConn) diff --git a/services/udp.go b/services/udp.go index 2079a8b..98e5106 100644 --- a/services/udp.go +++ b/services/udp.go @@ -27,6 +27,14 @@ func NewUDP() Service { p: utils.NewConcurrentMap(), } } +func (s *UDP) CheckArgs() { + if *s.cfg.Parent == "" { + log.Fatalf("parent required for udp %s", *s.cfg.Local) + } + if *s.cfg.ParentType == "" { + log.Fatalf("parent type unkown,use -T ") + } +} func (s *UDP) InitService() { if *s.cfg.ParentType != TYPE_UDP { s.InitOutConnPool() @@ -39,12 +47,8 @@ func (s *UDP) StopService() { } func (s *UDP) Start(args interface{}) (err error) { s.cfg = args.(UDPArgs) - if *s.cfg.Parent != "" { - log.Printf("use %s parent %s", *s.cfg.ParentType, *s.cfg.Parent) - } else { - log.Fatalf("parent required for udp %s", *s.cfg.Local) - } - + s.CheckArgs() + log.Printf("use %s parent %s", *s.cfg.ParentType, *s.cfg.Parent) s.InitService() host, port, _ := net.SplitHostPort(*s.cfg.Local)