瀏覽代碼

Fix DNS packet size

世界 1 月之前
父節點
當前提交
b14cecaeb2
共有 4 個文件被更改,包括 7 次插入13 次删除
  1. 1 6
      dns/transport/dhcp/dhcp_shared.go
  2. 6 1
      dns/transport/local/local.go
  3. 0 5
      dns/transport/local/resolv.go
  4. 0 1
      dns/transport_dialer.go

+ 1 - 6
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 {

+ 6 - 1
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)

+ 0 - 5
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{}

+ 0 - 1
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,