新增dnst隧道
This commit is contained in:
@@ -3,6 +3,7 @@ package dns
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
@@ -65,6 +66,7 @@ func (l *dnsTunnelListener) Init(md md.Metadata) (err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
bufferConn := conn
|
||||
|
||||
conn = dns_util.ServerConn(
|
||||
conn,
|
||||
@@ -82,6 +84,10 @@ func (l *dnsTunnelListener) Init(md md.Metadata) (err error) {
|
||||
limiter.ServiceOption(l.options.Service),
|
||||
limiter.NetworkOption(conn.LocalAddr().Network()),
|
||||
)
|
||||
conn = &setBufferPacketConn{
|
||||
PacketConn: conn,
|
||||
bufferConn: bufferConn,
|
||||
}
|
||||
|
||||
config := &quic.Config{
|
||||
KeepAlivePeriod: l.md.keepAlivePeriod,
|
||||
@@ -203,3 +209,22 @@ func (c *dnsTunnelConn) LocalAddr() net.Addr {
|
||||
func (c *dnsTunnelConn) RemoteAddr() net.Addr {
|
||||
return c.raddr
|
||||
}
|
||||
|
||||
type setBufferPacketConn struct {
|
||||
net.PacketConn
|
||||
bufferConn net.PacketConn
|
||||
}
|
||||
|
||||
func (c *setBufferPacketConn) SetReadBuffer(n int) error {
|
||||
if pc, ok := c.bufferConn.(interface{ SetReadBuffer(int) error }); ok {
|
||||
return pc.SetReadBuffer(n)
|
||||
}
|
||||
return errors.New("dns: set read buffer unsupported")
|
||||
}
|
||||
|
||||
func (c *setBufferPacketConn) SetWriteBuffer(n int) error {
|
||||
if pc, ok := c.bufferConn.(interface{ SetWriteBuffer(int) error }); ok {
|
||||
return pc.SetWriteBuffer(n)
|
||||
}
|
||||
return errors.New("dns: set write buffer unsupported")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user