Это я заметил) Но не могу понять как коррелирует этот резолвинг и старые добрые dns rules
Если у вас в каком-то поле конфигурации встретится домен (например "server": "google.com" ), sing-box отрезолвит его через указанный DNS. К перехваченным системным запросам оно не имеет отношения.
Вот мой полный конфиг (только настройки серверов стёр). И у меня внизу правило, чтобы ntc шел через конкретный сервер, потому что другой не поддерживает ipv6. Писал его полностью сам по официальной документации, мог где-то ерунду сделать, но работает.
{
"log": {
"level": "warn",
"timestamp": true
},
"dns": {
"strategy": "ipv4_only",
"reverse_mapping": true,
"servers": [
{
"type": "https",
"tag": "dns-secure",
"server": "8.8.8.8",
"tls": {
"server_name": "dns.google"
},
"detour": "proxy-select"
},
{
"type": "local",
"tag": "dns-direct"
}
],
"rules": [
{
"domain_suffix": [
"ntc.party"
],
"server": "dns-secure",
"strategy": "prefer_ipv4"
},
{
"domain_suffix": [
"blocked.ru"
],
"server": "dns-secure"
},
{
"domain_suffix": [
".ru"
],
"server": "dns-direct"
}
],
"final": "dns-secure"
},
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"address": [
"172.19.0.1/30",
"fdfe:dcba:9876::1/126"
],
"auto_route": true,
"stack": "system",
"mtu": 1400
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
},
{
"type": "selector",
"tag": "proxy-select",
"outbounds": [
"Proxy1",
"Proxy2"
],
"default": "Proxy1",
"interrupt_exist_connections": true
},
{
"type": "selector",
"tag": "google-select",
"outbounds": [
"Proxy1",
"Proxy2"
],
"default": "Proxy2",
"interrupt_exist_connections": true
},
{
"type": "vless",
"tag": "Proxy1"
},
{
"type": "anytls",
"tag": "Proxy2"
}
],
"route": {
"final": "proxy-select",
"auto_detect_interface": true,
"override_android_vpn": true,
"default_domain_resolver": {
"server": "dns-secure"
},
"rule_set": [
{
"tag": "geosite-google",
"type": "remote",
"format": "binary",
"url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-google.srs"
},
{
"tag": "geosite-youtube",
"type": "remote",
"format": "binary",
"url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-youtube.srs"
}
],
"rules": [
{
"inbound": "tun-in",
"action": "resolve"
},
{
"inbound": "tun-in",
"action": "sniff",
"sniffer": [
"http",
"tls",
"dns",
"quic"
],
"timeout": "300ms"
},
{
"protocol": "dns",
"action": "hijack-dns"
},
{
"rule_set": [
"geosite-youtube",
"geosite-google"
],
"action": "route",
"outbound": "google-select"
},
{
"domain_suffix": [
"ntc.party"
],
"action": "route",
"outbound": "Proxy1"
},
{
"domain_suffix": [
"blocked.ru"
],
"action": "route",
"outbound": "proxy-select"
},
{
"domain_suffix": [
".ru",
"reddit.com",
"imgur.com"
],
"action": "route",
"outbound": "direct"
}
]
},
"experimental": {
"cache_file": {
"enabled": true
}
}
}
Я использую sing-box в качестве клиента и сервера. Ядра должны быть одинаковыми, тогда с мультиплексированием и прочими частями все будет хорошо. И не нужно будет себя ограничивать небольшим совместимым подмножеством.
Ранее в другой теме об этом писал.
Параметр default_domain_resolver в первую очередь нужен для разрешения доменов из конфига. Но не только. Если внешнее приложение в том же socks5 укажет внутри домен подключения (вместо ip), а не само будет через socks5 слать dns запросы, то этот домен тоже будет разрешен через dns по умолчанию, а не по правилам dns. Чтобы этого избежать у меня добавлено правило resolve в rules (методом тыка добавил, заработало).
Спасибо! Теперь стало понятно ![]()
Дай бог вам здоровья :)) Все заработало! (проверил пока только на windows)
Я ходил вокруг да около, но все эти параметры вместе не пробовал видимо. Но помимо вашего конфига пришлось еще yandex DOH прикрутить - без него тупили ru/direct домены. Тут в треде парень писал про потенциальные проблемы с direct dns без doh/dot: может зациклиться. Возможно это я и поймал.
Всем спасибо!
Итоговый конфиг
{
"log": {
"level": "warn"
},
"dns": {
"strategy": "ipv4_only",
"reverse_mapping": true,
"final": "dns-local",
"servers": [
{
"type": "https",
"tag": "dns-remote",
"server": "8.8.8.8",
"tls": {
"server_name": "dns.google"
},
"detour": "vps-proxy-selector"
},
{
"type": "https",
"tag": "dns-local",
"server": "77.88.8.8",
"tls": {
"server_name": "common.dot.dns.yandex.net"
}
}
],
"rules": [
{
"action": "predefined",
"rcode": "REFUSED",
"rule_set": [
"geosite:category-ads-all"
]
},
{
"action": "predefined",
"rcode": "REFUSED",
"domain_suffix": [
"appcenter.ms",
"firebase.io",
"crashlytics.com"
]
},
{
"domain_suffix": [
"sagernet.org"
],
"rule_set": [
"geosite:youtube",
],
"server": "dns-remote"
},
{
"domain_suffix": [
".ru"
],
"rule_set": [
"geosite:category-ru"
],
"server": "dns-local"
},
{
"domain_suffix": [
"ntc.party"
],
"server": "dns-remote",
"strategy": "prefer_ipv4"
}
]
},
"inbounds": [
{
"type": "tun",
"tag": "tun-proxy",
"interface_name": "tun-proxy",
"address": [
"172.19.0.1/24",
"fdfe:dcba:9876::1/126"
],
"mtu": 1500,
"auto_route": true,
"stack": "mixed"
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
},
{
"type": "selector",
"tag": "vps-proxy-selector",
"outbounds": ["proxy1", "proxy2", "proxy3"],
"default": "proxy2"
},
{
"type": "vless",
"tag": "proxy1",
"server": "",
"server_port": ,
"uuid": "",
"flow": "xtls-rprx-vision",
"network": "tcp",
"tls": {
"enabled": true,
"insecure": false,
"server_name": "",
"utls": {
"enabled": true,
"fingerprint": "chrome"
},
"reality": {
"enabled": true,
"public_key": "",
"short_id": ""
}
}
},
{
"type": "vless",
"tag": "proxy2",
"server": "",
"server_port": ,
"uuid": "",
"flow": "xtls-rprx-vision",
"network": "tcp",
"tls": {
"enabled": true,
"insecure": false,
"server_name": "",
"utls": {
"enabled": true,
"fingerprint": "chrome"
},
"reality": {
"enabled": true,
"public_key": "",
"short_id": ""
}
}
},
{
"type": "shadowsocks",
"tag": "proxy3",
"server": "",
"server_port": ,
"method": "2022-blake3-aes-256-gcm",
"password": ""
}
],
"route": {
"final": "direct",
"auto_detect_interface": true,
"default_domain_resolver": {
"server": "dns-remote"
},
"rules": [
{
"action": "resolve",
"inbound": "tun-proxy"
},
{
"action": "sniff",
"sniffer": [
"http",
"tls",
"dns",
"quic"
],
"inbound": "tun-proxy",
},
{
"action": "hijack-dns",
"protocol": "dns"
},
{
"ip_is_private": true,
"outbound": "direct"
},
{
"action": "reject",
"network": "udp",
"port": 443
},
{
"action": "reject",
"rule_set": [
"geosite:category-ads-all"
]
},
{
"protocol": "bittorrent",
"outbound": "direct"
},
{
"domain_suffix": [
".ru"
],
"rule_set": [
"geosite:category-ru"
],
"rule_set": [
"geoip:ru",
"geoip:by"
],
"outbound": "direct"
},
{
"domain_suffix": [
"sagernet.org"
],
"rule_set": [
"geosite:youtube"
],
"ip_cidr": [
],
"outbound": "vps-proxy-selector"
}
],
"rule_set": [
{
"tag": "geoip:by",
"type": "remote",
"format": "binary",
"url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-by.srs",
"download_detour": "vps-proxy-selector"
},
...
]
},
"experimental": {
"cache_file": {
"enabled": true
}
}
}
P.S. Если кто-то шарит как без яндекс DoH настроить direct DNS - подскажите, пожалуйста ![]()
Указать адрес роутера, серверов провайдера или локального кэширующего резолвера?
Да, это рабочий вариант, но для каждой платформы нужно модифицировать этот локальный адрес (разные провайдеры, разные gateway и прочее). Хочется универсальный конфиг, хотя бы в плане dns.
При этом стандартный local dns вызывает дичайшие задержки, логи пока не курил
{
"type": "local",
"tag": "dns-local"
}
Странно, у меня нормально работает. Или я просто не замечаю задержку. И в логах ничего такого нет (в случае зацикливания вроде бы должна быть специальная ошибка про loopback). И я использую одинаковый конфиг что на android, что на windows.
Я как минимум видел в логах вот такое. Тут вон в логе даже 2 секунды видно.
DEBUG[0003] [3017990089 1.7s] dns: exchange ad.mail.ru. IN AAAA
DEBUG[0003] [3502562283 1.7s] dns: match[7] domain_suffix=[.ru .su .рф…] rule_set=geosite:category-ru => route(dns-local)
DEBUG[0003] [3502562283 1.7s] dns: strategy rejected
При этом если указать адрес роутера то все ок:
{
“type”: “udp”,
“tag”: “dns-local”,
“server”: “192.168.1.1”,
}
У меня еще dnsmasq в роутере прописан свой собственный, мб он аффектит, хз пока.
Но лаг только первый раз, потом видимо где-то кеш работает и проблем нет. 100% с dns косяк какой-то
Попробовал раздать с мобильного телефона интернет - на нем все ок. На время теста отключил ethernet кабель. Воткнул обратно, отключил мобильный интернет, - все заработало нормально ![]()
А чем вы на android пользуетесь? Я просто на nekobox с 2023 года сидел ![]()
От авторов sing-box есть родной клиент на android: sing-box for Android - sing-box
Самое простое - установить через F-Droid. Там по сути только кнопка включения и выключения, список профилей, редактирование текстового конфига, лог.
Не так уж оно и аскетично, как выглядит на первый взгляд). Стоит в конфиге прописать клэш-моды и прочие селекторы, и меню приложения заиграет новыми кнопочками-функциями).
Да, я пользуюсь активно, мне такой формат по душе ) Как раз после приложения на android не хватало чего-то такого же простого под Windows (с минимальной интеграцией в ОС). Поэтому сам для себя написал: Простое управление sing-box через значок в трее
А я пользуюсь вэб-панелькой https://github.com/MetaCubeX/metacubexd
Хотя на домашнем ПК давненько не запускал sing-box. Написал скрипт для роутеров Asus, и sing-box крутится на нём для нужных устройств дома. А в панельку лазию иногда посмотреть статистику.

Прикольно, поизучаем ![]()
А я просто ярлык себе сделал, который запускает sing-box)
Дешево и сердито: C:\Windows\System32\cmd.exe /c “D:\sing-box-1.12.12.exe run -c D:\config_1.12.12.json”

У меня по моему как раз ваш скрипт стоит к слову, но старой версии. Но речь не о скрипте, а о том что при 200 Мб/cек скорости cpu роутера под 100%
А у меня гигабитный канал, как то не очень получается. Поэтому на роутере чисто для телевизора стоит sing-box по сути.
Если у вас удалось через роутер с sing-box под 1 Gb/s гонять трафик - поделитесь, пожалуйста, знанием)
Я несколько ярлыков сделал, использующих PuTTY- для запуска, остановки и перезагрузки.

С версии 2.0 можно использовать TPROXY inbound. С ним такой катастрофической загрузки проца не наблюдается. У меня то дома канал всего 100 МБит, так что я и с TUN inbound серьёзной нагрузки на проц не наблюдал, но тут ещё от самого проца зависит, естественно. А так, перед релизом версии 2.0, тестировал её человек с таким же роутером, как у меня и с каналом в 600 МБит, и скорость при этом у него упёрлась не в проц, в тариф). Ещё есть способ использовать fakeip, если через прокси предполагается пускать только избранные домены, то скорость с tun будет резаться только к этим доменам, а к остальному трафику не будет. Ну и с tproxy тоже можно fakeip использовать.