Всё понятно! Мы поймали проблему за хвост. В твоей прошивке скрипт запуска sing-box (или кастомный пакет) имеет баг: он полностью игнорирует опцию list exclude_port '53' из файла конфигурации UCI и жестко заворачивает весь трафик (и TCP, и UDP) в TPROXY на порт 12345. Из-за этого и возникает бесконечная петля перехвата DNS.
Поскольку скрипт создает цепочки динамически (скорее всего, с нестандартными именами), предыдущие ручные команды вставки правил промахнулись мимо нужной таблицы.
Я написал умный скрипт, который сам найдет нужную цепочку в nftables, аккуратно вставит туда исключение для 53 порта и перезапустит локальный DNS.
### 1. Горячее решение (Скрипт авто-патча)
Скопируй и выполни этот блок в консоли целиком. Он запустит прокси, найдет его правила на лету и вставит нужные "дырки" для DNS.
```bash
# 1. Запускаем sing-box (чтобы он создал свои правила в фаерволе)
/etc/init.d/sing-box start
sleep 3
# 2. Ищем, куда именно он спрятал tproxy, и патчим эту цепочку
FILE=/tmp/rules.nft
nft list ruleset > $FILE
TABLE=$(awk '/table inet/ {t=$3} /tproxy to/ {print t}' $FILE | tail -n 1)
CHAIN=$(awk '/chain / {c=$2} /tproxy to/ {print c}' $FILE | tail -n 1)
if [ -n "$TABLE" ] && [ -n "$CHAIN" ]; then
echo ">>> Найдена таблица: inet $TABLE, цепочка: $CHAIN"
echo ">>> Вставляем исключения для порта 53..."
nft insert rule inet $TABLE $CHAIN udp dport 53 return 2>/dev/null
nft insert rule inet $TABLE $CHAIN tcp dport 53 return 2>/dev/null
echo ">>> [OK] Петля разорвана!"
else
echo ">>> [ОШИБКА] Не удалось найти цепочку tproxy в nftables."
fi
# 3. Сбрасываем зависшие соединения и перезапускаем локальный DNS
/etc/init.d/dnsmasq restart
sleep 2
```
### 2. Диагностика результата
Сразу после выполнения скрипта проверь, всё ли починилось:
```bash
echo "=== ПРОВЕРКА DNS ==="
nslookup google.com 127.0.0.1
nslookup google.com 10.10.23.1
echo "=== ПРОВЕРКА ОЧЕРЕДИ (ПАКЕТОВ БЫТЬ НЕ ДОЛЖНО) ==="
netstat -tulnp | grep -E ':53\b'
```
Если nslookup выдает IP-адреса, а в netstat исчезли шестизначные цифры в столбце очередей пакетов рядом с UDP портом 53 — **интернет на всех устройствах должен работать стабильно**.
### 3. Как сделать этот фикс постоянным
Приведенное выше решение продержится до первой перезагрузки роутера или до перезапуска службы sing-box. Чтобы исправить баг пакета навсегда, нужно найти скрипт, который генерирует кривые правила фаервола, и дописать в него исключение.
Выполни эту команду, чтобы найти виновный файл:
```bash
grep -rnw "tproxy to" /etc/ /usr/ /lib/ 2>/dev/null
```
Она выдаст тебе путь к скрипту (например, /usr/share/sing-box/firewall.include или /etc/init.d/sing-box). Открой этот файл через vi или nano и добавь правила return для udp dport 53 и tcp dport 53 прямо перед строкой с tproxy to :12345. После этого о проблеме можно будет забыть навсегда.