diff --git a/dns/transport/dhcp/dhcp_shared.go b/dns/transport/dhcp/dhcp_shared.go index 31b92fb5..3d8d5512 100644 --- a/dns/transport/dhcp/dhcp_shared.go +++ b/dns/transport/dhcp/dhcp_shared.go @@ -16,11 +16,6 @@ import ( mDNS "github.com/miekg/dns" ) -const ( - // net.maxDNSPacketSize - maxDNSPacketSize = 1232 -) - func (t *Transport) exchangeSingleRequest(ctx context.Context, servers []M.Socksaddr, message *mDNS.Msg, domain string) (*mDNS.Msg, error) { var lastErr error for _, fqdn := range t.nameList(domain) { @@ -118,7 +113,7 @@ func (t *Transport) exchangeOne(ctx context.Context, server M.Socksaddr, questio Question: []mDNS.Question{question}, Compress: true, } - request.SetEdns0(maxDNSPacketSize, false) + request.SetEdns0(buf.UDPBufferSize, false) buffer := buf.Get(buf.UDPBufferSize) defer buf.Put(buffer) for _, network := range networks { diff --git a/dns/transport/local/local.go b/dns/transport/local/local.go index 70b495ca..7c26b936 100644 --- a/dns/transport/local/local.go +++ b/dns/transport/local/local.go @@ -2,7 +2,9 @@ package local import ( "context" + "errors" "math/rand" + "syscall" "time" "github.com/sagernet/sing-box/adapter" @@ -164,7 +166,7 @@ func (t *Transport) exchangeOne(ctx context.Context, server M.Socksaddr, questio Question: []mDNS.Question{question}, Compress: true, } - request.SetEdns0(maxDNSPacketSize, false) + request.SetEdns0(buf.UDPBufferSize, false) buffer := buf.Get(buf.UDPBufferSize) defer buf.Put(buffer) for _, network := range networks { @@ -184,6 +186,9 @@ func (t *Transport) exchangeOne(ctx context.Context, server M.Socksaddr, questio } _, err = conn.Write(rawMessage) if err != nil { + if errors.Is(err, syscall.EMSGSIZE) && network == N.NetworkUDP { + continue + } return nil, E.Cause(err, "write request") } n, err := conn.Read(buffer) diff --git a/dns/transport/local/resolv.go b/dns/transport/local/resolv.go index afe679a2..3586cbbf 100644 --- a/dns/transport/local/resolv.go +++ b/dns/transport/local/resolv.go @@ -10,11 +10,6 @@ import ( "time" ) -const ( - // net.maxDNSPacketSize - maxDNSPacketSize = 1232 -) - type resolverConfig struct { initOnce sync.Once ch chan struct{} diff --git a/dns/transport_dialer.go b/dns/transport_dialer.go index 2ed70ead..b3ee8082 100644 --- a/dns/transport_dialer.go +++ b/dns/transport_dialer.go @@ -19,7 +19,6 @@ func NewLocalDialer(ctx context.Context, options option.LocalDNSServerOptions) ( if options.LegacyDefaultDialer { return dialer.NewDefaultOutbound(ctx), nil } else { - options.UDPFragmentDefault = true return dialer.NewWithOptions(dialer.Options{ Context: ctx, Options: options.DialerOptions,