Repository navigation
2.28.2
sing-box больше не подключается сам к себе через DNS-вход устройств
Срочное исправление. Если у правила есть DNS-условия по устройствам (поиск DNS с учётом источника), sing-box мог по кругу открывать соединения сам к себе на 192.168.1.1:1603. Обновление ставится поверх, настройки не меняются, ничего делать вручную не нужно.
Что изменилось
-
DNS-входы sing-box принимают только DNS. DNS-запросы выбранных устройств nft перенаправляет с порта 53 на вход sing-box
:1603. Раньше такое соединение считалось DNS, только если его распознал сниффер. Если сниффер его не распознавал (обычно TCP DNS, у которого истёк таймаут распознавания), соединение уходило в правило по умолчанию «Напрямую». А его адресом назначения после перенаправления был сам вход192.168.1.1:1603. sing-box подключался к себе, новое соединение снова не распознавалось, и так по кругу.На роутере это выглядело так: в «Мониторинге» десятки соединений «192.168.1.1 → 192.168.1.1:1603, Напрямую, ни одно правило не сработало» с нулевым входящим трафиком. Под капотом были тысячи сокетов TIME_WAIT, около 13 тысяч записей conntrack, забитая очередь приёма на
:1603, высокая нагрузка на процессор и медленный DNS у этих устройств.Теперь всё, что приходит на DNS-входы sing-box (
dns-in,source-dns-inи входы проверки DNS-серверов), перехватывается как DNS, что бы ни сказал сниффер. Если в соединении не DNS, sing-box его закрывает, и в «Напрямую» оно больше не уходит.
Что проверено
- PASS: автоматические тесты бэкенда (полный прогон). Новая проверка в
tests/sing_box_runtime.sh: DNS-входы перехватываются правилом без условия на протокол сразу после сниффинга. Без исправления она падает. - PASS: на роутере (до исправления, только чтение) найдена сама петля: Clash API показывает соединения inbound
source-dns-in, 192.168.1.1 → 192.168.1.1:1603, правилоfinal, выходdirect-out. - NOT TESTED: исправленная сборка на роутере.