Compare commits

..

89 Commits

Author SHA1 Message Date
世界
45798b10c8
documentation: Bump version 2025-04-27 21:38:28 +08:00
安容
0f8bd01aad
Report invalid DNS address early 2025-04-27 21:38:09 +08:00
世界
e528d425a1
Fix wireguard listen_port 2025-04-27 21:38:08 +08:00
世界
05b6a088a6
clash-api: Add more meta api 2025-04-27 21:34:55 +08:00
世界
73f4b41366
Fix DNS lookup 2025-04-27 21:34:55 +08:00
世界
a15f35a076
Fix tailscale sending unexpected stuff 2025-04-27 21:34:55 +08:00
世界
2316ca38a9
Fix fetch ECH configs 2025-04-27 21:34:55 +08:00
reletor
fc0096b0e6
documentation: Minor fixes 2025-04-27 21:34:55 +08:00
caelansar
d6ab06e1aa
Fix callback deletion in UDP transport 2025-04-27 21:34:55 +08:00
世界
55ca427721
documentation: Try to make the play review happy 2025-04-27 21:34:54 +08:00
世界
26ae7a61e9
Fix missing handling of legacy domain_strategy options 2025-04-27 21:34:54 +08:00
世界
013c707ee8
Improve local DNS server 2025-04-27 21:34:54 +08:00
anytls
01b3d719f5
Update anytls
Co-authored-by: anytls <anytls>
2025-04-27 21:34:54 +08:00
世界
3722fc4987
Fix DNS dialer 2025-04-27 21:34:53 +08:00
世界
ed3aca4208
release: Skip override version for iOS 2025-04-27 21:34:53 +08:00
iikira
5155f95ace
Fix UDP DNS server crash
Signed-off-by: iikira <i2@mail.iikira.com>
2025-04-27 21:34:53 +08:00
ReleTor
7185c03f01
Fix fetch ECH configs 2025-04-27 21:34:53 +08:00
世界
839c4a31fc
release: Update Go to 1.24.2 2025-04-27 21:34:53 +08:00
世界
fd6e5abb86
Allow direct outbounds without domain_resolver 2025-04-27 21:34:52 +08:00
世界
407f2dad75
Fix Tailscale dialer 2025-04-27 21:34:52 +08:00
dyhkwong
883cd0eb62
Fix DNS over QUIC stream close 2025-04-27 21:34:52 +08:00
anytls
f0c3464757
Update anytls
Co-authored-by: anytls <anytls>
2025-04-27 21:34:51 +08:00
Rambling2076
8b27e1f23f
Fix missing with_tailscale in Dockerfile
Signed-off-by: Rambling2076 <Rambling2076@proton.me>
2025-04-27 21:34:51 +08:00
世界
d1a11df54f
Fail when default DNS server not found 2025-04-27 21:34:51 +08:00
世界
0c6b7e7d16
Update gVisor to 20250319.0 2025-04-27 21:34:51 +08:00
世界
20dd4b74c6
release: Do not build tailscale on iOS and tvOS 2025-04-27 21:34:50 +08:00
世界
c5df6c8c49
Explicitly reject detour to empty direct outbounds 2025-04-27 21:34:50 +08:00
世界
d379dcc53d
Add netns support 2025-04-27 21:34:50 +08:00
世界
ea012b4173
Add wildcard name support for predefined records 2025-04-27 21:34:50 +08:00
世界
0b52e96b3c
Remove map usage in options 2025-04-27 21:34:49 +08:00
世界
d998a73a4c
Fix unhandled DNS loop 2025-04-27 21:34:49 +08:00
世界
015f6efc09
Add wildcard-sni support for shadow-tls inbound 2025-04-27 21:34:49 +08:00
世界
1befa4bf2f
Fix Tailscale DNS 2025-04-27 21:34:48 +08:00
k9982874
6ab62ea5c7
Add ntp protocol sniffing 2025-04-27 21:34:48 +08:00
世界
a6e9d900c8
option: Fix marshal legacy DNS options 2025-04-27 21:34:48 +08:00
世界
f40e9e7306
Make domain_resolver optional when only one DNS server is configured 2025-04-27 21:34:48 +08:00
世界
724d74e6ae
Fix DNS lookup context pollution 2025-04-27 21:34:47 +08:00
世界
9afdd2d0fb
Fix http3 DNS server connecting to wrong address 2025-04-27 21:34:47 +08:00
Restia-Ashbell
8f1e2566da
documentation: Fix typo 2025-04-27 21:34:47 +08:00
anytls
aa6a6fd002
Update sing-anytls
Co-authored-by: anytls <anytls>
2025-04-27 21:34:47 +08:00
k9982874
2288a080de
Fix hosts DNS server 2025-04-27 21:34:47 +08:00
世界
62a9691016
Fix UDP DNS server crash 2025-04-27 21:34:46 +08:00
世界
74f6941c3c
documentation: Fix missing ip_accept_any DNS rule option 2025-04-27 21:34:46 +08:00
世界
551db61d33
Fix anytls dialer usage 2025-04-27 21:34:45 +08:00
世界
55e1fa8a15
Move predefined DNS server to rule action 2025-04-27 21:34:45 +08:00
世界
13bffd4819
Fix domain resolver on direct outbound 2025-04-27 21:34:44 +08:00
Zephyruso
0a6e6d773c
Fix missing AnyTLS display name 2025-04-27 21:34:44 +08:00
anytls
572285eef1
Update sing-anytls
Co-authored-by: anytls <anytls>
2025-04-27 21:34:44 +08:00
Estel
f670078ebf
documentation: Fix typo
Signed-off-by: Estel <callmebedrockdigger@gmail.com>
2025-04-27 21:34:43 +08:00
TargetLocked
8e8211b3e8
Fix parsing legacy DNS options 2025-04-27 21:34:43 +08:00
世界
192f452e0f
Fix DNS fallback 2025-04-27 21:34:43 +08:00
世界
b953dad23f
documentation: Fix missing hosts DNS server 2025-04-27 21:34:42 +08:00
anytls
c42598c5a3
Add MinIdleSession option to AnyTLS outbound
Co-authored-by: anytls <anytls>
2025-04-27 21:34:42 +08:00
ReleTor
2c730e3ca6
documentation: Minor fixes 2025-04-27 21:34:42 +08:00
libtry486
df788c7925
documentation: Fix typo
fix typo

Signed-off-by: libtry486 <89328481+libtry486@users.noreply.github.com>
2025-04-27 21:34:41 +08:00
Alireza Ahmadi
f56bd38060
Fix Outbound deadlock 2025-04-27 21:34:41 +08:00
世界
0614d85b01
documentation: Fix AnyTLS doc 2025-04-27 21:34:41 +08:00
anytls
483fd413fb
Add AnyTLS protocol 2025-04-27 21:34:41 +08:00
世界
cb048be805
Migrate to stdlib ECH support 2025-04-27 21:34:41 +08:00
世界
ead0b3d99a
Add fallback local DNS server for iOS 2025-04-27 21:34:40 +08:00
世界
42fd9b50cf
Get darwin local DNS server from libresolv 2025-04-27 21:34:40 +08:00
世界
aa91604522
Improve resolve action 2025-04-27 21:34:40 +08:00
世界
dfc6398442
Fix toolchain version 2025-04-27 21:34:39 +08:00
世界
6cdf99dc45
Add back port hopping to hysteria 1 2025-04-27 21:34:39 +08:00
世界
382ed8158a
Update dependencies 2025-04-27 21:34:38 +08:00
xchacha20-poly1305
d43767f992
Remove single quotes of raw Moziila certs 2025-04-27 21:34:38 +08:00
世界
eccace2329
Add Tailscale endpoint 2025-04-27 21:34:37 +08:00
世界
06b6369f89
Build legacy binaries with latest Go 2025-04-27 21:34:37 +08:00
世界
ad4f82243a
documentation: Remove outdated icons 2025-04-27 21:34:37 +08:00
世界
9c53916115
documentation: Certificate store 2025-04-27 21:34:37 +08:00
世界
ceb7a25cf7
documentation: TLS fragment 2025-04-27 21:34:36 +08:00
世界
9d4bab4723
documentation: Outbound domain resolver 2025-04-27 21:34:36 +08:00
世界
0e0ca7508d
documentation: Refactor DNS 2025-04-27 21:34:36 +08:00
世界
ea8aeb04f0
Add certificate store 2025-04-27 21:34:35 +08:00
世界
493bc247d7
Add TLS fragment support 2025-04-27 21:34:35 +08:00
世界
9e4dfcf644
refactor: Outbound domain resolver 2025-04-27 21:34:35 +08:00
世界
5d2a70a92a
refactor: DNS 2025-04-27 21:34:35 +08:00
世界
348cc39975
Bump version 2025-04-27 21:33:31 +08:00
世界
987899f94a
Fix usages of wireguard listener 2025-04-27 21:29:23 +08:00
世界
d8b2d5142f
Fix panic on some stupid input 2025-04-25 16:03:58 +08:00
世界
134802d1ee
Fix ssh outbound 2025-04-25 16:03:57 +08:00
世界
e5e81b4de1
Fix wireguard listening 2025-04-25 16:03:57 +08:00
世界
300c961efa
option: Fix listable again and again 2025-04-25 16:03:57 +08:00
世界
7c7f512405
option: Fix omitempty reject method 2025-04-25 16:03:57 +08:00
世界
03e8d029c2
release: Fix apt-get install 2025-04-25 16:03:57 +08:00
世界
787b5f1931
Fix set wireguard reserved on Linux 2025-04-25 16:03:57 +08:00
世界
56a7624618
Fix vmess working with zero uuids 2025-04-25 16:03:57 +08:00
世界
3a84acf122
Fix hysteria1 server panic 2025-04-25 16:03:57 +08:00
世界
f600e02e47
Fix DNS crash 2025-04-25 16:03:57 +08:00
17 changed files with 90 additions and 28 deletions

@ -1 +1 @@
Subproject commit 55f31c29bb68895ce544e0dfbf852b4b3e32b530 Subproject commit 6a15780ce1659a234816f7248cbc09e8ea54a1be

View File

@ -341,7 +341,17 @@ func (d *DefaultDialer) ListenSerialInterfacePacket(ctx context.Context, destina
} }
func (d *DefaultDialer) ListenPacketCompat(network, address string) (net.PacketConn, error) { func (d *DefaultDialer) ListenPacketCompat(network, address string) (net.PacketConn, error) {
return d.udpListener.ListenPacket(context.Background(), network, address) udpListener := d.udpListener
udpListener.Control = control.Append(udpListener.Control, func(network, address string, conn syscall.RawConn) error {
for _, wgControlFn := range WgControlFns {
err := wgControlFn(network, address, conn)
if err != nil {
return err
}
}
return nil
})
return udpListener.ListenPacket(context.Background(), network, address)
} }
func trackConn(conn net.Conn, err error) (net.Conn, error) { func trackConn(conn net.Conn, err error) (net.Conn, error) {

View File

@ -268,13 +268,10 @@ func (c *Client) Lookup(ctx context.Context, transport adapter.DNSTransport, dom
return nil return nil
}) })
err := group.Run(ctx) err := group.Run(ctx)
if len(response4) > 0 || len(response6) > 0 { if len(response4) == 0 && len(response6) == 0 {
return sortAddresses(response4, response6, options.Strategy), nil
} else if err != nil {
return nil, err return nil, err
} else {
return nil, RcodeError(dns.RcodeNameError)
} }
return sortAddresses(response4, response6, options.Strategy), nil
} }
func (c *Client) ClearCache() { func (c *Client) ClearCache() {

View File

@ -323,6 +323,9 @@ func (r *Router) Lookup(ctx context.Context, domain string, options adapter.DNSQ
err error err error
) )
printResult := func() { printResult := func() {
if err == nil && len(responseAddrs) == 0 {
err = E.New("empty result")
}
if err != nil { if err != nil {
if errors.Is(err, ErrResponseRejectedCached) { if errors.Is(err, ErrResponseRejectedCached) {
r.logger.DebugContext(ctx, "response rejected for ", domain, " (cached)") r.logger.DebugContext(ctx, "response rejected for ", domain, " (cached)")
@ -331,14 +334,15 @@ func (r *Router) Lookup(ctx context.Context, domain string, options adapter.DNSQ
} else { } else {
r.logger.ErrorContext(ctx, E.Cause(err, "lookup failed for ", domain)) r.logger.ErrorContext(ctx, E.Cause(err, "lookup failed for ", domain))
} }
} else if len(responseAddrs) == 0 { }
panic("unexpected empty result") if err != nil {
err = E.Cause(err, "lookup ", domain)
} }
} }
responseAddrs, cached = r.client.LookupCache(domain, options.Strategy) responseAddrs, cached = r.client.LookupCache(domain, options.Strategy)
if cached { if cached {
if len(responseAddrs) == 0 { if len(responseAddrs) == 0 {
return nil, RcodeNameError return nil, E.New("lookup ", domain, ": empty result (cached)")
} }
return responseAddrs, nil return responseAddrs, nil
} }

View File

@ -93,7 +93,9 @@ func NewHTTPS(ctx context.Context, logger log.ContextLogger, tag string, options
return nil, err return nil, err
} }
serverAddr := options.DNSServerAddressOptions.Build() serverAddr := options.DNSServerAddressOptions.Build()
if serverAddr.Port == 0 { if !serverAddr.Addr.IsValid() {
return nil, E.New("invalid server address: ", serverAddr)
} else if serverAddr.Port == 0 {
serverAddr.Port = 443 serverAddr.Port = 443
} }
return NewHTTPSRaw( return NewHTTPSRaw(

View File

@ -3,6 +3,7 @@ package local
import ( import (
"context" "context"
"math/rand" "math/rand"
"net/netip"
"time" "time"
"github.com/sagernet/sing-box/adapter" "github.com/sagernet/sing-box/adapter"
@ -90,8 +91,9 @@ func (t *Transport) exchangeParallel(ctx context.Context, systemConfig *dnsConfi
startRacer := func(ctx context.Context, fqdn string) { startRacer := func(ctx context.Context, fqdn string) {
response, err := t.tryOneName(ctx, systemConfig, fqdn, message) response, err := t.tryOneName(ctx, systemConfig, fqdn, message)
if err == nil { if err == nil {
addresses, _ := dns.MessageToAddresses(response) var addresses []netip.Addr
if len(addresses) == 0 { addresses, err = dns.MessageToAddresses(response)
if err == nil && len(addresses) == 0 {
err = E.New(fqdn, ": empty result") err = E.New(fqdn, ": empty result")
} }
} }

View File

@ -89,7 +89,9 @@ func NewHTTP3(ctx context.Context, logger log.ContextLogger, tag string, options
return nil, err return nil, err
} }
serverAddr := options.DNSServerAddressOptions.Build() serverAddr := options.DNSServerAddressOptions.Build()
if serverAddr.Port == 0 { if !serverAddr.Addr.IsValid() {
return nil, E.New("invalid server address: ", serverAddr)
} else if serverAddr.Port == 0 {
serverAddr.Port = 443 serverAddr.Port = 443
} }
return &HTTP3Transport{ return &HTTP3Transport{

View File

@ -16,6 +16,7 @@ import (
sQUIC "github.com/sagernet/sing-quic" sQUIC "github.com/sagernet/sing-quic"
"github.com/sagernet/sing/common" "github.com/sagernet/sing/common"
"github.com/sagernet/sing/common/bufio" "github.com/sagernet/sing/common/bufio"
E "github.com/sagernet/sing/common/exceptions"
"github.com/sagernet/sing/common/logger" "github.com/sagernet/sing/common/logger"
M "github.com/sagernet/sing/common/metadata" M "github.com/sagernet/sing/common/metadata"
N "github.com/sagernet/sing/common/network" N "github.com/sagernet/sing/common/network"
@ -55,7 +56,9 @@ func NewQUIC(ctx context.Context, logger log.ContextLogger, tag string, options
tlsConfig.SetNextProtos([]string{"doq"}) tlsConfig.SetNextProtos([]string{"doq"})
} }
serverAddr := options.DNSServerAddressOptions.Build() serverAddr := options.DNSServerAddressOptions.Build()
if serverAddr.Port == 0 { if !serverAddr.Addr.IsValid() {
return nil, E.New("invalid server address: ", serverAddr)
} else if serverAddr.Port == 0 {
serverAddr.Port = 853 serverAddr.Port = 853
} }
return &Transport{ return &Transport{

View File

@ -13,6 +13,7 @@ import (
"github.com/sagernet/sing-box/option" "github.com/sagernet/sing-box/option"
"github.com/sagernet/sing/common" "github.com/sagernet/sing/common"
"github.com/sagernet/sing/common/buf" "github.com/sagernet/sing/common/buf"
E "github.com/sagernet/sing/common/exceptions"
M "github.com/sagernet/sing/common/metadata" M "github.com/sagernet/sing/common/metadata"
N "github.com/sagernet/sing/common/network" N "github.com/sagernet/sing/common/network"
@ -37,7 +38,9 @@ func NewTCP(ctx context.Context, logger log.ContextLogger, tag string, options o
return nil, err return nil, err
} }
serverAddr := options.DNSServerAddressOptions.Build() serverAddr := options.DNSServerAddressOptions.Build()
if serverAddr.Port == 0 { if !serverAddr.Addr.IsValid() {
return nil, E.New("invalid server address: ", serverAddr)
} else if serverAddr.Port == 0 {
serverAddr.Port = 53 serverAddr.Port = 53
} }
return &TCPTransport{ return &TCPTransport{

View File

@ -54,7 +54,9 @@ func NewTLS(ctx context.Context, logger log.ContextLogger, tag string, options o
return nil, err return nil, err
} }
serverAddr := options.DNSServerAddressOptions.Build() serverAddr := options.DNSServerAddressOptions.Build()
if serverAddr.Port == 0 { if !serverAddr.Addr.IsValid() {
return nil, E.New("invalid server address: ", serverAddr)
} else if serverAddr.Port == 0 {
serverAddr.Port = 853 serverAddr.Port = 853
} }
return &TLSTransport{ return &TLSTransport{

View File

@ -13,6 +13,7 @@ import (
"github.com/sagernet/sing-box/log" "github.com/sagernet/sing-box/log"
"github.com/sagernet/sing-box/option" "github.com/sagernet/sing-box/option"
"github.com/sagernet/sing/common/buf" "github.com/sagernet/sing/common/buf"
E "github.com/sagernet/sing/common/exceptions"
"github.com/sagernet/sing/common/logger" "github.com/sagernet/sing/common/logger"
M "github.com/sagernet/sing/common/metadata" M "github.com/sagernet/sing/common/metadata"
N "github.com/sagernet/sing/common/network" N "github.com/sagernet/sing/common/network"
@ -44,7 +45,9 @@ func NewUDP(ctx context.Context, logger log.ContextLogger, tag string, options o
return nil, err return nil, err
} }
serverAddr := options.DNSServerAddressOptions.Build() serverAddr := options.DNSServerAddressOptions.Build()
if serverAddr.Port == 0 { if !serverAddr.Addr.IsValid() {
return nil, E.New("invalid server address: ", serverAddr)
} else if serverAddr.Port == 0 {
serverAddr.Port = 53 serverAddr.Port = 53
} }
return NewUDPRaw(logger, dns.NewTransportAdapterWithRemoteOptions(C.DNSTypeUDP, tag, options), transportDialer, serverAddr), nil return NewUDPRaw(logger, dns.NewTransportAdapterWithRemoteOptions(C.DNSTypeUDP, tag, options), transportDialer, serverAddr), nil

View File

@ -2,6 +2,16 @@
icon: material/alert-decagram icon: material/alert-decagram
--- ---
#### 1.12.0-beta.6
* Fixes and improvements
### 1.11.9
* Fixes and improvements
_We are temporarily unable to update sing-box apps on the App Store because the reviewer mistakenly found that we violated the rules (TestFlight users are not affected)._
#### 1.12.0-beta.5 #### 1.12.0-beta.5
* Fixes and improvements * Fixes and improvements

View File

@ -83,7 +83,6 @@ type DialerOptions struct {
NetworkType badoption.Listable[InterfaceType] `json:"network_type,omitempty"` NetworkType badoption.Listable[InterfaceType] `json:"network_type,omitempty"`
FallbackNetworkType badoption.Listable[InterfaceType] `json:"fallback_network_type,omitempty"` FallbackNetworkType badoption.Listable[InterfaceType] `json:"fallback_network_type,omitempty"`
FallbackDelay badoption.Duration `json:"fallback_delay,omitempty"` FallbackDelay badoption.Duration `json:"fallback_delay,omitempty"`
IsWireGuardListener bool `json:"-"`
// Deprecated: migrated to domain resolver // Deprecated: migrated to domain resolver
DomainStrategy DomainStrategy `json:"domain_strategy,omitempty"` DomainStrategy DomainStrategy `json:"domain_strategy,omitempty"`

View File

@ -45,8 +45,8 @@ func NewEndpoint(ctx context.Context, router adapter.Router, logger log.ContextL
logger: logger, logger: logger,
localAddresses: options.Address, localAddresses: options.Address,
} }
if options.Detour == "" { if options.Detour != "" && options.ListenPort != 0 {
options.IsWireGuardListener = true return nil, E.New("`listen_port` is conflict with `detour`")
} }
outboundDialer, err := dialer.NewWithOptions(dialer.Options{ outboundDialer, err := dialer.NewWithOptions(dialer.Options{
Context: ctx, Context: ctx,

View File

@ -46,9 +46,7 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL
logger: logger, logger: logger,
localAddresses: options.LocalAddress, localAddresses: options.LocalAddress,
} }
if options.Detour == "" { if options.Detour != "" && options.GSO {
options.IsWireGuardListener = true
} else if options.GSO {
return nil, E.New("gso is conflict with detour") return nil, E.New("gso is conflict with detour")
} }
outboundDialer, err := dialer.NewWithOptions(dialer.Options{ outboundDialer, err := dialer.NewWithOptions(dialer.Options{

View File

@ -7,6 +7,7 @@ import (
"net" "net"
"net/netip" "net/netip"
"os" "os"
"strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
@ -66,7 +67,17 @@ func (m *ConnectionManager) NewConnection(ctx context.Context, this N.Dialer, co
remoteConn, err = this.DialContext(ctx, N.NetworkTCP, metadata.Destination) remoteConn, err = this.DialContext(ctx, N.NetworkTCP, metadata.Destination)
} }
if err != nil { if err != nil {
err = E.Cause(err, "open outbound connection") var remoteString string
if len(metadata.DestinationAddresses) > 0 {
remoteString = "[" + strings.Join(common.Map(metadata.DestinationAddresses, netip.Addr.String), ",") + "]"
} else {
remoteString = metadata.Destination.String()
}
var dialerString string
if outbound, isOutbound := this.(adapter.Outbound); isOutbound {
dialerString = " using outbound/" + outbound.Type() + "[" + outbound.Tag() + "]"
}
err = E.Cause(err, "open connection to ", remoteString, dialerString)
N.CloseOnHandshakeFailure(conn, onClose, err) N.CloseOnHandshakeFailure(conn, onClose, err)
m.logger.ErrorContext(ctx, err) m.logger.ErrorContext(ctx, err)
return return
@ -133,8 +144,19 @@ func (m *ConnectionManager) NewPacketConnection(ctx context.Context, this N.Dial
remoteConn, err = this.DialContext(ctx, N.NetworkUDP, metadata.Destination) remoteConn, err = this.DialContext(ctx, N.NetworkUDP, metadata.Destination)
} }
if err != nil { if err != nil {
var remoteString string
if len(metadata.DestinationAddresses) > 0 {
remoteString = "[" + strings.Join(common.Map(metadata.DestinationAddresses, netip.Addr.String), ",") + "]"
} else {
remoteString = metadata.Destination.String()
}
var dialerString string
if outbound, isOutbound := this.(adapter.Outbound); isOutbound {
dialerString = " using outbound/" + outbound.Type() + "[" + outbound.Tag() + "]"
}
err = E.Cause(err, "open packet connection to ", remoteString, dialerString)
N.CloseOnHandshakeFailure(conn, onClose, err) N.CloseOnHandshakeFailure(conn, onClose, err)
m.logger.ErrorContext(ctx, "open outbound packet connection: ", err) m.logger.ErrorContext(ctx, err)
return return
} }
remotePacketConn = bufio.NewUnbindPacketConn(remoteConn) remotePacketConn = bufio.NewUnbindPacketConn(remoteConn)
@ -149,8 +171,13 @@ func (m *ConnectionManager) NewPacketConnection(ctx context.Context, this N.Dial
remotePacketConn, err = this.ListenPacket(ctx, metadata.Destination) remotePacketConn, err = this.ListenPacket(ctx, metadata.Destination)
} }
if err != nil { if err != nil {
var dialerString string
if outbound, isOutbound := this.(adapter.Outbound); isOutbound {
dialerString = " using outbound/" + outbound.Type() + "[" + outbound.Tag() + "]"
}
err = E.Cause(err, "listen packet connection using ", dialerString)
N.CloseOnHandshakeFailure(conn, onClose, err) N.CloseOnHandshakeFailure(conn, onClose, err)
m.logger.ErrorContext(ctx, "listen outbound packet connection: ", err) m.logger.ErrorContext(ctx, err)
return return
} }
} }

View File

@ -141,7 +141,7 @@ func (e *Endpoint) Start(resolve bool) error {
return nil return nil
} }
var bind conn.Bind var bind conn.Bind
wgListener, isWgListener := e.options.Dialer.(conn.Listener) wgListener, isWgListener := common.Cast[conn.Listener](e.options.Dialer)
if isWgListener { if isWgListener {
bind = conn.NewStdNetBind(wgListener) bind = conn.NewStdNetBind(wgListener)
} else { } else {