mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 17:35:40 +08:00
chore: document update
This commit is contained in:
parent
10b7f2d5e6
commit
e6631aaf84
@ -73,4 +73,6 @@ checksum:
|
|||||||
|
|
||||||
# https://goreleaser.com/customization/release/
|
# https://goreleaser.com/customization/release/
|
||||||
release:
|
release:
|
||||||
|
prerelease: true
|
||||||
draft: true
|
draft: true
|
||||||
|
|
30
README.md
30
README.md
@ -42,7 +42,6 @@ we can set up local listeners as proxy servers, and forward requests to internet
|
|||||||
## Protocols
|
## Protocols
|
||||||
<details>
|
<details>
|
||||||
<summary>click to see details</summary>
|
<summary>click to see details</summary>
|
||||||
|
|
||||||
|Protocol | Listen/TCP | Listen/UDP | Forward/TCP | Forward/UDP | Description
|
|Protocol | Listen/TCP | Listen/UDP | Forward/TCP | Forward/UDP | Description
|
||||||
|:-: |:-:|:-:|:-:|:-:|:-
|
|:-: |:-:|:-:|:-:|:-:|:-
|
||||||
|Mixed |√|√| | |http+socks5 server
|
|Mixed |√|√| | |http+socks5 server
|
||||||
@ -275,8 +274,23 @@ Config file format(see `./glider.conf.example` as an example):
|
|||||||
KEY=VALUE
|
KEY=VALUE
|
||||||
KEY=VALUE
|
KEY=VALUE
|
||||||
# KEY equals to command line flag name: listen forward strategy...
|
# KEY equals to command line flag name: listen forward strategy...
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
run:
|
||||||
|
```bash
|
||||||
|
glider -config CONFIGPATH
|
||||||
|
```
|
||||||
|
```bash
|
||||||
|
glider -verbose -listen :8443 -forward SCHEME://HOST:PORT
|
||||||
|
```
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>click to see details</summary>
|
||||||
|
|
||||||
Examples:
|
|
||||||
./glider -config glider.conf
|
./glider -config glider.conf
|
||||||
-run glider with specified config file.
|
-run glider with specified config file.
|
||||||
|
|
||||||
@ -313,21 +327,9 @@ Examples:
|
|||||||
Services:
|
Services:
|
||||||
dhcpd: service=dhcpd,INTERFACE,START_IP,END_IP
|
dhcpd: service=dhcpd,INTERFACE,START_IP,END_IP
|
||||||
e.g.,service=dhcpd,eth1,192.168.50.100,192.168.50.199
|
e.g.,service=dhcpd,eth1,192.168.50.100,192.168.50.199
|
||||||
```
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
run:
|
|
||||||
```bash
|
|
||||||
glider -verbose -listen :8443 -forward SCHEME://HOST:PORT
|
|
||||||
```
|
|
||||||
```bash
|
|
||||||
glider -config CONFIGPATH
|
|
||||||
```
|
|
||||||
```bash
|
|
||||||
glider -config CONFIGPATH -listen :8080 -verbose
|
|
||||||
```
|
|
||||||
|
|
||||||
## Config
|
## Config
|
||||||
|
|
||||||
- [ConfigFile](config)
|
- [ConfigFile](config)
|
||||||
|
4
go.mod
4
go.mod
@ -14,11 +14,11 @@ require (
|
|||||||
github.com/nadoo/ipset v0.3.0
|
github.com/nadoo/ipset v0.3.0
|
||||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
|
||||||
github.com/xtaci/kcp-go/v5 v5.6.1
|
github.com/xtaci/kcp-go/v5 v5.6.1
|
||||||
golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392
|
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c
|
||||||
golang.org/x/mod v0.4.0 // indirect
|
golang.org/x/mod v0.4.0 // indirect
|
||||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb // indirect
|
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb // indirect
|
||||||
golang.org/x/sys v0.0.0-20201202213521-69691e467435 // indirect
|
golang.org/x/sys v0.0.0-20201202213521-69691e467435 // indirect
|
||||||
golang.org/x/tools v0.0.0-20201202200335-bef1c476418a // indirect
|
golang.org/x/tools v0.0.0-20201203230154-39497347062d // indirect
|
||||||
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect
|
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
|
8
go.sum
8
go.sum
@ -87,8 +87,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
|
|||||||
golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392 h1:xYJJ3S178yv++9zXV/hnr29plCAGO9vAFG9dorqaFQc=
|
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c h1:9HhBz5L/UjnK9XLtiZhYAdue5BVKep3PMmS2LuPDt8k=
|
||||||
golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
|
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
@ -145,8 +145,8 @@ golang.org/x/tools v0.0.0-20200425043458-8463f397d07c/go.mod h1:EkVYQZoAsY45+roY
|
|||||||
golang.org/x/tools v0.0.0-20200808161706-5bf02b21f123/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
golang.org/x/tools v0.0.0-20200808161706-5bf02b21f123/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||||
golang.org/x/tools v0.0.0-20201105001634-bc3cf281b174 h1:0rx0F4EjJNbxTuzWe0KjKcIzs+3VEb/Mrs/d1ciNz1c=
|
golang.org/x/tools v0.0.0-20201105001634-bc3cf281b174 h1:0rx0F4EjJNbxTuzWe0KjKcIzs+3VEb/Mrs/d1ciNz1c=
|
||||||
golang.org/x/tools v0.0.0-20201105001634-bc3cf281b174/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201105001634-bc3cf281b174/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20201202200335-bef1c476418a h1:TYqOq/v+Ri5aADpldxXOj6PmvcPMOJbLjdALzZDQT2M=
|
golang.org/x/tools v0.0.0-20201203230154-39497347062d h1:ChJAHTAuCcMx4RHS9P/KnYnJ1UEgJDZNRtvF0TJ0wbg=
|
||||||
golang.org/x/tools v0.0.0-20201202200335-bef1c476418a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201203230154-39497347062d/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
@ -76,13 +76,13 @@ func (s *UDP) ListenAndServe() {
|
|||||||
if !ok && v == nil {
|
if !ok && v == nil {
|
||||||
// we know we are creating an udp tunnel, so the dial addr is meaningless,
|
// we know we are creating an udp tunnel, so the dial addr is meaningless,
|
||||||
// we use lraddr here to help the unix client to identify the source socket.
|
// we use lraddr here to help the unix client to identify the source socket.
|
||||||
pc, _, raddr, err := s.proxy.DialUDP("udp", lraddr.String())
|
pc, dialer, writeTo, err := s.proxy.DialUDP("udp", lraddr.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.F("[udp] remote dial error: %v", err)
|
log.F("[udp] remote dial error: %v", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
session = newNatEntry(pc, raddr)
|
session = newNatEntry(pc, writeTo)
|
||||||
nm.Store(lraddr.String(), session)
|
nm.Store(lraddr.String(), session)
|
||||||
|
|
||||||
go func(c, pc net.PacketConn, lraddr net.Addr) {
|
go func(c, pc net.PacketConn, lraddr net.Addr) {
|
||||||
@ -91,15 +91,15 @@ func (s *UDP) ListenAndServe() {
|
|||||||
nm.Delete(lraddr.String())
|
nm.Delete(lraddr.String())
|
||||||
}(c, pc, lraddr)
|
}(c, pc, lraddr)
|
||||||
|
|
||||||
log.F("[udp] %s <-> %s", lraddr, raddr)
|
log.F("[udp] %s <-> %s", lraddr, dialer.Addr())
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
session = v.(*natEntry)
|
session = v.(*natEntry)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = session.WriteTo(buf[:n], session.raddr)
|
_, err = session.WriteTo(buf[:n], session.writeTo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.F("[udp] remote write error: %v, raddr: %s", err, session.raddr)
|
log.F("[udp] writeTo %s error: %v", session.writeTo, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,11 +108,11 @@ func (s *UDP) ListenAndServe() {
|
|||||||
|
|
||||||
type natEntry struct {
|
type natEntry struct {
|
||||||
net.PacketConn
|
net.PacketConn
|
||||||
raddr net.Addr
|
writeTo net.Addr
|
||||||
}
|
}
|
||||||
|
|
||||||
func newNatEntry(pc net.PacketConn, raddr net.Addr) *natEntry {
|
func newNatEntry(pc net.PacketConn, writeTo net.Addr) *natEntry {
|
||||||
return &natEntry{PacketConn: pc, raddr: raddr}
|
return &natEntry{PacketConn: pc, writeTo: writeTo}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Serve serves a connection.
|
// Serve serves a connection.
|
||||||
|
@ -116,13 +116,13 @@ func (s *Unix) ListenAndServeUDP() {
|
|||||||
var session *natEntry
|
var session *natEntry
|
||||||
v, ok := nm.Load(lraddr.String())
|
v, ok := nm.Load(lraddr.String())
|
||||||
if !ok && v == nil {
|
if !ok && v == nil {
|
||||||
pc, _, raddr, err := s.proxy.DialUDP("udp", "")
|
pc, dialer, writeTo, err := s.proxy.DialUDP("udp", "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.F("[unix] remote dial error: %v", err)
|
log.F("[unix] remote dial error: %v", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
session = newNatEntry(pc, raddr)
|
session = newNatEntry(pc, writeTo)
|
||||||
nm.Store(lraddr.String(), session)
|
nm.Store(lraddr.String(), session)
|
||||||
|
|
||||||
go func(c, pc net.PacketConn, lraddr net.Addr) {
|
go func(c, pc net.PacketConn, lraddr net.Addr) {
|
||||||
@ -131,15 +131,15 @@ func (s *Unix) ListenAndServeUDP() {
|
|||||||
nm.Delete(lraddr.String())
|
nm.Delete(lraddr.String())
|
||||||
}(c, pc, lraddr)
|
}(c, pc, lraddr)
|
||||||
|
|
||||||
log.F("[unix] %s <-> %s", lraddr, raddr)
|
log.F("[unix] %s <-> %s", lraddr, dialer.Addr())
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
session = v.(*natEntry)
|
session = v.(*natEntry)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = session.WriteTo(buf[:n], session.raddr)
|
_, err = session.WriteTo(buf[:n], session.writeTo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.F("[unix] remote write error: %v, raddr: %s", err, session.raddr)
|
log.F("[unix] writeTo %s error: %v", session.writeTo, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,9 +148,9 @@ func (s *Unix) ListenAndServeUDP() {
|
|||||||
|
|
||||||
type natEntry struct {
|
type natEntry struct {
|
||||||
net.PacketConn
|
net.PacketConn
|
||||||
raddr net.Addr
|
writeTo net.Addr
|
||||||
}
|
}
|
||||||
|
|
||||||
func newNatEntry(pc net.PacketConn, raddr net.Addr) *natEntry {
|
func newNatEntry(pc net.PacketConn, writeTo net.Addr) *natEntry {
|
||||||
return &natEntry{PacketConn: pc, raddr: raddr}
|
return &natEntry{PacketConn: pc, writeTo: writeTo}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user