Skip to content

Поведение /api/sets/check-domain отличается от того, как на самом деле работает матчер SNI #273

Description

@gili8420

What happened?

Наткнулся на несостыковку: /api/sets/check-domain говорит, что сабдомен не матчится, хотя по факту трафик на него сроутится.

Вот что в src/http/handler/sets.go, в методе handleCheckDomain:

for _, d := range set.Targets.SNIDomains {
    if strings.ToLower(d) == domain {
        matches = append(matches, setMatch{SetName: set.Name, SetId: set.Id, Via: "manual"})
    }
}
for _, d := range set.Targets.DomainsToMatch {
    if strings.ToLower(d) == domain { 
        matches = append(matches, setMatch{SetName: set.Name, SetId: set.Id, Via: "geosite"})
    }
}

А вот так работает SNI матчер в src/sni/match.go:

if set, ok := s.sets[host]; ok {
    // ...
} else {
    remaining := host
    for {
        idx := strings.IndexByte(remaining, '.')
        if idx == -1 { break }
        remaining = remaining[idx+1:]
        if set, ok := s.sets[remaining]; ok {
            ...
        }
    }
}

При этом, в src/sni/match_test.go тесты TestMatchSNI_SuffixMatch подтверждают, что подразумевалась логика суффиксного матчинга.

Версия: v1.73.0.

Steps to reproduce

  1. POST /api/sets с {"name":"test","enabled":true,"targets":{"sni_domains":["example.com"]}}
  2. GET /api/sets/check-domain?domain=example.com - возвращает match;
  3. GET /api/sets/check-domain?domain=www.example.com - возвращает null;
  4. При этом, реальный трафик в www.example.com сматчиться и сроутится

Platform

OpenWrt

Installation method

install.sh (recommended script)

System diagnostics (--sysinfo output)

root@OpenWrt:~# uname -a
Linux OpenWrt 6.6.73 #0 SMP Mon Feb  3 23:09:37 2025 aarch64 GNU/Linux

b4 configuration (b4.json)

Logs


Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions