Compare commits

..

83 Commits

Author SHA1 Message Date
世界
f6cea5cc1e
documentation: Bump version 2025-05-11 13:02:16 +08:00
世界
f6cd6b52d1
release: Update Go to 1.24.3 2025-05-11 13:02:09 +08:00
世界
f393b1fd3f
Fix set edns0 client subnet 2025-05-11 13:02:08 +08:00
世界
64c8d8ffda
Update minor dependencies 2025-05-11 13:02:08 +08:00
世界
afa31b7e60
Update certmagic and providers 2025-05-11 13:02:08 +08:00
世界
f9e8299c0e
Update protobuf and grpc 2025-05-11 13:02:08 +08:00
世界
c83d8acd8b
Add control options for listeners 2025-05-11 13:02:08 +08:00
世界
5f8c55b011
Update quic-go to v0.51.0 2025-05-11 13:02:03 +08:00
世界
d5838a1d8f
Update utls to v1.7.0 2025-05-07 15:13:27 +08:00
世界
761598885d
Handle EDNS version downgrade 2025-05-07 15:13:27 +08:00
世界
b4f126ed7d
documentation: Fix anytls padding scheme description 2025-05-07 15:13:27 +08:00
安容
6388c2e213
Report invalid DNS address early 2025-05-07 15:13:26 +08:00
世界
c7d76c1a2f
Fix wireguard listen_port 2025-05-07 15:13:26 +08:00
世界
86362ed8fd
clash-api: Add more meta api 2025-05-07 15:13:26 +08:00
世界
63980c491f
Fix DNS lookup 2025-05-07 15:13:26 +08:00
世界
772f43633b
Fix fetch ECH configs 2025-05-07 15:13:26 +08:00
reletor
dc6ffbfb45
documentation: Minor fixes 2025-05-07 15:13:25 +08:00
caelansar
e8e5aa25ba
Fix callback deletion in UDP transport 2025-05-07 15:13:25 +08:00
世界
8d0a758cac
documentation: Try to make the play review happy 2025-05-07 15:13:24 +08:00
世界
eb30c72ecd
Fix missing handling of legacy domain_strategy options 2025-05-07 15:13:24 +08:00
世界
1a836e2658
Improve local DNS server 2025-05-07 15:13:24 +08:00
anytls
057ecd243c
Update anytls
Co-authored-by: anytls <anytls>
2025-05-07 15:13:24 +08:00
世界
6504309d1a
Fix DNS dialer 2025-05-07 15:13:24 +08:00
世界
ad03f8a294
release: Skip override version for iOS 2025-05-07 15:13:23 +08:00
iikira
62418e8562
Fix UDP DNS server crash
Signed-off-by: iikira <i2@mail.iikira.com>
2025-05-07 15:13:23 +08:00
ReleTor
6daafc3f34
Fix fetch ECH configs 2025-05-07 15:13:23 +08:00
世界
be27a43c02
Allow direct outbounds without domain_resolver 2025-05-07 15:13:23 +08:00
世界
1db007c4ae
Fix Tailscale dialer 2025-05-07 15:13:23 +08:00
dyhkwong
2c5e277a49
Fix DNS over QUIC stream close 2025-05-07 15:13:22 +08:00
anytls
a048092b1d
Update anytls
Co-authored-by: anytls <anytls>
2025-05-07 15:13:22 +08:00
Rambling2076
7216d7c7de
Fix missing with_tailscale in Dockerfile
Signed-off-by: Rambling2076 <Rambling2076@proton.me>
2025-05-07 15:13:21 +08:00
世界
38d79fa3f9
Fail when default DNS server not found 2025-05-07 15:13:21 +08:00
世界
d3bb8c5971
Update gVisor to 20250319.0 2025-05-07 15:13:21 +08:00
世界
d81fdd8401
Explicitly reject detour to empty direct outbounds 2025-05-07 15:13:21 +08:00
世界
f292280ff5
Add netns support 2025-05-07 15:13:20 +08:00
世界
452ca55091
Add wildcard name support for predefined records 2025-05-07 15:13:20 +08:00
世界
866b726b77
Remove map usage in options 2025-05-07 15:13:20 +08:00
世界
29ecb715e9
Fix unhandled DNS loop 2025-05-07 15:13:20 +08:00
世界
cf1c7c3138
Add wildcard-sni support for shadow-tls inbound 2025-05-07 15:13:19 +08:00
k9982874
c14a04f6cf
Add ntp protocol sniffing 2025-05-07 15:13:19 +08:00
世界
e5d9f40e78
option: Fix marshal legacy DNS options 2025-05-07 15:13:18 +08:00
世界
c81cb83d22
Make domain_resolver optional when only one DNS server is configured 2025-05-07 15:13:18 +08:00
世界
c22ea80cb2
Fix DNS lookup context pollution 2025-05-07 15:13:18 +08:00
世界
825a9cd726
Fix http3 DNS server connecting to wrong address 2025-05-07 15:13:17 +08:00
Restia-Ashbell
7c3263688f
documentation: Fix typo 2025-05-07 15:13:17 +08:00
anytls
22185ffd5b
Update sing-anytls
Co-authored-by: anytls <anytls>
2025-05-07 15:13:17 +08:00
k9982874
d53dae1793
Fix hosts DNS server 2025-05-07 15:13:17 +08:00
世界
a36bd4c25d
Fix UDP DNS server crash 2025-05-07 15:13:16 +08:00
世界
e93033914b
documentation: Fix missing ip_accept_any DNS rule option 2025-05-07 15:13:16 +08:00
世界
17cd4efc8d
Fix anytls dialer usage 2025-05-07 15:13:16 +08:00
世界
2ddc11918c
Move predefined DNS server to rule action 2025-05-07 15:13:15 +08:00
世界
6e4d92b9dd
Fix domain resolver on direct outbound 2025-05-07 15:13:15 +08:00
Zephyruso
a1e6f4ee55
Fix missing AnyTLS display name 2025-05-07 15:13:15 +08:00
anytls
7040d8de98
Update sing-anytls
Co-authored-by: anytls <anytls>
2025-05-07 15:13:14 +08:00
Estel
d004f3c5d4
documentation: Fix typo
Signed-off-by: Estel <callmebedrockdigger@gmail.com>
2025-05-07 15:13:14 +08:00
TargetLocked
79c8141422
Fix parsing legacy DNS options 2025-05-07 15:13:14 +08:00
世界
1295212910
Fix DNS fallback 2025-05-07 15:13:13 +08:00
世界
324b437e74
documentation: Fix missing hosts DNS server 2025-05-07 15:13:13 +08:00
anytls
6071b5690c
Add MinIdleSession option to AnyTLS outbound
Co-authored-by: anytls <anytls>
2025-05-07 15:13:13 +08:00
ReleTor
5bb58c49e2
documentation: Minor fixes 2025-05-07 15:13:12 +08:00
libtry486
c10ef770da
documentation: Fix typo
fix typo

Signed-off-by: libtry486 <89328481+libtry486@users.noreply.github.com>
2025-05-07 15:13:12 +08:00
Alireza Ahmadi
6d410cc676
Fix Outbound deadlock 2025-05-07 15:13:12 +08:00
世界
097d2984ef
documentation: Fix AnyTLS doc 2025-05-07 15:13:11 +08:00
anytls
4cb528c747
Add AnyTLS protocol 2025-05-07 15:13:11 +08:00
世界
52561dba46
Migrate to stdlib ECH support 2025-05-07 15:13:10 +08:00
世界
686e21035c
Add fallback local DNS server for iOS 2025-05-07 15:13:10 +08:00
世界
a66454f45f
Get darwin local DNS server from libresolv 2025-05-07 15:13:10 +08:00
世界
8689358c63
Improve resolve action 2025-05-07 15:13:10 +08:00
世界
942a45da98
Fix toolchain version 2025-05-07 15:13:10 +08:00
世界
5f1b064234
Add back port hopping to hysteria 1 2025-05-07 15:13:10 +08:00
xchacha20-poly1305
eb7caa2d5e
Remove single quotes of raw Moziila certs 2025-05-07 15:13:09 +08:00
世界
99c5fde40d
Add Tailscale endpoint 2025-05-07 15:13:00 +08:00
世界
16e541f50e
Build legacy binaries with latest Go 2025-05-07 15:13:00 +08:00
世界
a22849171a
documentation: Remove outdated icons 2025-05-07 15:13:00 +08:00
世界
0597a0a8d7
documentation: Certificate store 2025-05-07 15:12:59 +08:00
世界
791d9581bc
documentation: TLS fragment 2025-05-07 15:12:59 +08:00
世界
b4d9e7417a
documentation: Outbound domain resolver 2025-05-07 15:12:59 +08:00
世界
e429db2ca5
documentation: Refactor DNS 2025-05-07 15:12:59 +08:00
世界
a1b717ecea
Add certificate store 2025-05-07 15:12:59 +08:00
世界
c37b74730d
Add TLS fragment support 2025-05-07 15:12:59 +08:00
世界
6bd0a372c1
refactor: Outbound domain resolver 2025-05-07 15:12:58 +08:00
世界
6752ade2a0
refactor: DNS 2025-05-07 15:12:50 +08:00
世界
13e648e4b1
Fix set edns0 subnet 2025-05-07 15:12:17 +08:00
9 changed files with 45 additions and 22 deletions

View File

@ -46,7 +46,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ^1.24
go-version: ^1.24.3
- name: Check input version
if: github.event_name == 'workflow_dispatch'
run: |-
@ -109,7 +109,7 @@ jobs:
if: ${{ ! matrix.legacy_go }}
uses: actions/setup-go@v5
with:
go-version: ^1.24
go-version: ^1.24.3
- name: Cache Legacy Go
if: matrix.require_legacy_go
id: cache-legacy-go
@ -294,7 +294,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ^1.24
go-version: ^1.24.3
- name: Setup Android NDK
id: setup-ndk
uses: nttld/setup-ndk@v1
@ -374,7 +374,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ^1.24
go-version: ^1.24.3
- name: Setup Android NDK
id: setup-ndk
uses: nttld/setup-ndk@v1
@ -472,7 +472,7 @@ jobs:
if: matrix.if
uses: actions/setup-go@v5
with:
go-version: ^1.24
go-version: ^1.24.3
- name: Setup Xcode stable
if: matrix.if && github.ref == 'refs/heads/main-next'
run: |-

View File

@ -28,7 +28,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ^1.24
go-version: ^1.24.3
- name: golangci-lint
uses: golangci/golangci-lint-action@v6
with:

View File

@ -25,7 +25,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ^1.24
go-version: ^1.24.3
- name: Check input version
if: github.event_name == 'workflow_dispatch'
run: |-
@ -66,7 +66,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ^1.24
go-version: ^1.24.3
- name: Setup Android NDK
if: matrix.os == 'android'
uses: nttld/setup-ndk@v1

View File

@ -50,12 +50,30 @@ func (l *Listener) ListenUDP() (net.PacketConn, error) {
func (l *Listener) DialContext(dialer net.Dialer, ctx context.Context, network string, address string) (net.Conn, error) {
return ListenNetworkNamespace[net.Conn](l.listenOptions.NetNs, func() (net.Conn, error) {
if l.listenOptions.BindInterface != "" {
dialer.Control = control.Append(dialer.Control, control.BindToInterface(service.FromContext[adapter.NetworkManager](l.ctx).InterfaceFinder(), l.listenOptions.BindInterface, -1))
}
if l.listenOptions.RoutingMark != 0 {
dialer.Control = control.Append(dialer.Control, control.RoutingMark(uint32(l.listenOptions.RoutingMark)))
}
if l.listenOptions.ReuseAddr {
dialer.Control = control.Append(dialer.Control, control.ReuseAddr())
}
return dialer.DialContext(ctx, network, address)
})
}
func (l *Listener) ListenPacket(listenConfig net.ListenConfig, ctx context.Context, network string, address string) (net.PacketConn, error) {
return ListenNetworkNamespace[net.PacketConn](l.listenOptions.NetNs, func() (net.PacketConn, error) {
if l.listenOptions.BindInterface != "" {
listenConfig.Control = control.Append(listenConfig.Control, control.BindToInterface(service.FromContext[adapter.NetworkManager](l.ctx).InterfaceFinder(), l.listenOptions.BindInterface, -1))
}
if l.listenOptions.RoutingMark != 0 {
listenConfig.Control = control.Append(listenConfig.Control, control.RoutingMark(uint32(l.listenOptions.RoutingMark)))
}
if l.listenOptions.ReuseAddr {
listenConfig.Control = control.Append(listenConfig.Control, control.ReuseAddr())
}
return listenConfig.ListenPacket(ctx, network, address)
})
}

View File

@ -105,7 +105,7 @@ func (c *Client) Exchange(ctx context.Context, transport adapter.DNSTransport, m
}
question := message.Question[0]
if options.ClientSubnet.IsValid() {
message = SetClientSubnet(message, options.ClientSubnet, true)
message = SetClientSubnet(message, options.ClientSubnet)
}
isSimpleRequest := len(message.Question) == 1 &&
len(message.Ns) == 0 &&

View File

@ -6,7 +6,11 @@ import (
"github.com/miekg/dns"
)
func SetClientSubnet(message *dns.Msg, clientSubnet netip.Prefix, override bool) *dns.Msg {
func SetClientSubnet(message *dns.Msg, clientSubnet netip.Prefix) *dns.Msg {
return setClientSubnet(message, clientSubnet, true)
}
func setClientSubnet(message *dns.Msg, clientSubnet netip.Prefix, clone bool) *dns.Msg {
var (
optRecord *dns.OPT
subnetOption *dns.EDNS0_SUBNET
@ -19,9 +23,6 @@ findExists:
var isEDNS0Subnet bool
subnetOption, isEDNS0Subnet = option.(*dns.EDNS0_SUBNET)
if isEDNS0Subnet {
if !override {
return message
}
break findExists
}
}
@ -37,14 +38,14 @@ findExists:
},
}
message.Extra = append(message.Extra, optRecord)
} else {
message = message.Copy()
} else if clone {
return setClientSubnet(message.Copy(), clientSubnet, false)
}
if subnetOption == nil {
subnetOption = new(dns.EDNS0_SUBNET)
subnetOption.Code = dns.EDNS0SUBNET
optRecord.Option = append(optRecord.Option, subnetOption)
}
subnetOption.Code = dns.EDNS0SUBNET
if clientSubnet.Addr().Is4() {
subnetOption.Family = 1
} else {

View File

@ -2,6 +2,10 @@
icon: material/alert-decagram
---
#### 1.12.0-beta.12
* Fixes and improvements
#### 1.12.0-beta.10
* Add control options for listeners **1**

4
go.mod
View File

@ -25,10 +25,10 @@ require (
github.com/sagernet/fswatch v0.1.1
github.com/sagernet/gomobile v0.1.6
github.com/sagernet/gvisor v0.0.0-20250325023245-7a9c0f5725fb
github.com/sagernet/quic-go v0.51.0-beta.1
github.com/sagernet/quic-go v0.51.0-beta.5
github.com/sagernet/sing v0.6.10-0.20250505040842-ba62fee9470f
github.com/sagernet/sing-mux v0.3.2
github.com/sagernet/sing-quic v0.4.1-0.20250505055457-ae141e8be88a
github.com/sagernet/sing-quic v0.4.1-0.20250507070325-d2fb1cb09565
github.com/sagernet/sing-shadowsocks v0.2.7
github.com/sagernet/sing-shadowsocks2 v0.2.0
github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11

8
go.sum
View File

@ -165,15 +165,15 @@ github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZN
github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a/go.mod h1:xLnfdiJbSp8rNqYEdIW/6eDO4mVoogml14Bh2hSiFpM=
github.com/sagernet/nftables v0.3.0-beta.4 h1:kbULlAwAC3jvdGAC1P5Fa3GSxVwQJibNenDW2zaXr8I=
github.com/sagernet/nftables v0.3.0-beta.4/go.mod h1:OQXAjvjNGGFxaTgVCSTRIhYB5/llyVDeapVoENYBDS8=
github.com/sagernet/quic-go v0.51.0-beta.1 h1:bDMzfFlUHvMiKYvvPbOTKLWOYJFaACpssQYqsViQknI=
github.com/sagernet/quic-go v0.51.0-beta.1/go.mod h1:OV+V5kEBb8kJS7k29MzDu6oj9GyMc7HA07sE1tedxz4=
github.com/sagernet/quic-go v0.51.0-beta.5 h1:/mME3sJvQ8k/JKP0oC/9XoWrm0znO7hWXviB5yiipJY=
github.com/sagernet/quic-go v0.51.0-beta.5/go.mod h1:OV+V5kEBb8kJS7k29MzDu6oj9GyMc7HA07sE1tedxz4=
github.com/sagernet/sing v0.6.9/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
github.com/sagernet/sing v0.6.10-0.20250505040842-ba62fee9470f h1:lttLhNtFuMItQcTD29QP6aBS8kR1UhG7zZ+pwzTYkFM=
github.com/sagernet/sing v0.6.10-0.20250505040842-ba62fee9470f/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
github.com/sagernet/sing-mux v0.3.2 h1:meZVFiiStvHThb/trcpAkCrmtJOuItG5Dzl1RRP5/NE=
github.com/sagernet/sing-mux v0.3.2/go.mod h1:pht8iFY4c9Xltj7rhVd208npkNaeCxzyXCgulDPLUDA=
github.com/sagernet/sing-quic v0.4.1-0.20250505055457-ae141e8be88a h1:5W8tI4JnKtpDkW23yekxjGA/Blo6oU4frsmOeQu7/9k=
github.com/sagernet/sing-quic v0.4.1-0.20250505055457-ae141e8be88a/go.mod h1:6K3ESuaXFTjz2Dv6/PNQqg5UK0J1ZO49rqrU2ScZBKg=
github.com/sagernet/sing-quic v0.4.1-0.20250507070325-d2fb1cb09565 h1:svvkxc3NtONBrvB2rrNVmFmFYoBv+jORDOFX6tvFDjY=
github.com/sagernet/sing-quic v0.4.1-0.20250507070325-d2fb1cb09565/go.mod h1:6K3ESuaXFTjz2Dv6/PNQqg5UK0J1ZO49rqrU2ScZBKg=
github.com/sagernet/sing-shadowsocks v0.2.7 h1:zaopR1tbHEw5Nk6FAkM05wCslV6ahVegEZaKMv9ipx8=
github.com/sagernet/sing-shadowsocks v0.2.7/go.mod h1:0rIKJZBR65Qi0zwdKezt4s57y/Tl1ofkaq6NlkzVuyE=
github.com/sagernet/sing-shadowsocks2 v0.2.0 h1:wpZNs6wKnR7mh1wV9OHwOyUr21VkS3wKFHi+8XwgADg=