Compare commits

..

75 Commits

Author SHA1 Message Date
renovate[bot]
d51cef48b1
[dependencies] Update golangci/golangci-lint-action action to v7 2025-04-22 15:09:50 +00:00
世界
afde16ef64
documentation: Bump version 2025-04-22 23:09:09 +08:00
世界
e9d484b01a
Fix DNS Lookup 2025-04-22 23:08:59 +08:00
世界
bcd5d410b4
Fix tailscale sending unexpected stuff 2025-04-22 23:08:59 +08:00
世界
e1d70a0b9f
Fix fetch ECH configs 2025-04-22 23:08:59 +08:00
reletor
e25ebd3685
documentation: Minor fixes 2025-04-22 23:04:11 +08:00
caelansar
a1053518a2
Fix callback deletion in UDP transport 2025-04-22 23:04:10 +08:00
世界
9d9807bf5a
documentation: Try to make the play review happy 2025-04-22 23:04:10 +08:00
世界
8f588cc0ba
Fix missing handling of legacy domain_strategy options 2025-04-22 23:04:09 +08:00
世界
21188e2823
Improve local DNS server 2025-04-22 23:04:09 +08:00
anytls
1668fd3f79
Update anytls
Co-authored-by: anytls <anytls>
2025-04-22 23:04:09 +08:00
世界
f75acf714f
Fix DNS dialer 2025-04-22 23:04:09 +08:00
世界
b239e8a1ef
release: Skip override version for iOS 2025-04-22 23:04:09 +08:00
iikira
17268b2bca
Fix UDP DNS server crash
Signed-off-by: iikira <i2@mail.iikira.com>
2025-04-22 23:04:09 +08:00
ReleTor
49b96db538
Fix fetch ECH configs 2025-04-22 23:04:08 +08:00
世界
0d183f98f2
release: Update Go to 1.24.2 2025-04-22 23:04:07 +08:00
世界
104af80ebf
Allow direct outbounds without domain_resolver 2025-04-22 23:04:07 +08:00
世界
bbd4201a3d
Fix Tailscale dialer 2025-04-22 23:04:06 +08:00
dyhkwong
e7eee1a012
Fix DNS over QUIC stream close 2025-04-22 23:04:06 +08:00
anytls
5481db9162
Update anytls
Co-authored-by: anytls <anytls>
2025-04-22 23:04:06 +08:00
Rambling2076
06580adca2
Fix missing with_tailscale in Dockerfile
Signed-off-by: Rambling2076 <Rambling2076@proton.me>
2025-04-22 23:04:05 +08:00
世界
2d9758e459
Fail when default DNS server not found 2025-04-22 23:04:05 +08:00
世界
5be4b84e2a
Update gVisor to 20250319.0 2025-04-22 23:04:05 +08:00
世界
20c7a349d1
release: Do not build tailscale on iOS and tvOS 2025-04-22 23:04:05 +08:00
世界
5b64e5f275
Explicitly reject detour to empty direct outbounds 2025-04-22 23:04:05 +08:00
世界
acf2ca42f4
Add netns support 2025-04-22 23:04:04 +08:00
世界
964001101d
Add wildcard name support for predefined records 2025-04-22 23:04:04 +08:00
世界
242c5eaaf4
Remove map usage in options 2025-04-22 23:04:03 +08:00
世界
9d424793c8
Fix unhandled DNS loop 2025-04-22 23:04:03 +08:00
世界
43041f316b
Add wildcard-sni support for shadow-tls inbound 2025-04-22 23:04:03 +08:00
世界
5fd691cd49
Fix Tailscale DNS 2025-04-22 23:04:02 +08:00
k9982874
78ebe42a74
Add ntp protocol sniffing 2025-04-22 23:04:02 +08:00
世界
301fff329d
option: Fix marshal legacy DNS options 2025-04-22 23:04:02 +08:00
世界
27b13a3e45
Make domain_resolver optional when only one DNS server is configured 2025-04-22 23:04:02 +08:00
世界
be7f20d1c2
Fix DNS lookup context pollution 2025-04-22 23:04:02 +08:00
世界
3fccad1a1d
Fix http3 DNS server connecting to wrong address 2025-04-22 23:04:01 +08:00
Restia-Ashbell
52b7ae1f2e
documentation: Fix typo 2025-04-22 23:04:01 +08:00
anytls
81ce714e14
Update sing-anytls
Co-authored-by: anytls <anytls>
2025-04-22 23:04:01 +08:00
k9982874
9fe0262f2b
Fix hosts DNS server 2025-04-22 23:04:01 +08:00
世界
913007d4ff
Fix UDP DNS server crash 2025-04-22 23:04:01 +08:00
世界
423003a8c4
documentation: Fix missing ip_accept_any DNS rule option 2025-04-22 23:04:00 +08:00
世界
2bf9dad108
Fix anytls dialer usage 2025-04-22 23:03:59 +08:00
世界
8e1237116e
Move predefined DNS server to rule action 2025-04-22 23:03:59 +08:00
世界
9061c7e8f0
Fix domain resolver on direct outbound 2025-04-22 23:03:59 +08:00
Zephyruso
286fd7f52d
Fix missing AnyTLS display name 2025-04-22 23:03:59 +08:00
anytls
41fe3a03d4
Update sing-anytls
Co-authored-by: anytls <anytls>
2025-04-22 23:03:58 +08:00
Estel
e6edfe0119
documentation: Fix typo
Signed-off-by: Estel <callmebedrockdigger@gmail.com>
2025-04-22 23:03:58 +08:00
TargetLocked
6c54277092
Fix parsing legacy DNS options 2025-04-22 23:03:57 +08:00
世界
faf1e126cf
Fix DNS fallback 2025-04-22 23:03:57 +08:00
世界
fc0202cc87
documentation: Fix missing hosts DNS server 2025-04-22 23:03:56 +08:00
anytls
ebe1c24018
Add MinIdleSession option to AnyTLS outbound
Co-authored-by: anytls <anytls>
2025-04-22 23:03:56 +08:00
ReleTor
074577234d
documentation: Minor fixes 2025-04-22 23:03:56 +08:00
libtry486
3953fa0071
documentation: Fix typo
fix typo

Signed-off-by: libtry486 <89328481+libtry486@users.noreply.github.com>
2025-04-22 23:03:55 +08:00
Alireza Ahmadi
b0c70a8197
Fix Outbound deadlock 2025-04-22 23:03:55 +08:00
世界
8d51a33e54
documentation: Fix AnyTLS doc 2025-04-22 23:03:55 +08:00
anytls
6e1b564f5d
Add AnyTLS protocol 2025-04-22 23:03:55 +08:00
世界
65c9e84862
Migrate to stdlib ECH support 2025-04-22 23:03:54 +08:00
世界
271c1e9563
Add fallback local DNS server for iOS 2025-04-22 23:03:53 +08:00
世界
ff235a7d81
Get darwin local DNS server from libresolv 2025-04-22 23:03:53 +08:00
世界
a4c0823472
Improve resolve action 2025-04-22 23:03:52 +08:00
世界
8d7dcca483
Fix toolchain version 2025-04-22 23:03:52 +08:00
世界
bf8fb9e448
Add back port hopping to hysteria 1 2025-04-22 23:03:52 +08:00
世界
616a2177d7
Update dependencies 2025-04-22 23:03:52 +08:00
xchacha20-poly1305
f40dcdb554
Remove single quotes of raw Moziila certs 2025-04-22 23:03:51 +08:00
世界
1e452fb247
Add Tailscale endpoint 2025-04-22 23:03:50 +08:00
世界
28a566bb9c
Build legacy binaries with latest Go 2025-04-22 23:03:50 +08:00
世界
8e496426ba
documentation: Remove outdated icons 2025-04-22 23:03:49 +08:00
世界
e091b3a8df
documentation: Certificate store 2025-04-22 23:03:48 +08:00
世界
7d33ce4b71
documentation: TLS fragment 2025-04-22 23:03:48 +08:00
世界
4839d8020d
documentation: Outbound domain resolver 2025-04-22 23:03:48 +08:00
世界
b4149e7f74
documentation: Refactor DNS 2025-04-22 23:03:48 +08:00
世界
490a2f2b5a
Add certificate store 2025-04-22 23:03:48 +08:00
世界
3c61077905
Add TLS fragment support 2025-04-22 23:03:39 +08:00
世界
985394c9ad
refactor: Outbound domain resolver 2025-04-22 23:03:37 +08:00
世界
7ee3ab8944
refactor: DNS 2025-04-22 23:03:36 +08:00
12 changed files with 21 additions and 117 deletions

View File

@ -196,7 +196,6 @@ jobs:
run: |
set -xeuo pipefail
sudo gem install fpm
sudo apt-get update
sudo apt-get install -y debsigs
cp .fpm_systemd .fpm
fpm -t deb \
@ -235,7 +234,6 @@ jobs:
run: |-
set -xeuo pipefail
sudo gem install fpm
sudo apt-get update
sudo apt-get install -y libarchive-tools
cp .fpm_systemd .fpm
fpm -t pacman \

View File

@ -4,7 +4,6 @@ import (
"bytes"
"net"
"net/http"
"runtime/debug"
"time"
"github.com/sagernet/sing-box/experimental/clashapi/trafficontrol"
@ -13,23 +12,14 @@ import (
"github.com/sagernet/ws/wsutil"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
"github.com/go-chi/render"
)
// API created by Clash.Meta
func (s *Server) setupMetaAPI(r chi.Router) {
if s.logDebug {
r := chi.NewRouter()
r.Put("/gc", func(w http.ResponseWriter, r *http.Request) {
debug.FreeOSMemory()
})
r.Mount("/", middleware.Profiler())
}
r.Get("/memory", memory(s.trafficManager))
r.Mount("/group", groupRouter(s))
r.Mount("/upgrade", upgradeRouter(s))
}
type Memory struct {

View File

@ -1,36 +0,0 @@
package clashapi
import (
"net/http"
E "github.com/sagernet/sing/common/exceptions"
"github.com/go-chi/chi/v5"
"github.com/go-chi/render"
)
func upgradeRouter(server *Server) http.Handler {
r := chi.NewRouter()
r.Post("/ui", updateExternalUI(server))
return r
}
func updateExternalUI(server *Server) func(w http.ResponseWriter, r *http.Request) {
return func(w http.ResponseWriter, r *http.Request) {
if server.externalUI == "" {
render.Status(r, http.StatusNotFound)
render.JSON(w, r, newError("external UI not enabled"))
return
}
server.logger.Info("upgrading external UI")
err := server.downloadExternalUI()
if err != nil {
server.logger.Error(E.Cause(err, "upgrade external ui"))
render.Status(r, http.StatusInternalServerError)
render.JSON(w, r, newError(err.Error()))
return
}
server.logger.Info("updated external UI")
render.JSON(w, r, render.M{"status": "ok"})
}
}

View File

@ -9,7 +9,6 @@ import (
"os"
"runtime"
"strings"
"sync"
"syscall"
"time"
@ -50,9 +49,6 @@ type Server struct {
httpServer *http.Server
trafficManager *trafficontrol.Manager
urlTestHistory adapter.URLTestHistoryStorage
uiUpdateAccess sync.Mutex
logDebug bool
mode string
modeList []string
modeUpdateHook chan<- struct{}
@ -78,7 +74,6 @@ func NewServer(ctx context.Context, logFactory log.ObservableFactory, options op
Handler: chiRouter,
},
trafficManager: trafficManager,
logDebug: logFactory.Level() >= log.LevelDebug,
modeList: options.ModeList,
externalController: options.ExternalController != "",
externalUIDownloadURL: options.ExternalUIDownloadURL,

View File

@ -37,8 +37,6 @@ func (s *Server) checkAndDownloadExternalUI() {
}
func (s *Server) downloadExternalUI() error {
s.uiUpdateAccess.Lock()
defer s.uiUpdateAccess.Unlock()
var downloadURL string
if s.externalUIDownloadURL != "" {
downloadURL = s.externalUIDownloadURL

10
go.mod
View File

@ -26,18 +26,18 @@ require (
github.com/sagernet/gvisor v0.0.0-20250325023245-7a9c0f5725fb
github.com/sagernet/quic-go v0.49.0-beta.1
github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691
github.com/sagernet/sing v0.6.8-0.20250425035333-84184da91a3a
github.com/sagernet/sing v0.6.7-0.20250409030945-77e2a1bb577c
github.com/sagernet/sing-mux v0.3.1
github.com/sagernet/sing-quic v0.4.1-0.20250423030647-0eb05f373a76
github.com/sagernet/sing-quic v0.4.1
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.20250316154757-6f9e732e5056
github.com/sagernet/sing-tun v0.6.5-0.20250412112220-15069fc1c20a
github.com/sagernet/sing-vmess v0.2.1
github.com/sagernet/sing-vmess v0.2.0
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7
github.com/sagernet/tailscale v1.80.3-mod.4
github.com/sagernet/tailscale v1.80.3-mod.2.0.20250422104142-2421001a70ff
github.com/sagernet/utls v1.6.7
github.com/sagernet/wireguard-go v0.0.1-beta.7
github.com/sagernet/wireguard-go v0.0.1-beta.5
github.com/sagernet/ws v0.0.0-20231204124109-acfe8907c854
github.com/spf13/cobra v1.8.1
github.com/stretchr/testify v1.10.0

20
go.sum
View File

@ -178,12 +178,12 @@ github.com/sagernet/quic-go v0.49.0-beta.1/go.mod h1:uesWD1Ihrldq1M3XtjuEvIUqi8W
github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 h1:5Th31OC6yj8byLGkEnIYp6grlXfo1QYUfiYFGjewIdc=
github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691/go.mod h1:B8lp4WkQ1PwNnrVMM6KyuFR20pU8jYBD+A4EhJovEXU=
github.com/sagernet/sing v0.2.18/go.mod h1:OL6k2F0vHmEzXz2KW19qQzu172FDgSbUSODylighuVo=
github.com/sagernet/sing v0.6.8-0.20250425035333-84184da91a3a h1:oE67hmp5rzLlE6clE7FpK4Hg6yLXsa1Zu3A01vcazb0=
github.com/sagernet/sing v0.6.8-0.20250425035333-84184da91a3a/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
github.com/sagernet/sing v0.6.7-0.20250409030945-77e2a1bb577c h1:Zi+WR7f9SQ96yNHmyxj42BtaVb3kTouQ8bQLBHReTSI=
github.com/sagernet/sing v0.6.7-0.20250409030945-77e2a1bb577c/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
github.com/sagernet/sing-mux v0.3.1 h1:kvCc8HyGAskDHDQ0yQvoTi/7J4cZPB/VJMsAM3MmdQI=
github.com/sagernet/sing-mux v0.3.1/go.mod h1:Mkdz8LnDstthz0HWuA/5foncnDIdcNN5KZ6AdJX+x78=
github.com/sagernet/sing-quic v0.4.1-0.20250423030647-0eb05f373a76 h1:iwpCX6H3nZEOGUGwx0q5azcgYOA9f6v9YssihXoRKHk=
github.com/sagernet/sing-quic v0.4.1-0.20250423030647-0eb05f373a76/go.mod h1:tqPa0/Wqa19MkkSlKVZZX5sHxtiDR9BROcn4ufcbVdY=
github.com/sagernet/sing-quic v0.4.1 h1:pxlMa4efZu/M07RgGagNNDDyl6ZUwpmNUjRTpgHOWK4=
github.com/sagernet/sing-quic v0.4.1/go.mod h1:tqPa0/Wqa19MkkSlKVZZX5sHxtiDR9BROcn4ufcbVdY=
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=
@ -192,16 +192,16 @@ github.com/sagernet/sing-shadowtls v0.2.1-0.20250316154757-6f9e732e5056 h1:GFNJQ
github.com/sagernet/sing-shadowtls v0.2.1-0.20250316154757-6f9e732e5056/go.mod h1:HyacBPIFiKihJQR8LQp56FM4hBtd/7MZXnRxxQIOPsc=
github.com/sagernet/sing-tun v0.6.5-0.20250412112220-15069fc1c20a h1:2aLxZFD2HPCLrnFGpH+KBuPqMOk0cuaDE2dgEvANuMk=
github.com/sagernet/sing-tun v0.6.5-0.20250412112220-15069fc1c20a/go.mod h1:fisFCbC4Vfb6HqQNcwPJi2CDK2bf0Xapyz3j3t4cnHE=
github.com/sagernet/sing-vmess v0.2.1 h1:6izHC2+B68aQCxTagki6eZZc+g5eh4dYwxOV5a2Lhug=
github.com/sagernet/sing-vmess v0.2.1/go.mod h1:jDAZ0A0St1zVRkyvhAPRySOFfhC+4SQtO5VYyeFotgA=
github.com/sagernet/sing-vmess v0.2.0 h1:pCMGUXN2k7RpikQV65/rtXtDHzb190foTfF9IGTMZrI=
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/go.mod h1:FP9X2xjT/Az1EsG/orYYoC+5MojWnuI7hrffz8fGwwo=
github.com/sagernet/tailscale v1.80.3-mod.4 h1:9UgYq8m9mwX5dbTbueVxbRh+bq7AayxemJGM2PkJQnE=
github.com/sagernet/tailscale v1.80.3-mod.4/go.mod h1:EBxXsWu4OH2ELbQLq32WoBeIubG8KgDrg4/Oaxjs6lI=
github.com/sagernet/tailscale v1.80.3-mod.2.0.20250422104142-2421001a70ff h1:PK4zmYqcMpW1a416jKR/y7XTqeyANTcbvux8cAA0Vw8=
github.com/sagernet/tailscale v1.80.3-mod.2.0.20250422104142-2421001a70ff/go.mod h1:EBxXsWu4OH2ELbQLq32WoBeIubG8KgDrg4/Oaxjs6lI=
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/wireguard-go v0.0.1-beta.7 h1:ltgBwYHfr+9Wz1eG59NiWnHrYEkDKHG7otNZvu85DXI=
github.com/sagernet/wireguard-go v0.0.1-beta.7/go.mod h1:jGXij2Gn2wbrWuYNUmmNhf1dwcZtvyAvQoe8Xd8MbUo=
github.com/sagernet/wireguard-go v0.0.1-beta.5 h1:aBEsxJUMEONwOZqKPIkuAcv4zJV5p6XlzEN04CF0FXc=
github.com/sagernet/wireguard-go v0.0.1-beta.5/go.mod h1:jGXij2Gn2wbrWuYNUmmNhf1dwcZtvyAvQoe8Xd8MbUo=
github.com/sagernet/ws v0.0.0-20231204124109-acfe8907c854 h1:6uUiZcDRnZSAegryaUGwPC/Fj13JSHwiTftrXhMmYOc=
github.com/sagernet/ws v0.0.0-20231204124109-acfe8907c854/go.mod h1:LtfoSK3+NG57tvnVEHgcuBW9ujgE8enPSgzgwStwCAA=
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=

View File

@ -10,7 +10,6 @@ import (
"strconv"
"strings"
"sync"
"time"
"github.com/sagernet/sing-box/adapter"
"github.com/sagernet/sing-box/adapter/outbound"
@ -192,29 +191,9 @@ func (s *Outbound) DialContext(ctx context.Context, network string, destination
if err != nil {
return nil, err
}
conn, err := client.Dial(network, destination.String())
if err != nil {
return nil, err
}
return &chanConnWrapper{Conn: conn}, nil
return client.Dial(network, destination.String())
}
func (s *Outbound) ListenPacket(ctx context.Context, destination M.Socksaddr) (net.PacketConn, error) {
return nil, os.ErrInvalid
}
type chanConnWrapper struct {
net.Conn
}
func (c *chanConnWrapper) SetDeadline(t time.Time) error {
return os.ErrInvalid
}
func (c *chanConnWrapper) SetReadDeadline(t time.Time) error {
return os.ErrInvalid
}
func (c *chanConnWrapper) SetWriteDeadline(t time.Time) error {
return os.ErrInvalid
}

View File

@ -102,10 +102,7 @@ func NewDefaultRule(ctx context.Context, logger log.ContextLogger, options optio
rule.allItems = append(rule.allItems, item)
}
if len(options.Domain) > 0 || len(options.DomainSuffix) > 0 {
item, err := NewDomainItem(options.Domain, options.DomainSuffix)
if err != nil {
return nil, err
}
item := NewDomainItem(options.Domain, options.DomainSuffix)
rule.destinationAddressItems = append(rule.destinationAddressItems, item)
rule.allItems = append(rule.allItems, item)
}

View File

@ -93,10 +93,7 @@ func NewDefaultDNSRule(ctx context.Context, logger log.ContextLogger, options op
rule.allItems = append(rule.allItems, item)
}
if len(options.Domain) > 0 || len(options.DomainSuffix) > 0 {
item, err := NewDomainItem(options.Domain, options.DomainSuffix)
if err != nil {
return nil, err
}
item := NewDomainItem(options.Domain, options.DomainSuffix)
rule.destinationAddressItems = append(rule.destinationAddressItems, item)
rule.allItems = append(rule.allItems, item)
}

View File

@ -47,10 +47,7 @@ func NewDefaultHeadlessRule(ctx context.Context, options option.DefaultHeadlessR
rule.allItems = append(rule.allItems, item)
}
if len(options.Domain) > 0 || len(options.DomainSuffix) > 0 {
item, err := NewDomainItem(options.Domain, options.DomainSuffix)
if err != nil {
return nil, err
}
item := NewDomainItem(options.Domain, options.DomainSuffix)
rule.destinationAddressItems = append(rule.destinationAddressItems, item)
rule.allItems = append(rule.allItems, item)
} else if options.DomainMatcher != nil {

View File

@ -5,7 +5,6 @@ import (
"github.com/sagernet/sing-box/adapter"
"github.com/sagernet/sing/common/domain"
E "github.com/sagernet/sing/common/exceptions"
)
var _ RuleItem = (*DomainItem)(nil)
@ -15,17 +14,7 @@ type DomainItem struct {
description string
}
func NewDomainItem(domains []string, domainSuffixes []string) (*DomainItem, error) {
for _, domainItem := range domains {
if domainItem == "" {
return nil, E.New("domain: empty item is not allowed")
}
}
for _, domainSuffixItem := range domainSuffixes {
if domainSuffixItem == "" {
return nil, E.New("domain_suffix: empty item is not allowed")
}
}
func NewDomainItem(domains []string, domainSuffixes []string) *DomainItem {
var description string
if dLen := len(domains); dLen > 0 {
if dLen == 1 {
@ -51,7 +40,7 @@ func NewDomainItem(domains []string, domainSuffixes []string) (*DomainItem, erro
return &DomainItem{
domain.NewMatcher(domains, domainSuffixes, false),
description,
}, nil
}
}
func NewRawDomainItem(matcher *domain.Matcher) *DomainItem {