From 2d0caade0d82cc9646decb6f1b9245bb57013cf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Wed, 25 Oct 2023 12:00:00 +0800 Subject: [PATCH] Fix missing NAT in pre-resolved UDP connections --- outbound/default.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/outbound/default.go b/outbound/default.go index 0382825f..e5930520 100644 --- a/outbound/default.go +++ b/outbound/default.go @@ -17,6 +17,7 @@ import ( "github.com/sagernet/sing/common/bufio" "github.com/sagernet/sing/common/canceler" E "github.com/sagernet/sing/common/exceptions" + M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" ) @@ -119,6 +120,9 @@ func NewPacketConnection(ctx context.Context, this N.Dialer, conn N.PacketConn, return err } if destinationAddress.IsValid() { + if metadata.Destination.IsFqdn() { + outConn = bufio.NewNATPacketConn(bufio.NewPacketConn(outConn), metadata.Destination, M.SocksaddrFrom(destinationAddress, metadata.Destination.Port)) + } if natConn, loaded := common.Cast[bufio.NATPacketConn](conn); loaded { natConn.UpdateDestination(destinationAddress) } @@ -159,6 +163,9 @@ func NewDirectPacketConnection(ctx context.Context, router adapter.Router, this return err } if destinationAddress.IsValid() { + if metadata.Destination.IsFqdn() { + outConn = bufio.NewNATPacketConn(bufio.NewPacketConn(outConn), M.SocksaddrFrom(destinationAddress, metadata.Destination.Port), metadata.Destination) + } if natConn, loaded := common.Cast[bufio.NATPacketConn](conn); loaded { natConn.UpdateDestination(destinationAddress) }