Compare commits

..

106 Commits

Author SHA1 Message Date
世界
2eded383c2
documentation: Bump version 2025-06-14 16:21:47 +08:00
Restia-Ashbell
eb17a0d06a
Add ECH support for uTLS 2025-06-14 16:21:31 +08:00
世界
8cd8d7bd9a
Improve TLS fragments 2025-06-14 16:21:31 +08:00
世界
1542c29872
Add cache support for ssm-api 2025-06-14 16:21:31 +08:00
世界
045a0c23c3
Fix service will not be closed 2025-06-14 16:21:31 +08:00
世界
22191762cf
Add loopback address support for tun 2025-06-14 16:21:31 +08:00
世界
ded6fb8657
documentation: Bump version 2025-06-14 16:21:16 +08:00
世界
8f4e62b177
release: Update Go to 1.24.4 2025-06-14 16:21:16 +08:00
世界
eb45c1ea25
Fix tproxy listener 2025-06-14 16:21:16 +08:00
世界
1eaf2c9829
Fix systemd package 2025-06-14 16:21:16 +08:00
世界
ba1496aaf1
Fix missing home for derp service 2025-06-14 16:21:15 +08:00
Zero Clover
b6df239074
documentation: Fix services 2025-06-14 16:21:15 +08:00
世界
9c7cd68e02
Fix dns.client_subnet ignored 2025-06-14 16:21:15 +08:00
世界
1ac52f7932
documentation: Minor fixes 2025-06-14 16:21:15 +08:00
世界
e5f99e153b
Fix tailscale forward 2025-06-14 16:21:15 +08:00
世界
66c2f0b2d7
Minor fixes 2025-06-14 16:21:15 +08:00
世界
4d5adfd305
Add SSM API service 2025-06-14 16:21:14 +08:00
世界
6d37d2ed41
Add resolved service and DNS server 2025-06-14 16:21:14 +08:00
世界
db232b9f6e
Add DERP service 2025-06-14 16:21:14 +08:00
世界
e213ad276f
Add service component type 2025-06-14 16:21:13 +08:00
世界
b3e7611ffd
Fix tproxy tcp control 2025-06-14 16:21:13 +08:00
愚者
41028dd4a9
release: Fix build tags for android
Signed-off-by: 愚者 <11926619+FansChou@users.noreply.github.com>
2025-06-14 16:21:13 +08:00
世界
612b42e023
prevent creation of bind and mark controls on unsupported platforms 2025-06-14 16:21:13 +08:00
PuerNya
b2bc2609ce
documentation: Fix description of reject DNS action behavior 2025-06-14 16:21:13 +08:00
Restia-Ashbell
8f5f9df059
Fix TLS record fragment 2025-06-14 16:21:12 +08:00
世界
fcafbe8abc
Add missing accept_routes option for Tailscale 2025-06-14 16:21:12 +08:00
世界
c7d826d210
Add TLS record fragment support 2025-06-14 16:21:12 +08:00
世界
0bc1956f57
Fix set edns0 client subnet 2025-06-14 16:21:11 +08:00
世界
510311622c
Update minor dependencies 2025-06-14 16:21:11 +08:00
世界
24030fe7be
Update certmagic and providers 2025-06-14 16:21:11 +08:00
世界
699ce764f6
Update protobuf and grpc 2025-06-14 16:21:11 +08:00
世界
a7781e309c
Add control options for listeners 2025-06-14 16:21:10 +08:00
世界
efcc128765
Update quic-go to v0.52.0 2025-06-14 16:21:10 +08:00
世界
17502b8397
Update utls to v1.7.2 2025-06-14 16:21:10 +08:00
世界
c77ad26bde
Handle EDNS version downgrade 2025-06-14 16:20:57 +08:00
世界
f5557fe89e
documentation: Fix anytls padding scheme description 2025-06-14 16:20:57 +08:00
安容
43498f63a2
Report invalid DNS address early 2025-06-14 16:20:57 +08:00
世界
f00b13b5dd
Fix wireguard listen_port 2025-06-14 16:20:56 +08:00
世界
f84edb48a9
clash-api: Add more meta api 2025-06-14 16:20:56 +08:00
世界
561f68c3fe
Fix DNS lookup 2025-06-14 16:20:56 +08:00
世界
c0765dfb45
Fix fetch ECH configs 2025-06-14 16:20:55 +08:00
reletor
a04abefca2
documentation: Minor fixes 2025-06-14 16:20:55 +08:00
caelansar
de72aa398b
Fix callback deletion in UDP transport 2025-06-14 16:20:55 +08:00
世界
66a23959be
documentation: Try to make the play review happy 2025-06-14 16:20:55 +08:00
世界
61b013644f
Fix missing handling of legacy domain_strategy options 2025-06-14 16:20:55 +08:00
世界
78faeec0a0
Improve local DNS server 2025-06-14 16:20:54 +08:00
anytls
b0d5b58742
Update anytls
Co-authored-by: anytls <anytls>
2025-06-14 16:20:28 +08:00
世界
1819d0fac8
Fix DNS dialer 2025-06-14 16:20:28 +08:00
世界
9a647dc508
release: Skip override version for iOS 2025-06-14 16:20:27 +08:00
iikira
9a0940fbbc
Fix UDP DNS server crash
Signed-off-by: iikira <i2@mail.iikira.com>
2025-06-14 16:20:27 +08:00
ReleTor
1391a0f906
Fix fetch ECH configs 2025-06-14 16:20:27 +08:00
世界
22473aa24c
Allow direct outbounds without domain_resolver 2025-06-14 16:20:26 +08:00
世界
1894084680
Fix Tailscale dialer 2025-06-14 16:20:26 +08:00
dyhkwong
1d1fc9ae17
Fix DNS over QUIC stream close 2025-06-14 16:20:26 +08:00
anytls
e667917766
Update anytls
Co-authored-by: anytls <anytls>
2025-06-14 16:20:26 +08:00
Rambling2076
216e824b35
Fix missing with_tailscale in Dockerfile
Signed-off-by: Rambling2076 <Rambling2076@proton.me>
2025-06-14 16:20:25 +08:00
世界
e37f000848
Fail when default DNS server not found 2025-06-14 16:20:25 +08:00
世界
f752ddacf8
Update gVisor to 20250319.0 2025-06-14 16:20:25 +08:00
世界
15ce27ca9b
Explicitly reject detour to empty direct outbounds 2025-06-14 16:20:24 +08:00
世界
784b0e805b
Add netns support 2025-06-14 16:20:24 +08:00
世界
c2d62bd5d7
Add wildcard name support for predefined records 2025-06-14 16:20:24 +08:00
世界
b499c27724
Remove map usage in options 2025-06-14 16:20:24 +08:00
世界
a56232b377
Fix unhandled DNS loop 2025-06-14 16:20:24 +08:00
世界
d1b57ead83
Add wildcard-sni support for shadow-tls inbound 2025-06-14 16:20:23 +08:00
k9982874
b60a5cc75e
Add ntp protocol sniffing 2025-06-14 16:20:07 +08:00
世界
55d37fedd2
option: Fix marshal legacy DNS options 2025-06-14 16:20:07 +08:00
世界
5a36763387
Make domain_resolver optional when only one DNS server is configured 2025-06-14 16:20:07 +08:00
世界
a078e68f56
Fix DNS lookup context pollution 2025-06-14 16:20:06 +08:00
世界
9ec03fd8ab
Fix http3 DNS server connecting to wrong address 2025-06-14 16:20:06 +08:00
Restia-Ashbell
5081bbbf2f
documentation: Fix typo 2025-06-14 16:20:05 +08:00
anytls
3507a88437
Update sing-anytls
Co-authored-by: anytls <anytls>
2025-06-14 16:20:05 +08:00
k9982874
86fbfe1a54
Fix hosts DNS server 2025-06-14 16:20:05 +08:00
世界
8b642b6b1b
Fix UDP DNS server crash 2025-06-14 16:20:05 +08:00
世界
272a2c4af3
documentation: Fix missing ip_accept_any DNS rule option 2025-06-14 16:20:04 +08:00
世界
c506eb4069
Fix anytls dialer usage 2025-06-14 16:20:04 +08:00
世界
50acc853bd
Move predefined DNS server to rule action 2025-06-14 16:20:03 +08:00
世界
808c29ce2c
Fix domain resolver on direct outbound 2025-06-14 16:20:03 +08:00
Zephyruso
c628569677
Fix missing AnyTLS display name 2025-06-14 16:20:02 +08:00
anytls
175d135298
Update sing-anytls
Co-authored-by: anytls <anytls>
2025-06-14 16:20:02 +08:00
Estel
07d3f4d939
documentation: Fix typo
Signed-off-by: Estel <callmebedrockdigger@gmail.com>
2025-06-14 16:20:02 +08:00
TargetLocked
73c2363e06
Fix parsing legacy DNS options 2025-06-14 16:20:02 +08:00
世界
3e5940e557
Fix DNS fallback 2025-06-14 16:20:01 +08:00
世界
09fbc52261
documentation: Fix missing hosts DNS server 2025-06-14 16:20:01 +08:00
anytls
d1283b301d
Add MinIdleSession option to AnyTLS outbound
Co-authored-by: anytls <anytls>
2025-06-14 16:20:00 +08:00
ReleTor
841b4403f4
documentation: Minor fixes 2025-06-14 16:20:00 +08:00
libtry486
bb537f88f0
documentation: Fix typo
fix typo

Signed-off-by: libtry486 <89328481+libtry486@users.noreply.github.com>
2025-06-14 16:20:00 +08:00
Alireza Ahmadi
97c37b78d8
Fix Outbound deadlock 2025-06-14 16:20:00 +08:00
世界
5bcb604024
documentation: Fix AnyTLS doc 2025-06-14 16:19:59 +08:00
anytls
0bd9358262
Add AnyTLS protocol 2025-06-14 16:19:59 +08:00
世界
bdcd1baa4d
Migrate to stdlib ECH support 2025-06-14 16:19:58 +08:00
世界
b2484f5c75
Add fallback local DNS server for iOS 2025-06-14 16:19:58 +08:00
世界
d0c14253e7
Get darwin local DNS server from libresolv 2025-06-14 16:19:58 +08:00
世界
22fa664ce2
Improve resolve action 2025-06-14 16:19:58 +08:00
世界
a4bffdddce
Add back port hopping to hysteria 1 2025-06-14 16:19:57 +08:00
xchacha20-poly1305
c82613aeba
Remove single quotes of raw Moziila certs 2025-06-14 16:19:57 +08:00
世界
9b8cda26e5
Add Tailscale endpoint 2025-06-14 16:19:56 +08:00
世界
69de96ce54
Build legacy binaries with latest Go 2025-06-14 16:19:56 +08:00
世界
64d9a709ce
documentation: Remove outdated icons 2025-06-14 16:19:56 +08:00
世界
2cb382b199
documentation: Certificate store 2025-06-14 16:19:56 +08:00
世界
0f91ebc530
documentation: TLS fragment 2025-06-14 16:19:56 +08:00
世界
a7123d836c
documentation: Outbound domain resolver 2025-06-14 16:19:55 +08:00
世界
cc6164825b
documentation: Refactor DNS 2025-06-14 16:19:54 +08:00
世界
4a93a605b8
Add certificate store 2025-06-14 16:19:54 +08:00
世界
aff0e4117e
Add TLS fragment support 2025-06-14 16:19:54 +08:00
世界
589a4dda60
refactor: Outbound domain resolver 2025-06-14 16:19:54 +08:00
世界
f0a0c0f1b2
refactor: DNS 2025-06-14 16:19:54 +08:00
7 changed files with 33 additions and 171 deletions

View File

@ -5,7 +5,7 @@ import (
"os"
"strings"
"github.com/sagernet/sing-box/common/convertor/adguard"
"github.com/sagernet/sing-box/cmd/sing-box/internal/convertor/adguard"
"github.com/sagernet/sing-box/common/srs"
C "github.com/sagernet/sing-box/constant"
"github.com/sagernet/sing-box/log"
@ -54,7 +54,7 @@ func convertRuleSet(sourcePath string) error {
var rules []option.HeadlessRule
switch flagRuleSetConvertType {
case "adguard":
rules, err = adguard.ToOptions(reader, log.StdLogger())
rules, err = adguard.Convert(reader)
case "":
return E.New("source type is required")
default:

View File

@ -6,10 +6,7 @@ import (
"strings"
"github.com/sagernet/sing-box/common/srs"
C "github.com/sagernet/sing-box/constant"
"github.com/sagernet/sing-box/log"
"github.com/sagernet/sing-box/option"
E "github.com/sagernet/sing/common/exceptions"
"github.com/sagernet/sing/common/json"
"github.com/spf13/cobra"
@ -53,11 +50,6 @@ func decompileRuleSet(sourcePath string) error {
if err != nil {
return err
}
if hasRule(ruleSet.Options.Rules, func(rule option.DefaultHeadlessRule) bool {
return len(rule.AdGuardDomain) > 0
}) {
return E.New("unable to decompile binary AdGuard rules to rule-set.")
}
var outputPath string
if flagRuleSetDecompileOutput == flagRuleSetDecompileDefaultOutput {
if strings.HasSuffix(sourcePath, ".srs") {
@ -83,19 +75,3 @@ func decompileRuleSet(sourcePath string) error {
outputFile.Close()
return nil
}
func hasRule(rules []option.HeadlessRule, cond func(rule option.DefaultHeadlessRule) bool) bool {
for _, rule := range rules {
switch rule.Type {
case C.RuleTypeDefault:
if cond(rule.DefaultOptions) {
return true
}
case C.RuleTypeLogical:
if hasRule(rule.LogicalOptions.Rules, cond) {
return true
}
}
}
return false
}

View File

@ -2,7 +2,6 @@ package adguard
import (
"bufio"
"bytes"
"io"
"net/netip"
"os"
@ -10,10 +9,10 @@ import (
"strings"
C "github.com/sagernet/sing-box/constant"
"github.com/sagernet/sing-box/log"
"github.com/sagernet/sing-box/option"
"github.com/sagernet/sing/common"
E "github.com/sagernet/sing/common/exceptions"
"github.com/sagernet/sing/common/logger"
M "github.com/sagernet/sing/common/metadata"
)
@ -28,7 +27,7 @@ type agdguardRuleLine struct {
isImportant bool
}
func ToOptions(reader io.Reader, logger logger.Logger) ([]option.HeadlessRule, error) {
func Convert(reader io.Reader) ([]option.HeadlessRule, error) {
scanner := bufio.NewScanner(reader)
var (
ruleLines []agdguardRuleLine
@ -37,7 +36,7 @@ func ToOptions(reader io.Reader, logger logger.Logger) ([]option.HeadlessRule, e
parseLine:
for scanner.Scan() {
ruleLine := scanner.Text()
if ruleLine == "" || strings.HasPrefix(ruleLine, "!") || strings.HasPrefix(ruleLine, "#") {
if ruleLine == "" || ruleLine[0] == '!' || ruleLine[0] == '#' {
continue
}
originRuleLine := ruleLine
@ -93,7 +92,7 @@ parseLine:
}
if !ignored {
ignoredLines++
logger.Debug("ignored unsupported rule with modifier: ", paramParts[0], ": ", ruleLine)
log.Debug("ignored unsupported rule with modifier: ", paramParts[0], ": ", ruleLine)
continue parseLine
}
}
@ -121,7 +120,7 @@ parseLine:
ruleLine = ruleLine[1 : len(ruleLine)-1]
if ignoreIPCIDRRegexp(ruleLine) {
ignoredLines++
logger.Debug("ignored unsupported rule with IPCIDR regexp: ", ruleLine)
log.Debug("ignored unsupported rule with IPCIDR regexp: ", ruleLine)
continue
}
isRegexp = true
@ -131,27 +130,17 @@ parseLine:
}
if strings.Contains(ruleLine, "/") {
ignoredLines++
logger.Debug("ignored unsupported rule with path: ", ruleLine)
log.Debug("ignored unsupported rule with path: ", ruleLine)
continue
}
if strings.Contains(ruleLine, "?") || strings.Contains(ruleLine, "&") {
if strings.Contains(ruleLine, "##") {
ignoredLines++
logger.Debug("ignored unsupported rule with query: ", ruleLine)
log.Debug("ignored unsupported rule with element hiding: ", ruleLine)
continue
}
if strings.Contains(ruleLine, "[") || strings.Contains(ruleLine, "]") {
if strings.Contains(ruleLine, "#$#") {
ignoredLines++
logger.Debug("ignored unsupported cosmetic filter: ", ruleLine)
continue
}
if strings.Contains(ruleLine, "(") || strings.Contains(ruleLine, ")") {
ignoredLines++
logger.Debug("ignored unsupported cosmetic filter: ", ruleLine)
continue
}
if strings.Contains(ruleLine, "~") {
ignoredLines++
logger.Debug("ignored unsupported rule modifier: ", ruleLine)
log.Debug("ignored unsupported rule with element hiding: ", ruleLine)
continue
}
var domainCheck string
@ -162,7 +151,7 @@ parseLine:
}
if ruleLine == "" {
ignoredLines++
logger.Debug("ignored unsupported rule with empty domain", originRuleLine)
log.Debug("ignored unsupported rule with empty domain", originRuleLine)
continue
} else {
domainCheck = strings.ReplaceAll(domainCheck, "*", "x")
@ -170,13 +159,13 @@ parseLine:
_, ipErr := parseADGuardIPCIDRLine(ruleLine)
if ipErr == nil {
ignoredLines++
logger.Debug("ignored unsupported rule with IPCIDR: ", ruleLine)
log.Debug("ignored unsupported rule with IPCIDR: ", ruleLine)
continue
}
if M.ParseSocksaddr(domainCheck).Port != 0 {
logger.Debug("ignored unsupported rule with port: ", ruleLine)
log.Debug("ignored unsupported rule with port: ", ruleLine)
} else {
logger.Debug("ignored unsupported rule with invalid domain: ", ruleLine)
log.Debug("ignored unsupported rule with invalid domain: ", ruleLine)
}
ignoredLines++
continue
@ -294,110 +283,10 @@ parseLine:
},
}
}
logger.Info("parsed rules: ", len(ruleLines), "/", len(ruleLines)+ignoredLines)
log.Info("parsed rules: ", len(ruleLines), "/", len(ruleLines)+ignoredLines)
return []option.HeadlessRule{currentRule}, nil
}
var ErrInvalid = E.New("invalid binary AdGuard rule-set")
func FromOptions(rules []option.HeadlessRule) ([]byte, error) {
if len(rules) != 1 {
return nil, ErrInvalid
}
rule := rules[0]
var (
importantDomain []string
importantDomainRegex []string
importantExcludeDomain []string
importantExcludeDomainRegex []string
domain []string
domainRegex []string
excludeDomain []string
excludeDomainRegex []string
)
parse:
for {
switch rule.Type {
case C.RuleTypeLogical:
if !(len(rule.LogicalOptions.Rules) == 2 && rule.LogicalOptions.Rules[0].Type == C.RuleTypeDefault) {
return nil, ErrInvalid
}
if rule.LogicalOptions.Mode == C.LogicalTypeAnd && rule.LogicalOptions.Rules[0].DefaultOptions.Invert {
if len(importantExcludeDomain) == 0 && len(importantExcludeDomainRegex) == 0 {
importantExcludeDomain = rule.LogicalOptions.Rules[0].DefaultOptions.AdGuardDomain
importantExcludeDomainRegex = rule.LogicalOptions.Rules[0].DefaultOptions.DomainRegex
if len(importantExcludeDomain)+len(importantExcludeDomainRegex) == 0 {
return nil, ErrInvalid
}
} else {
excludeDomain = rule.LogicalOptions.Rules[0].DefaultOptions.AdGuardDomain
excludeDomainRegex = rule.LogicalOptions.Rules[0].DefaultOptions.DomainRegex
if len(excludeDomain)+len(excludeDomainRegex) == 0 {
return nil, ErrInvalid
}
}
} else if rule.LogicalOptions.Mode == C.LogicalTypeOr && !rule.LogicalOptions.Rules[0].DefaultOptions.Invert {
importantDomain = rule.LogicalOptions.Rules[0].DefaultOptions.AdGuardDomain
importantDomainRegex = rule.LogicalOptions.Rules[0].DefaultOptions.DomainRegex
if len(importantDomain)+len(importantDomainRegex) == 0 {
return nil, ErrInvalid
}
} else {
return nil, ErrInvalid
}
rule = rule.LogicalOptions.Rules[1]
case C.RuleTypeDefault:
domain = rule.DefaultOptions.AdGuardDomain
domainRegex = rule.DefaultOptions.DomainRegex
if len(domain)+len(domainRegex) == 0 {
return nil, ErrInvalid
}
break parse
}
}
var output bytes.Buffer
for _, ruleLine := range importantDomain {
output.WriteString(ruleLine)
output.WriteString("$important\n")
}
for _, ruleLine := range importantDomainRegex {
output.WriteString("/")
output.WriteString(ruleLine)
output.WriteString("/$important\n")
}
for _, ruleLine := range importantExcludeDomain {
output.WriteString("@@")
output.WriteString(ruleLine)
output.WriteString("$important\n")
}
for _, ruleLine := range importantExcludeDomainRegex {
output.WriteString("@@/")
output.WriteString(ruleLine)
output.WriteString("/$important\n")
}
for _, ruleLine := range domain {
output.WriteString(ruleLine)
output.WriteString("\n")
}
for _, ruleLine := range domainRegex {
output.WriteString("/")
output.WriteString(ruleLine)
output.WriteString("/\n")
}
for _, ruleLine := range excludeDomain {
output.WriteString("@@")
output.WriteString(ruleLine)
output.WriteString("\n")
}
for _, ruleLine := range excludeDomainRegex {
output.WriteString("@@/")
output.WriteString(ruleLine)
output.WriteString("/\n")
}
return output.Bytes(), nil
}
func ignoreIPCIDRRegexp(ruleLine string) bool {
if strings.HasPrefix(ruleLine, "(http?:\\/\\/)") {
ruleLine = ruleLine[12:]

View File

@ -7,15 +7,13 @@ import (
"github.com/sagernet/sing-box/adapter"
"github.com/sagernet/sing-box/route/rule"
"github.com/sagernet/sing/common/logger"
"github.com/stretchr/testify/require"
)
func TestConverter(t *testing.T) {
t.Parallel()
ruleString := `||sagernet.org^$important
@@|sing-box.sagernet.org^$important
rules, err := Convert(strings.NewReader(`
||example.org^
|example.com^
example.net^
@ -23,9 +21,10 @@ example.net^
||example.edu.tw^
|example.gov
example.arpa
@@|sagernet.example.org^
`
rules, err := ToOptions(strings.NewReader(ruleString), logger.NOP())
@@|sagernet.example.org|
||sagernet.org^$important
@@|sing-box.sagernet.org^$important
`))
require.NoError(t, err)
require.Len(t, rules, 1)
rule, err := rule.NewHeadlessRule(context.Background(), rules[0])
@ -76,18 +75,15 @@ example.arpa
Domain: domain,
}), domain)
}
ruleFromOptions, err := FromOptions(rules)
require.NoError(t, err)
require.Equal(t, ruleString, string(ruleFromOptions))
}
func TestHosts(t *testing.T) {
t.Parallel()
rules, err := ToOptions(strings.NewReader(`
rules, err := Convert(strings.NewReader(`
127.0.0.1 localhost
::1 localhost #[IPv6]
0.0.0.0 google.com
`), logger.NOP())
`))
require.NoError(t, err)
require.Len(t, rules, 1)
rule, err := rule.NewHeadlessRule(context.Background(), rules[0])
@ -114,10 +110,10 @@ func TestHosts(t *testing.T) {
func TestSimpleHosts(t *testing.T) {
t.Parallel()
rules, err := ToOptions(strings.NewReader(`
rules, err := Convert(strings.NewReader(`
example.com
www.example.org
`), logger.NOP())
`))
require.NoError(t, err)
require.Len(t, rules, 1)
rule, err := rule.NewHeadlessRule(context.Background(), rules[0])

View File

@ -215,15 +215,16 @@ func readDefaultRule(reader varbin.Reader, recover bool) (rule option.DefaultHea
case ruleItemWIFIBSSID:
rule.WIFIBSSID, err = readRuleItemString(reader)
case ruleItemAdGuardDomain:
if recover {
err = E.New("unable to decompile binary AdGuard rules to rule-set")
return
}
var matcher *domain.AdGuardMatcher
matcher, err = domain.ReadAdGuardMatcher(reader)
if err != nil {
return
}
rule.AdGuardDomainMatcher = matcher
if recover {
rule.AdGuardDomain = matcher.Dump()
}
case ruleItemNetworkType:
rule.NetworkType, err = readRuleItemUint8[option.InterfaceType](reader)
case ruleItemNetworkIsExpensive:

2
go.mod
View File

@ -34,7 +34,7 @@ require (
github.com/sagernet/sing-shadowsocks v0.2.8
github.com/sagernet/sing-shadowsocks2 v0.2.1
github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11
github.com/sagernet/sing-tun v0.6.8-0.20250615093440-d1f6001b58c2
github.com/sagernet/sing-tun v0.6.7-0.20250613101921-11f18fa1f602
github.com/sagernet/sing-vmess v0.2.4-0.20250605032146-38cc72672c88
github.com/sagernet/smux v1.5.34-mod.2
github.com/sagernet/tailscale v1.80.3-mod.5

4
go.sum
View File

@ -180,8 +180,8 @@ github.com/sagernet/sing-shadowsocks2 v0.2.1 h1:dWV9OXCeFPuYGHb6IRqlSptVnSzOelnq
github.com/sagernet/sing-shadowsocks2 v0.2.1/go.mod h1:RnXS0lExcDAovvDeniJ4IKa2IuChrdipolPYWBv9hWQ=
github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11 h1:tK+75l64tm9WvEFrYRE1t0YxoFdWQqw/h7Uhzj0vJ+w=
github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11/go.mod h1:sWqKnGlMipCHaGsw1sTTlimyUpgzP4WP3pjhCsYt9oA=
github.com/sagernet/sing-tun v0.6.8-0.20250615093440-d1f6001b58c2 h1:leio5dGtYCKHQam+SyLszq4bbXGaxF4ElK5Aif/lUb8=
github.com/sagernet/sing-tun v0.6.8-0.20250615093440-d1f6001b58c2/go.mod h1:fisFCbC4Vfb6HqQNcwPJi2CDK2bf0Xapyz3j3t4cnHE=
github.com/sagernet/sing-tun v0.6.7-0.20250613101921-11f18fa1f602 h1:A7ghDv4GcxdZisEHgICCu6BbaxnhYoCdcGU0M0DgY9U=
github.com/sagernet/sing-tun v0.6.7-0.20250613101921-11f18fa1f602/go.mod h1:fisFCbC4Vfb6HqQNcwPJi2CDK2bf0Xapyz3j3t4cnHE=
github.com/sagernet/sing-vmess v0.2.4-0.20250605032146-38cc72672c88 h1:0pVm8sPOel+BoiCddW3pV3cKDKEaSioVTYDdTSKjyFI=
github.com/sagernet/sing-vmess v0.2.4-0.20250605032146-38cc72672c88/go.mod h1:IL8Rr+EGwuqijszZkNrEFTQDKhilEpkqFqOlvdpS6/w=
github.com/sagernet/smux v1.5.34-mod.2 h1:gkmBjIjlJ2zQKpLigOkFur5kBKdV6bNRoFu2WkltRQ4=