Skip to content

Commit

Permalink
readme
Browse files Browse the repository at this point in the history
  • Loading branch information
kazeburo committed Sep 26, 2018
1 parent 9f97b00 commit 2ebc635
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 2 deletions.
105 changes: 104 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,104 @@
# wsgate-server
# wsgate-server - a websocket to tcp proxy/bridge server

```
[client]
|
| TCP
|
[wsgate-client] (https://github.com/kazeburo/wsgate-client)
|
| websocket (wss)
|
[reverse proxy] if required
|
| websocket (ws)
|
[wsgate-server] (https://github.com/kazeburo/wsgate-server)
|
| TCP
|
[server]
```

## Example

### wsgate-server

map-server.txt

```
mysql,127.0.0.1:3306
ssh,127.0.0.1:22
```
run server

```
$ wsgate-server --listen 0.0.0.0:8086 --map map-server.txt
```

### wsgate-client

map-client.txt

```
127.0.0.1:8306,https://example.com/proxy/mysql
127.0.0.1:8022,https://example.com/proxy/ssh
```

run client server

```
$ wsgate-client --map map-client.txt
```

### client

```
# mysql
$ mysql -h 127.0.0.1 --port 8306 --user ...
# ssh
ssh -p 8022 user@127.0.0.1
```

### Using go-sql-driver/mysql

It's able to use RegisterDial to connect wsgate-server.

```
mysql.RegisterDial("websocket", func(url string) (net.Conn, error) {
wsURL := strings.Replace(url, "http", "ws", 1)
wsConf, err := websocket.NewConfig(wsURL, url)
if err != nil {
log.Fatalf("NewConfig failed: %v", err)
}
conn, err := websocket.DialConfig(wsConf)
if err != nil {
log.Fatalf("Dial to %q fail: %v", url, err)
}
conn.PayloadType = websocket.BinaryFrame
return conn, err
})
db, err := sql.Open("mysql", "yyyy:xxx@websocket(https://example.com/proxy/mysql)/test")
```

## Usage

```
Usage of ./wsgate-server:
-dial_timeout duration
Dial timeout. (default 10s)
-handshake_timeout duration
Handshake timeout. (default 10s)
-listen string
Address to listen to. (default "127.0.0.1:8086")
-map string
path and proxy host mapping file
-public-key string
public key for signing auth header
-version
show version
-write_timeout duration
Write timeout. (default 10s)
```
5 changes: 4 additions & 1 deletion wsgate-server.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,12 @@ func handleProxy(w http.ResponseWriter, r *http.Request) {
if err != nil {
hasError = true
s.Close()
log.Printf("Upgrade: %v", err)
log.Printf("Failed to Upgrade: %v", err)
return
}
log.Printf("status:Connected dest:%s upstream:%s x-forwarded-for:%s remote_addr:%s",
proxyDest, upstream, r.Header.Get("X-Forwarded-For"),
r.RemoteAddr)

defer func() {
status := "Suceeded"
Expand Down

0 comments on commit 2ebc635

Please sign in to comment.