zapret-kvn/data/templates/sing-box/default.json
loop-uh ddf42e0e67
Some checks failed
Windows project source guards / test (push) Has been cancelled
DNS: bootstrap без SNI и запомненный адрес сервера
Адрес самого VPN-сервера больше не зависит от имён, которые фильтр видит в
TLS, и от честности провайдерского резолвера.

- Шаблоны sing-box: серверы direct-doh идут по литеральному IP с
  tls.disable_sni, имя остаётся только для проверки сертификата. Имена
  dns.google, cloudflare-dns.com и dns.quad9.net ТСПУ обрывает по SNI, из-за
  чего bootstrap скатывался на системный резолвер. Адресов пять вместо трёх
  (добавлены 94.140.14.14 и 8.8.4.4).
- network/bootstrap_dns.py: доверенный резолвер имени сервера — DoH по IP без
  SNI, затем системный резолвер, затем запомненный адрес. Ответ DoH хранится
  до семи суток в data/bootstrap-lkg.json; системный ответ не запоминается.
- Планировщик sing-box: когда запомненный адрес есть, узел разрешается своей
  цепочкой direct-doh -> запомненный адрес. NXDOMAIN системного резолвера в
  штатной цепочке окончателен, и подмена «домена нет» срывала подключение.
  Секции пользователя не меняются, добавляются только app-теги.
- Zapret: правило сервера строится по тому же доверенному пути вместо
  getaddrinfo, отказ провайдера больше не отменяет подключение.

Проверено собранным под Linux закреплённым ядром: с прежним шаблоном имена
DoH-серверов видны в трафике открытым текстом, с новым их нет, имена
разрешаются. Гибридный режим и WireGuard/AmneziaWG запомненный адрес пока не
используют.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 00:01:26 +03:00

352 lines
7.6 KiB
JSON

{
"log": {
"level": "warn",
"timestamp": true
},
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"interface_name": "xftun",
"address": [
"172.19.0.1/30"
],
"auto_route": true,
"strict_route": false,
"stack": "mixed"
}
],
"outbounds": [
{
"type": "direct",
"tag": "proxy"
},
{
"type": "direct",
"tag": "direct",
"domain_resolver": "bootstrap-dns"
},
{
"type": "block",
"tag": "block"
}
],
"route": {
"auto_detect_interface": true,
"default_domain_resolver": "proxy-dns",
"rule_set": [
{
"type": "local",
"tag": "geosite-ru-blocked",
"format": "binary",
"path": "rule-set/geosite-ru-blocked.srs"
},
{
"type": "local",
"tag": "geoip-ru-blocked",
"format": "binary",
"path": "rule-set/geoip-ru-blocked.srs"
},
{
"type": "local",
"tag": "geosite-category-ru",
"format": "binary",
"path": "rule-set/geosite-category-ru.srs"
},
{
"type": "local",
"tag": "geoip-ru",
"format": "binary",
"path": "rule-set/geoip-ru.srs"
}
],
"rules": [
{
"action": "sniff"
},
{
"protocol": "dns",
"action": "hijack-dns"
},
{
"network": "tcp",
"port": 853,
"action": "reject",
"method": "default"
},
{
"domain_suffix": [
"mobileproxy.passport.yandex.net",
"relay-api.eu.2gis.com",
"api.ipify.org",
"checkip.amazonaws.com",
"ifconfig.me",
"ip.mail.ru",
"ipv4-internet.yandex.net",
"ipv6-internet.yandex.net",
"trace-flow.ru",
"api.oneme.ru",
"vk-analytics.ru",
"apptracer.ru"
],
"action": "route",
"outbound": "block"
},
{
"process_name": [
"Яндекс Музыка.exe",
"yandexmusic.exe"
],
"action": "route",
"outbound": "direct"
},
{
"domain_suffix": [
"gov.ru",
"government.ru",
"kremlin.ru",
"gosuslugi.ru",
"mil.ru",
"fsb.ru",
"sudrf.ru",
"sledcom.ru",
"cikrf.ru",
"mos.ru",
"xn--b1aew.xn--p1ai",
"2gis.com",
"2gis.ru",
"alfabank.com",
"alfabank.ru",
"avito.ru",
"clickstream.ru",
"dzen.ru",
"kinopoisk.ru",
"mail.ru",
"max.ru",
"megafon.ru",
"megamarket.ru",
"mironline.ru",
"mts.ru",
"my.com",
"mytracker.ru",
"nspk.ru",
"ok.ru",
"odnoklassniki.ru",
"oneme.ru",
"ozon.ru",
"privetmir.ru",
"rutube.ru",
"rustore.ru",
"samokat.ru",
"sber.ru",
"sberbank.com",
"sberbank.ru",
"sbrf.ru",
"tbank.ru",
"tinkoff.ru",
"userapi.com",
"vtb.ru",
"vk.com",
"vk.ru",
"vkvideo.ru",
"wb.ru",
"wildberries.ru",
"ya.ru",
"yandex.com",
"yandex.net",
"yandex.ru",
"yastat.net",
"yastatic.net",
"bankdomrf.ru",
"domrfbank.ru",
"gazprombank.ru",
"gazprompay.ru",
"gpb.ru",
"halvacard.ru",
"home.bank",
"homecredit.ru",
"mkb.ru",
"psbank.ru",
"raif.ru",
"raiffeisen.ru",
"raiffeisenbank.ru",
"rosbank.ru",
"rshb.ru",
"sovcombank.ru",
"unicredit.ru",
"unicreditbank.ru",
"akbars.ru",
"bspb.ru",
"tochka.com",
"yoomoney.ru",
"aliexpress.ru",
"kuper.ru",
"lamoda.ru",
"magnitmarket.ru",
"youla.ru",
"beeline.ru",
"rostelecom.ru",
"rt.ru",
"t2.ru"
],
"action": "route",
"outbound": "direct"
},
{
"domain_suffix": [
"loopy.ru",
"championat.com"
],
"action": "route",
"outbound": "direct"
},
{
"domain_suffix": [
"4pda.to",
"zapret.moe"
],
"action": "route",
"outbound": "proxy"
},
{
"rule_set": [
"geosite-ru-blocked",
"geoip-ru-blocked"
],
"action": "route",
"outbound": "proxy"
},
{
"ip_is_private": true,
"action": "route",
"outbound": "direct"
},
{
"rule_set": [
"geosite-category-ru",
"geoip-ru"
],
"action": "route",
"outbound": "direct"
}
],
"final": "proxy"
},
"dns": {
"servers": [
{
"type": "udp",
"tag": "vpn-node-dns-udp",
"server": "8.8.8.8",
"server_port": 53,
"detour": "proxy"
},
{
"type": "tcp",
"tag": "vpn-node-dns-tcp",
"server": "8.8.8.8",
"server_port": 53,
"detour": "proxy"
},
{
"type": "https",
"tag": "direct-doh-google",
"server": "8.8.8.8",
"path": "/dns-query",
"tls": {
"enabled": true,
"disable_sni": true,
"server_name": "dns.google"
}
},
{
"type": "https",
"tag": "direct-doh-cloudflare",
"server": "1.1.1.1",
"path": "/dns-query",
"tls": {
"enabled": true,
"disable_sni": true,
"server_name": "cloudflare-dns.com"
}
},
{
"type": "https",
"tag": "direct-doh-quad9",
"server": "9.9.9.9",
"path": "/dns-query",
"tls": {
"enabled": true,
"disable_sni": true,
"server_name": "dns.quad9.net"
}
},
{
"type": "https",
"tag": "direct-doh-adguard",
"server": "94.140.14.14",
"path": "/dns-query",
"tls": {
"enabled": true,
"disable_sni": true,
"server_name": "dns.adguard-dns.com"
}
},
{
"type": "https",
"tag": "direct-doh-google-alt",
"server": "8.8.4.4",
"path": "/dns-query",
"tls": {
"enabled": true,
"disable_sni": true,
"server_name": "dns.google"
}
},
{
"type": "fallback",
"tag": "direct-doh",
"servers": [
"direct-doh-google",
"direct-doh-cloudflare",
"direct-doh-quad9",
"direct-doh-adguard",
"direct-doh-google-alt"
],
"strategy": "parallel",
"timeout": "3s"
},
{
"type": "local",
"tag": "local-system-dns",
"prefer_go": true
},
{
"type": "fallback",
"tag": "bootstrap-dns",
"servers": [
"direct-doh",
"local-system-dns"
],
"strategy": "sequential",
"timeout": "4s"
},
{
"type": "fallback",
"tag": "proxy-dns",
"servers": [
"vpn-node-dns-udp",
"vpn-node-dns-tcp"
],
"strategy": "sequential",
"timeout": "6s"
}
],
"final": "proxy-dns"
},
"experimental": {
"cache_file": {
"enabled": true
}
}
}