mirror of
https://github.com/SagerNet/sing-box.git
synced 2025-07-27 08:14:08 +08:00
Compare commits
63 Commits
f70ca3d190
...
2b18fc4886
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2b18fc4886 | ||
![]() |
73862ac6bf | ||
![]() |
c22210da47 | ||
![]() |
886e379e62 | ||
![]() |
5c793629fe | ||
![]() |
8b3cab3379 | ||
![]() |
235c4c7a96 | ||
![]() |
9bfb76168a | ||
![]() |
fa5a74ec01 | ||
![]() |
db9f8e8c52 | ||
![]() |
680c5e5c28 | ||
![]() |
15a459d7be | ||
![]() |
55eee56da9 | ||
![]() |
eab82bd3df | ||
![]() |
1ea1c49c95 | ||
![]() |
80e7df911c | ||
![]() |
a2cac25b23 | ||
![]() |
a24679fb56 | ||
![]() |
06f25876b3 | ||
![]() |
f46df03695 | ||
![]() |
f76f091096 | ||
![]() |
9e8debd4c9 | ||
![]() |
90d2cc9043 | ||
![]() |
bdf86c2552 | ||
![]() |
4dcc1812c6 | ||
![]() |
648692977d | ||
![]() |
6e7650b59a | ||
![]() |
99379ce244 | ||
![]() |
4a75aa1818 | ||
![]() |
1825629331 | ||
![]() |
15c9b6f72f | ||
![]() |
fa769014fc | ||
![]() |
731ed4c06d | ||
![]() |
c19c6afc76 | ||
![]() |
331edbacff | ||
![]() |
e7ad8d294d | ||
![]() |
1f67c9984c | ||
![]() |
7750a86555 | ||
![]() |
f7724231e3 | ||
![]() |
09d45fc7cc | ||
![]() |
c2a81243bf | ||
![]() |
7799b89e8d | ||
![]() |
6b88de19d2 | ||
![]() |
7347b930ea | ||
![]() |
a3daf39877 | ||
![]() |
75fcb2468f | ||
![]() |
c15f844727 | ||
![]() |
023ac1c536 | ||
![]() |
bfd1ba1ad6 | ||
![]() |
b9a99796d0 | ||
![]() |
334844b4f1 | ||
![]() |
d40083a859 | ||
![]() |
ae41e33b68 | ||
![]() |
ef63985738 | ||
![]() |
8823d7f8d9 | ||
![]() |
690f4ab965 | ||
![]() |
d401a6f631 | ||
![]() |
2179afad5e | ||
![]() |
24941ad54c | ||
![]() |
552123a9f1 | ||
![]() |
47fc3ebda4 | ||
![]() |
9774a659b0 | ||
![]() |
2e4a6de4e7 |
@ -27,11 +27,8 @@ func main() {
|
|||||||
)
|
)
|
||||||
if flagRunNightly {
|
if flagRunNightly {
|
||||||
var version badversion.Version
|
var version badversion.Version
|
||||||
version, err = build_shared.ReadTagVersionRev()
|
version, err = build_shared.ReadTagVersion()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if version.PreReleaseIdentifier == "" {
|
|
||||||
version.Patch++
|
|
||||||
}
|
|
||||||
versionStr = version.String()
|
versionStr = version.String()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -102,12 +102,12 @@ func NewWithOptions(options Options) (N.Dialer, error) {
|
|||||||
}
|
}
|
||||||
dnsQueryOptions.Transport = transport
|
dnsQueryOptions.Transport = transport
|
||||||
resolveFallbackDelay = time.Duration(dialOptions.FallbackDelay)
|
resolveFallbackDelay = time.Duration(dialOptions.FallbackDelay)
|
||||||
} else if options.NewDialer {
|
|
||||||
return nil, E.New("missing domain resolver for domain server address")
|
|
||||||
} else {
|
} else {
|
||||||
transports := dnsTransport.Transports()
|
transports := dnsTransport.Transports()
|
||||||
if len(transports) < 2 {
|
if len(transports) < 2 {
|
||||||
dnsQueryOptions.Transport = dnsTransport.Default()
|
dnsQueryOptions.Transport = dnsTransport.Default()
|
||||||
|
} else if options.NewDialer {
|
||||||
|
return nil, E.New("missing domain resolver for domain server address")
|
||||||
} else {
|
} else {
|
||||||
deprecated.Report(options.Context, deprecated.OptionMissingDomainResolver)
|
deprecated.Report(options.Context, deprecated.OptionMissingDomainResolver)
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,8 @@ func TruncateDNSMessage(request *dns.Msg, response *dns.Msg, headroom int) (*buf
|
|||||||
}
|
}
|
||||||
responseLen := response.Len()
|
responseLen := response.Len()
|
||||||
if responseLen > maxLen {
|
if responseLen > maxLen {
|
||||||
|
copyResponse := *response
|
||||||
|
response = ©Response
|
||||||
response.Truncate(maxLen)
|
response.Truncate(maxLen)
|
||||||
}
|
}
|
||||||
buffer := buf.NewSize(headroom*2 + 1 + responseLen)
|
buffer := buf.NewSize(headroom*2 + 1 + responseLen)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
icon: material/alert-decagram
|
icon: material/alert-decagram
|
||||||
---
|
---
|
||||||
|
|
||||||
#### 1.12.0-alpha.21
|
#### 1.12.0-alpha.23
|
||||||
|
|
||||||
* Fixes and improvements
|
* Fixes and improvements
|
||||||
|
|
||||||
|
2
go.mod
2
go.mod
@ -35,7 +35,7 @@ require (
|
|||||||
github.com/sagernet/sing-tun v0.6.2-0.20250319123703-35b5747b44ec
|
github.com/sagernet/sing-tun v0.6.2-0.20250319123703-35b5747b44ec
|
||||||
github.com/sagernet/sing-vmess v0.2.0
|
github.com/sagernet/sing-vmess v0.2.0
|
||||||
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7
|
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7
|
||||||
github.com/sagernet/tailscale v1.80.3-mod.0
|
github.com/sagernet/tailscale v1.80.3-mod.2
|
||||||
github.com/sagernet/utls v1.6.7
|
github.com/sagernet/utls v1.6.7
|
||||||
github.com/sagernet/wireguard-go v0.0.1-beta.5
|
github.com/sagernet/wireguard-go v0.0.1-beta.5
|
||||||
github.com/sagernet/ws v0.0.0-20231204124109-acfe8907c854
|
github.com/sagernet/ws v0.0.0-20231204124109-acfe8907c854
|
||||||
|
4
go.sum
4
go.sum
@ -196,8 +196,8 @@ github.com/sagernet/sing-vmess v0.2.0 h1:pCMGUXN2k7RpikQV65/rtXtDHzb190foTfF9IGT
|
|||||||
github.com/sagernet/sing-vmess v0.2.0/go.mod h1:jDAZ0A0St1zVRkyvhAPRySOFfhC+4SQtO5VYyeFotgA=
|
github.com/sagernet/sing-vmess v0.2.0/go.mod h1:jDAZ0A0St1zVRkyvhAPRySOFfhC+4SQtO5VYyeFotgA=
|
||||||
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 h1:DImB4lELfQhplLTxeq2z31Fpv8CQqqrUwTbrIRumZqQ=
|
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 h1:DImB4lELfQhplLTxeq2z31Fpv8CQqqrUwTbrIRumZqQ=
|
||||||
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7/go.mod h1:FP9X2xjT/Az1EsG/orYYoC+5MojWnuI7hrffz8fGwwo=
|
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7/go.mod h1:FP9X2xjT/Az1EsG/orYYoC+5MojWnuI7hrffz8fGwwo=
|
||||||
github.com/sagernet/tailscale v1.80.3-mod.0 h1:oHIdivbR/yxoiA9d3a2rRlhYn2shY9XVF35Rr8jW508=
|
github.com/sagernet/tailscale v1.80.3-mod.2 h1:hT0CI74q727EuCcgQ+T4pvon8V0aoi4vTAxah7GsNMQ=
|
||||||
github.com/sagernet/tailscale v1.80.3-mod.0/go.mod h1:EBxXsWu4OH2ELbQLq32WoBeIubG8KgDrg4/Oaxjs6lI=
|
github.com/sagernet/tailscale v1.80.3-mod.2/go.mod h1:EBxXsWu4OH2ELbQLq32WoBeIubG8KgDrg4/Oaxjs6lI=
|
||||||
github.com/sagernet/utls v1.6.7 h1:Ep3+aJ8FUGGta+II2IEVNUc3EDhaRCZINWkj/LloIA8=
|
github.com/sagernet/utls v1.6.7 h1:Ep3+aJ8FUGGta+II2IEVNUc3EDhaRCZINWkj/LloIA8=
|
||||||
github.com/sagernet/utls v1.6.7/go.mod h1:Uua1TKO/FFuAhLr9rkaVnnrTmmiItzDjv1BUb2+ERwM=
|
github.com/sagernet/utls v1.6.7/go.mod h1:Uua1TKO/FFuAhLr9rkaVnnrTmmiItzDjv1BUb2+ERwM=
|
||||||
github.com/sagernet/wireguard-go v0.0.1-beta.5 h1:aBEsxJUMEONwOZqKPIkuAcv4zJV5p6XlzEN04CF0FXc=
|
github.com/sagernet/wireguard-go v0.0.1-beta.5 h1:aBEsxJUMEONwOZqKPIkuAcv4zJV5p6XlzEN04CF0FXc=
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
E "github.com/sagernet/sing/common/exceptions"
|
||||||
"github.com/sagernet/sing/common/json"
|
"github.com/sagernet/sing/common/json"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -31,7 +32,7 @@ func (o *Options) UnmarshalJSONContext(ctx context.Context, content []byte) erro
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
o.RawMessage = content
|
o.RawMessage = content
|
||||||
return nil
|
return checkOptions(o)
|
||||||
}
|
}
|
||||||
|
|
||||||
type LogOptions struct {
|
type LogOptions struct {
|
||||||
@ -43,3 +44,52 @@ type LogOptions struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type StubOptions struct{}
|
type StubOptions struct{}
|
||||||
|
|
||||||
|
func checkOptions(options *Options) error {
|
||||||
|
err := checkInbounds(options.Inbounds)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = checkOutbounds(options.Outbounds, options.Endpoints)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkInbounds(inbounds []Inbound) error {
|
||||||
|
seen := make(map[string]bool)
|
||||||
|
for _, inbound := range inbounds {
|
||||||
|
if inbound.Tag == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if seen[inbound.Tag] {
|
||||||
|
return E.New("duplicate inbound tag: ", inbound.Tag)
|
||||||
|
}
|
||||||
|
seen[inbound.Tag] = true
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkOutbounds(outbounds []Outbound, endpoints []Endpoint) error {
|
||||||
|
seen := make(map[string]bool)
|
||||||
|
for _, outbound := range outbounds {
|
||||||
|
if outbound.Tag == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if seen[outbound.Tag] {
|
||||||
|
return E.New("duplicate outbound/endpoint tag: ", outbound.Tag)
|
||||||
|
}
|
||||||
|
seen[outbound.Tag] = true
|
||||||
|
}
|
||||||
|
for _, endpoint := range endpoints {
|
||||||
|
if endpoint.Tag == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if seen[endpoint.Tag] {
|
||||||
|
return E.New("duplicate outbound/endpoint tag: ", endpoint.Tag)
|
||||||
|
}
|
||||||
|
seen[endpoint.Tag] = true
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -2,8 +2,10 @@ package tailscale
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/tls"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"net/http"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
@ -147,6 +149,17 @@ func NewEndpoint(ctx context.Context, router adapter.Router, logger log.ContextL
|
|||||||
return dnsRouter.Lookup(ctx, host, outboundDialer.(dialer.ResolveDialer).QueryOptions())
|
return dnsRouter.Lookup(ctx, host, outboundDialer.(dialer.ResolveDialer).QueryOptions())
|
||||||
},
|
},
|
||||||
DNS: &dnsConfigurtor{},
|
DNS: &dnsConfigurtor{},
|
||||||
|
HTTPClient: &http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
ForceAttemptHTTP2: true,
|
||||||
|
DialContext: func(ctx context.Context, network, address string) (net.Conn, error) {
|
||||||
|
return outboundDialer.DialContext(ctx, network, M.ParseSocksaddr(address))
|
||||||
|
},
|
||||||
|
TLSClientConfig: &tls.Config{
|
||||||
|
RootCAs: adapter.RootPoolFromContext(ctx),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return &Endpoint{
|
return &Endpoint{
|
||||||
Adapter: endpoint.NewAdapter(C.TypeTailscale, tag, []string{N.NetworkTCP, N.NetworkUDP}, nil),
|
Adapter: endpoint.NewAdapter(C.TypeTailscale, tag, []string{N.NetworkTCP, N.NetworkUDP}, nil),
|
||||||
@ -446,6 +459,10 @@ func (t *Endpoint) NewPacketConnectionEx(ctx context.Context, conn N.PacketConn,
|
|||||||
t.router.RoutePacketConnectionEx(ctx, conn, metadata, onClose)
|
t.router.RoutePacketConnectionEx(ctx, conn, metadata, onClose)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Endpoint) Server() *tsnet.Server {
|
||||||
|
return t.server
|
||||||
|
}
|
||||||
|
|
||||||
func addressFromAddr(destination netip.Addr) tcpip.Address {
|
func addressFromAddr(destination netip.Addr) tcpip.Address {
|
||||||
if destination.Is6() {
|
if destination.Is6() {
|
||||||
return tcpip.AddrFrom16(destination.As16())
|
return tcpip.AddrFrom16(destination.As16())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user