fix dtls connection

This commit is contained in:
ginuerzh
2022-12-23 18:56:58 +08:00
parent fb29d5c80e
commit bb106e2d89
11 changed files with 249 additions and 58 deletions

View File

@ -12,6 +12,7 @@ import (
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
xdtls "github.com/go-gost/x/internal/util/dtls"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
@ -88,7 +89,12 @@ func (l *dtlsListener) Init(md md.Metadata) (err error) {
}
func (l *dtlsListener) Accept() (conn net.Conn, err error) {
return l.ln.Accept()
c, err := l.ln.Accept()
if err != nil {
return
}
conn = xdtls.Conn(c, l.md.bufferSize)
return
}
func (l *dtlsListener) Addr() net.Addr {

View File

@ -7,19 +7,24 @@ import (
mdutil "github.com/go-gost/core/metadata/util"
)
const (
defaultBufferSize = 1200
)
type metadata struct {
mtu int
bufferSize int
flightInterval time.Duration
}
func (l *dtlsListener) parseMetadata(md mdata.Metadata) (err error) {
const (
mtu = "mtu"
flightInterval = "flightInterval"
)
l.md.mtu = mdutil.GetInt(md, "dtls.mtu", "mtu")
l.md.bufferSize = mdutil.GetInt(md, "dtls.bufferSize", "bufferSize")
if l.md.bufferSize <= 0 {
l.md.bufferSize = defaultBufferSize
}
l.md.mtu = mdutil.GetInt(md, mtu)
l.md.flightInterval = mdutil.GetDuration(md, flightInterval)
l.md.flightInterval = mdutil.GetDuration(md, "dtls.flightInterval", "flightInterval")
return nil
}

View File

@ -10,11 +10,13 @@ import (
)
const (
DefaultMTU = 1350
defaultMTU = 1350
defaultReadBufferSize = 4096
)
type metadata struct {
config *tun_util.Config
config *tun_util.Config
readBufferSize int
}
func (l *tunListener) parseMetadata(md mdata.Metadata) (err error) {
@ -28,13 +30,18 @@ func (l *tunListener) parseMetadata(md mdata.Metadata) (err error) {
gateway = "gw"
)
l.md.readBufferSize = mdutil.GetInt(md, "tun.rbuf", "rbuf", "readBufferSize")
if l.md.readBufferSize <= 0 {
l.md.readBufferSize = defaultReadBufferSize
}
config := &tun_util.Config{
Name: mdutil.GetString(md, name),
Peer: mdutil.GetString(md, peer),
MTU: mdutil.GetInt(md, mtu),
}
if config.MTU <= 0 {
config.MTU = DefaultMTU
config.MTU = defaultMTU
}
if gw := mdutil.GetString(md, gateway); gw != "" {
config.Gateway = net.ParseIP(gw)

View File

@ -12,11 +12,16 @@ const (
)
type tunDevice struct {
dev tun.Device
dev tun.Device
readBufferSize int
}
func (d *tunDevice) Read(p []byte) (n int, err error) {
b := bufpool.Get(tunOffsetBytes + 65535)
rbuf := d.readBufferSize
if rbuf <= tunOffsetBytes {
rbuf = defaultReadBufferSize
}
b := bufpool.Get(rbuf)
defer bufpool.Put(b)
n, err = d.dev.Read(*b, tunOffsetBytes)
@ -51,7 +56,8 @@ func (l *tunListener) createTunDevice() (dev io.ReadWriteCloser, name string, er
}
dev = &tunDevice{
dev: ifce,
dev: ifce,
readBufferSize: l.md.readBufferSize,
}
name, err = ifce.Name()