mirror of
https://github.com/daeuniverse/dae.git
synced 2024-12-23 01:24:45 +07:00
fix: truncated dns resp (#203)
This commit is contained in:
parent
11d2ea945f
commit
1cc9edc0c6
5
common/consts/net.go
Normal file
5
common/consts/net.go
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package consts
|
||||||
|
|
||||||
|
const (
|
||||||
|
EthernetMtu = 1500
|
||||||
|
)
|
@ -15,6 +15,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/daeuniverse/dae/common/consts"
|
||||||
dnsmessage "github.com/miekg/dns"
|
dnsmessage "github.com/miekg/dns"
|
||||||
"github.com/mzz2017/softwind/netproxy"
|
"github.com/mzz2017/softwind/netproxy"
|
||||||
"github.com/mzz2017/softwind/pkg/fastrand"
|
"github.com/mzz2017/softwind/pkg/fastrand"
|
||||||
@ -240,8 +241,8 @@ func resolve(ctx context.Context, d netproxy.Dialer, dns netip.AddrPort, host st
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
buf := pool.Get(512)
|
buf := pool.GetFullCap(consts.EthernetMtu)
|
||||||
defer pool.Put(buf)
|
defer buf.Put()
|
||||||
if magicNetwork.Network == "tcp" {
|
if magicNetwork.Network == "tcp" {
|
||||||
// Read DNS response length
|
// Read DNS response length
|
||||||
_, err := io.ReadFull(c, buf[:2])
|
_, err := io.ReadFull(c, buf[:2])
|
||||||
@ -250,7 +251,7 @@ func resolve(ctx context.Context, d netproxy.Dialer, dns netip.AddrPort, host st
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
n := binary.BigEndian.Uint16(buf)
|
n := binary.BigEndian.Uint16(buf)
|
||||||
if n > 512 {
|
if int(n) > cap(buf) {
|
||||||
ch <- fmt.Errorf("too big dns resp")
|
ch <- fmt.Errorf("too big dns resp")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -705,15 +705,16 @@ func (c *ControlPlane) Serve(readyChan chan<- bool, listener *Listener) (err err
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
go func() {
|
go func() {
|
||||||
|
buf := pool.GetFullCap(consts.EthernetMtu)
|
||||||
|
var oob [120]byte // Size for original dest
|
||||||
|
defer buf.Put()
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-c.ctx.Done():
|
case <-c.ctx.Done():
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
var buf [EthernetMtu]byte
|
n, oobn, _, src, err := udpConn.ReadMsgUDPAddrPort(buf, oob[:])
|
||||||
var oob [120]byte // Size for original dest
|
|
||||||
n, oobn, _, src, err := udpConn.ReadMsgUDPAddrPort(buf[:], oob[:])
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !strings.Contains(err.Error(), "use of closed network connection") {
|
if !strings.Contains(err.Error(), "use of closed network connection") {
|
||||||
c.log.Errorf("ReadFromUDPAddrPort: %v, %v", src.String(), err)
|
c.log.Errorf("ReadFromUDPAddrPort: %v, %v", src.String(), err)
|
||||||
@ -722,8 +723,8 @@ func (c *ControlPlane) Serve(readyChan chan<- bool, listener *Listener) (err err
|
|||||||
}
|
}
|
||||||
newBuf := pool.Get(n)
|
newBuf := pool.Get(n)
|
||||||
copy(newBuf, buf[:n])
|
copy(newBuf, buf[:n])
|
||||||
go func(data []byte, src netip.AddrPort) {
|
go func(data pool.PB, src netip.AddrPort) {
|
||||||
defer pool.Put(data)
|
defer data.Put()
|
||||||
var realDst netip.AddrPort
|
var realDst netip.AddrPort
|
||||||
var routingResult *bpfRoutingResult
|
var routingResult *bpfRoutingResult
|
||||||
pktDst := RetrieveOriginalDest(oob[:oobn])
|
pktDst := RetrieveOriginalDest(oob[:oobn])
|
||||||
|
@ -639,7 +639,7 @@ func (c *DnsController) dialSend(invokingDepth int, req *udpRequest, data []byte
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// We can block here because we are in a coroutine.
|
// We can block here because we are in a coroutine.
|
||||||
respBuf := pool.Get(512)
|
respBuf := pool.GetFullCap(consts.EthernetMtu)
|
||||||
defer pool.Put(respBuf)
|
defer pool.Put(respBuf)
|
||||||
for {
|
for {
|
||||||
// Wait for response.
|
// Wait for response.
|
||||||
|
@ -11,15 +11,12 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/daeuniverse/dae/common/consts"
|
||||||
"github.com/daeuniverse/dae/component/outbound/dialer"
|
"github.com/daeuniverse/dae/component/outbound/dialer"
|
||||||
"github.com/mzz2017/softwind/netproxy"
|
"github.com/mzz2017/softwind/netproxy"
|
||||||
"github.com/mzz2017/softwind/pool"
|
"github.com/mzz2017/softwind/pool"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
EthernetMtu = 1500
|
|
||||||
)
|
|
||||||
|
|
||||||
type UdpHandler func(data []byte, from netip.AddrPort) error
|
type UdpHandler func(data []byte, from netip.AddrPort) error
|
||||||
|
|
||||||
type UdpEndpoint struct {
|
type UdpEndpoint struct {
|
||||||
@ -34,8 +31,7 @@ type UdpEndpoint struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ue *UdpEndpoint) start() {
|
func (ue *UdpEndpoint) start() {
|
||||||
buf := pool.Get(EthernetMtu)
|
buf := pool.GetFullCap(consts.EthernetMtu)
|
||||||
buf = buf[:cap(buf)]
|
|
||||||
defer pool.Put(buf)
|
defer pool.Put(buf)
|
||||||
for {
|
for {
|
||||||
n, from, err := ue.conn.ReadFrom(buf[:])
|
n, from, err := ue.conn.ReadFrom(buf[:])
|
||||||
|
2
go.mod
2
go.mod
@ -12,7 +12,7 @@ require (
|
|||||||
github.com/json-iterator/go v1.1.12
|
github.com/json-iterator/go v1.1.12
|
||||||
github.com/miekg/dns v1.1.55
|
github.com/miekg/dns v1.1.55
|
||||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
|
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
|
||||||
github.com/mzz2017/softwind v0.0.0-20230708102709-26ff44839573
|
github.com/mzz2017/softwind v0.0.0-20230710142544-73a557cea4a4
|
||||||
github.com/okzk/sdnotify v0.0.0-20180710141335-d9becc38acbd
|
github.com/okzk/sdnotify v0.0.0-20180710141335-d9becc38acbd
|
||||||
github.com/safchain/ethtool v0.3.0
|
github.com/safchain/ethtool v0.3.0
|
||||||
github.com/sirupsen/logrus v1.9.3
|
github.com/sirupsen/logrus v1.9.3
|
||||||
|
4
go.sum
4
go.sum
@ -91,8 +91,8 @@ github.com/mzz2017/disk-bloom v1.0.1 h1:rEF9MiXd9qMW3ibRpqcerLXULoTgRlM21yqqJl1B
|
|||||||
github.com/mzz2017/disk-bloom v1.0.1/go.mod h1:JLHETtUu44Z6iBmsqzkOtFlRvXSlKnxjwiBRDapizDI=
|
github.com/mzz2017/disk-bloom v1.0.1/go.mod h1:JLHETtUu44Z6iBmsqzkOtFlRvXSlKnxjwiBRDapizDI=
|
||||||
github.com/mzz2017/quic-go v0.0.0-20230706143320-cc858d4932b7 h1:9zmZilN02x3byMB2X3x+B4iyKHkucv70WA4hsyZkjo8=
|
github.com/mzz2017/quic-go v0.0.0-20230706143320-cc858d4932b7 h1:9zmZilN02x3byMB2X3x+B4iyKHkucv70WA4hsyZkjo8=
|
||||||
github.com/mzz2017/quic-go v0.0.0-20230706143320-cc858d4932b7/go.mod h1:3H6d55CEofIWWr3gQThiB27+hA3WG5tATtPovzEYPAA=
|
github.com/mzz2017/quic-go v0.0.0-20230706143320-cc858d4932b7/go.mod h1:3H6d55CEofIWWr3gQThiB27+hA3WG5tATtPovzEYPAA=
|
||||||
github.com/mzz2017/softwind v0.0.0-20230708102709-26ff44839573 h1:fDndoUP5FyJKZM0LJ9nqZJhZF9eLhgfG46xwxO4UHww=
|
github.com/mzz2017/softwind v0.0.0-20230710142544-73a557cea4a4 h1:U6oSJf+dwVXpBZGi73l77igid+sOy4jgJucjSrfowFU=
|
||||||
github.com/mzz2017/softwind v0.0.0-20230708102709-26ff44839573/go.mod h1:Fz8fgR7/dbnfR6RLpeOMkUDyebq4xShdmjj+cE5jnJ4=
|
github.com/mzz2017/softwind v0.0.0-20230710142544-73a557cea4a4/go.mod h1:Fz8fgR7/dbnfR6RLpeOMkUDyebq4xShdmjj+cE5jnJ4=
|
||||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||||
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
||||||
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
||||||
|
Loading…
Reference in New Issue
Block a user