目录

使用websocket代理所有tcp流量

  有时候我们的服务只能暴露80/443接口提供http服务,但是我们可能又需要访问服务器中的其他服务,比如mysql、consul这些,那么我们怎么样才能做仅开放http/https的端口下还能访问服务器上其他端口的服务呢?

  我们可以使用websocket来代理tcp端口,这样就可以访问一切基于tcp协议的流量了,于是我就写了一个基于go的流量代理器。

github

https://github.com/MikeLINGxZ/http2tcp

下载地址

https://github.com/MikeLINGxZ/http2tcp/releases

使用方法

1.1 在已有go项目中使用

获取依赖

go get github.com/MikeLINGxZ/http2tcp

在http路由中加入handler方法

package main

import (
	"github.com/MikeLINGxZ/http2tcp"
	"net/http"
)

func main() {
    http.HandleFunc("/path",http2tcp.ProxyForHttpHandler)
	http.ListenAndServe(":8080", nil)
}

客户端使用参考 1.3

1.2 独立使用

$~/->ls
server.yml http2tcp_server

编辑服务端配置vim server.yml

Host: 0.0.0.0	// 监听的地址
Port: 7889		// 监听的端口
Path: /proxy	// http路径
Auth: 123456	// 密码

运行服务端

./http2tcp_server

客户端使用参考 1.3

1.3 客户端

$~/->ls
client.yml http2tcp_client

编辑客户端配置文件vim client.yml

WebsocketServer: ws://14.21.123.12:7889/proxy 	// ws服务地址
Auth: 123456								  	// 密码
Targets:										// 代理配置
  - LocalHost: 127.0.0.1							// 本地监听地址
    LocalPort: 13306								// 本地监听端口
    RemoteHost: 17.21.23.115						// 远程地址(服务器可访问的地址)
    RemotePort: 3306								// 远程端口

运行客户端

./http2tcp_client

效果

通过websocket代理访问mysql

https://website-1314772799.cos.ap-guangzhou.myqcloud.com/images/h2t_mysql.png

通过websocket代理访问consul

https://website-1314772799.cos.ap-guangzhou.myqcloud.com/images/h2t_consul.png