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)