Skip to content

2.28.2

Choose a tag to compare

@github-actions github-actions released this 06 Oct 11:10

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: исправленная сборка на роутере.