Ник Пост Дата
Buttercup

Приветствую всех, прошу помощи в настройке Sing-Box, необходимо чтобы все запросы DNS шли на локальный адрес 127.0.0.1 там их будет обрабатывать DNS сервер, проблема в том что все DNS запросы уходят через outbound proxy на сервер vless и там успешно обрабатывается, пробовал версию 1.12, 1.11, сейчас стоит 1.10.4, у каждой версии свои настройки судя по оф сайту синга, к сожалению так и не удалось заставить отравлять запросы локально, Ubuntu 22.04 ниже конфиг

Спойлер
{
  "log": {
    "level": "debug",
    "output": "/var/log/sing-box.log"
  },
  "dns": {
  "servers": [
      {
        "tag": "local-dns",
        "address": "127.0.0.1",
        "strategy": "prefer_ipv4",
        "detour": "direct"
      }
    ],
    "rules": [
      {
        "domain": "any",
        "server": "local-dns"
      }
    ]
  },

  "inbounds": [
    {
      "type": "mixed",
      "listen": "0.0.0.0",
      "listen_port": 2080,
      "sniff": true,
      "sniff_override_destination": true,
      "users": []
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct"
    },
    {
      "type": "vless",
      "tag": "proxy",
      "server": "ИП СЕРВАКА",
      "server_port": 443,
      "uuid": "УАЙДИ",
      "flow": "xtls-rprx-vision",
      "packet_encoding": "xudp",
      "tls": {
        "enabled": true,
        "server_name": "САЙТ ПРИКРЫТИЯ",
        "utls": {
          "enabled": true,
          "fingerprint": "БРАУЗЕР"
        },
        "reality": {
          "enabled": true,
          "public_key": "ПУБЛИК КЛЮЧ",
          "short_id": "ШОРТ"
        }
      }
    },
    {
      "tag": "dns",
      "type": "dns"
    },
    {
      "type": "block",
      "tag": "block"
    }
  ],
  "route": {
    "rules": [
      {
        "protocol": "dns",
        "outbound": "dns"
      },
      {
        "ip_is_private": true,
        "outbound": "direct"
      },
      {
        "rule_set": "block-ads",
        "outbound": "block"
      },
      {
        "domain_suffix": ["СУФИКСЫ ДОМЕНОВ"],
        "outbound": "direct"
      },
      {
        "domain": [
          "ДОМЕН"
        ],
        "outbound": "direct"
      },
      {
        "rule_set": "ПРАВИЛО",
        "outbound": "direct"
      },
      {
        "rule_set": "ПРАВИЛО",
        "outbound": "direct"
      },
      {
        "rule_set": "ПРАВИЛО",
        "outbound": "direct"
      },
      {
        "rule_set": "ПРАВИЛО",
        "outbound": "direct"
      },
      {
        "rule_set": "ПРАВИЛО",
        "outbound": "direct"
      },
      {
        "outbound": "proxy"
      }
    ],
    "rule_set": [
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      },
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      },
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      },
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      },
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      },
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      }
    ],
    "auto_detect_interface": true
  },
  "experimental": {
    "cache_file": {
      "enabled": true
    }
  }
}
2025-03-12T09:40:16.645Z
OctopusBrigade

Я не уверен, что это валидное правило, скорее всего, Sing-Box будет искать совпадение имени домена со строкой “any”.
Попробуйте:

    "rules": [
      {
        "outbound": "any",
        "server": "local-dns"
      }
    ]

Или:

    "rules": [
      {
        "domain_regex": ".*",
        "server": "local-dns"
      }
    ]
2025-03-12T09:55:59.708Z
0ka(0ka)

сервер один, если бы был tun, то никаких правил чтобы он был использован не нужно. но здесь inbound - socks, а ему нужно route rule - resolve а не procotol: dns

2025-03-12T09:58:50.839Z
Buttercup

к сожалению не одно не сработало, так же всё на сервер гонит

2025-03-12T10:04:05.017Z
Buttercup

подробнее пожалуйста

2025-03-12T10:04:46.288Z
0ka(0ka)
{
    "dns": {
        "servers": [
			{
                "address": "127.0.0.1:53",
				"detour": "direct",
                "tag": "localhost-dns"
            }
        ],
        "strategy": "ipv4_only"
    },
    "inbounds": [
        {
            "listen": "0.0.0.0",
            "listen_port": 1080,
            "tag": "mixed-in",
            "type": "mixed"
        }
    ],
    "log": {
        "disabled": false,
        "level": "debug"
    },
    "outbounds": [
		#add your outbound
        {
            "tag": "direct",
            "type": "direct"
        }
    ],
    "route": {
        "rules": [
			{
                "action": "sniff"
            },
            {
				"protocol": "dns",
                "action": "hijack-dns" # в случае если будет добавлен tun или другой inbound
            },
            {
                "inbound": "mixed-in",
				"action": "resolve"
            }
        ]
    }
}

если на сервере включен сниффинг, то в случае сингбокса sniff_override_destination быть не должно, в случае xray должен быть включен RouteOnly, иначе будет использоваться днс который на сервере

2025-03-12T10:17:11.670Z
Buttercup

спасибо за предложенные изменения, версия 1.10.4 не стартует, на 1.11.4 запустил, но поведение то же, гонит днс через прокси на сервак

вот поный конфиг после изменений, я где то накосячил?

Спойлер
{
  "log": {
    "level": "debug",
    "output": "/var/log/sing-box.log"
  },
  "dns": {
  "servers": [
      {
        "address": "127.0.0.1",
        "detour": "direct",
        "tag": "localhost-dns"
      }
     ],
        "strategy": "ipv4_only"
  },
  "inbounds": [
    {
      "type": "mixed",
      "listen": "0.0.0.0",
      "listen_port": 2080,
      "sniff": true,
      "users": []
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct"
    },
    {
      "type": "vless",
      "tag": "proxy",
      "server": "ИП СЕРВАКА",
      "server_port": 443,
      "uuid": "УАЙДИ",
      "flow": "xtls-rprx-vision",
      "packet_encoding": "xudp",
      "tls": {
        "enabled": true,
        "server_name": "САЙТ ПРИКРЫТИЯ",
        "utls": {
          "enabled": true,
          "fingerprint": "БРАУЗЕР"
        },
        "reality": {
          "enabled": true,
          "public_key": "ПУБЛИК КЛЮЧ",
          "short_id": "ШОРТ"
        }
      }
    },
    {
      "type": "block",
      "tag": "block"
    }
  ],
  "route": {
    "rules": [
      {
         "action": "sniff"
      },
      {
         "protocol": "dns",
         "action": "hijack-dns"
      },
      {
         "inbound": "mixed",
         "action": "resolve"
      },
      {
        "rule_set": "block-ads",
        "outbound": "block"
      },
      {
        "domain_suffix": ["СУФИКСЫ ДОМЕНОВ"],
        "outbound": "direct"
      },
      {
        "domain": [
          "ДОМЕН"
        ],
        "outbound": "direct"
      },
      {
        "rule_set": "ПРАВИЛО",
        "outbound": "direct"
      },
      {
        "rule_set": "ПРАВИЛО",
        "outbound": "direct"
      },
      {
        "rule_set": "ПРАВИЛО",
        "outbound": "direct"
      },
      {
        "rule_set": "ПРАВИЛО",
        "outbound": "direct"
      },
      {
        "rule_set": "ПРАВИЛО",
        "outbound": "direct"
      },
      {
        "outbound": "proxy"
      }
    ],
    "rule_set": [
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      },
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      },
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      },
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      },
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      },
      {
        "tag": "ПРАВИЛО",
        "type": "remote",
        "format": "binary",
        "url": "СЕРВЕР ОБНОВЫ ПРАВИЛ"
      }
    ],
    "auto_detect_interface": true
  },
  "experimental": {
    "cache_file": {
      "enabled": true
    }
  }
}

если outbound сменить на direct то запросы идут на 127.0.0.1

      {
        "outbound": "direct"
      }

но в моём случае должно быть outbound proxy, т.е. я использую правила исключения для коннекта на прямую а весь трафик идёт за бугор, и понятно почему днс туда же идут, но возможность настройки есть а реализовать так и не вышло

      {
        "outbound": "proxy"
      }

даже если стоит outbound proxy то правило "ip_is_private"должно отправлять 127.0.0.1 на direct, не понимаю почему этого не происходит

      {
        "ip_is_private": true,
        "outbound": "direct"
      }
2025-03-12T11:04:00.211Z
OctopusBrigade

Если к примеру конфига добавить только outbound без route правил, то проблема остается?
Если нет, то добавляйте к рабочему конфигу не всё сразу, а частями, чтобы определить проблемную часть.

2025-03-12T14:36:16.239Z
Buttercup

проблема остаётся, так же бегает на удалённый, даже без правил, оставил только dns

Спойлер
  "route": {
    "rules": [
      {
         "action": "sniff"
      },
      {
         "inbound": "mixed",
         "action": "resolve"
      },
      {
        "outbound": "proxy"
      }
    ],
  },
}
2025-03-12T16:02:21.081Z
0ka(0ka)

зачем вы добавляете последнее правило с outbound proxy? первый outbound это дефолтный, ставьте первым свой vless. я посмотрел на ваш конфиг выше и вы кажется так и не попробовали взять мой конфиг и отредачить его, а стали менять свой и поменяли не до конца (т.к. у mixed in остался sniff который уже не поддерживается, и даже нет tag и значит правило resolve никогда не сработает). ну и ещё: все десяток правил с rule_set, domain, domain_suffix можно сделать в 1 правило

2025-03-12T16:09:37.933Z
Buttercup

без данного правила не идет трафик через proxy, вот ваш конфиг вставил свой outbound и естественно без правил данный конфиг становится бесполезным, без правил не работают маршруты

мой конфиг рабочий и маршруты работают, то что их больше одного это работе не мешает, проблема только в dns

Спойлер
{
  "dns": {
    "servers": [
      {
        "address": "127.0.0.1:53",
        "detour": "direct",
        "tag": "localhost-dns"
      }
    ],
    "strategy": "ipv4_only"
  },
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "listen_port": 1080,
      "tag": "mixed-in",
      "type": "mixed"
    }
  ],
  "log": {
    "disabled": false,
    "level": "debug"
  },
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct"
    },
    {
      "type": "vless",
      "tag": "proxy",
      "server": "ИП СЕРВАКА",
      "server_port": 443,
      "uuid": "УАЙДИ",
      "flow": "xtls-rprx-vision",
      "packet_encoding": "xudp",
      "tls": {
        "enabled": true,
        "server_name": "САЙТ ПРИКРЫТИЯ",
        "utls": {
          "enabled": true,
          "fingerprint": "БРАУЗЕР"
        },
        "reality": {
          "enabled": true,
          "public_key": "ПУБЛИК КЛЮЧ",
          "short_id": "ШОРТ"
        }
      }
    },
    {
      "type": "block",
      "tag": "block"
    }
  ],
  "route": {
    "rules": [
      {
        "inbound": "mixed",
         "action": "sniff"
      },
      {
         "inbound": "mixed",
         "action": "resolve"
      },
    ]
  }
}
2025-03-12T16:35:25.275Z
0ka(0ka)

зато мне мешают когда я читаю конфиг

потому что вы ставите vless вторым outbound.

inbound с тегом “mixed-in”, в правиле вы пишете “mixed”

2025-03-12T16:36:02.048Z
Buttercup

Спасибо вам огромное! с вашими рекомендациями всё получилось, DNS остаётся в локале, ниже выложу рабочий конфиг для DNS на 127.0.0.1 может кому пригодится

Спойлер
{
  "dns": {
    "servers": [
      {
        "address": "127.0.0.1:53",
        "detour": "direct",
        "tag": "localhost-dns"
      }
    ],
    "strategy": "ipv4_only"
  },
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "listen_port": 2080,
      "tag": "mixed",
      "type": "mixed"
    }
  ],
  "log": {
    "disabled": false,
    "level": "debug"
  },
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct"
    },
    {
      "type": "vless",
      "tag": "proxy",
      "server": "ИП СЕРВАКА",
      "server_port": 443,
      "uuid": "УАЙДИ",
      "flow": "xtls-rprx-vision",
      "packet_encoding": "xudp",
      "tls": {
        "enabled": true,
        "server_name": "САЙТ ПРИКРЫТИЯ",
        "utls": {
          "enabled": true,
          "fingerprint": "БРАУЗЕР"
        },
        "reality": {
          "enabled": true,
          "public_key": "ПУБЛИК КЛЮЧ",
          "short_id": "ШОРТ"
        }
      }
    },
    {
      "type": "block",
      "tag": "block"
    }
  ],
  "route": {
    "rules": [
      {
        "inbound": "mixed",
         "action": "sniff"
      },
      {
         "inbound": "mixed",
         "action": "resolve"
      },
    ]
  }
}
2025-03-12T17:03:07.243Z
Dr4tez(Dr4tez)

В вашем последнем конфиге в конце ошибка- запятая после }, закрывающей последнее правило. Ещё по этому конфигу весь трафик пойдет в директ.
А с DNS "address": "local" не пробовали? Вот поправил немного последний конфиг, не люблю когда маячат лишние, ни на что не влияющие строки, убрал их. Применил более логичное правило в конце, убрал лишнюю запятую и сделал чтобы весь трафик шёл в proxy. Конфиг для версии 1.11.

{
  "log": {
    "level": "debug"
  },
  "dns": {
    "servers": [
      {
        "address": "local"
      }
    ],
    "strategy": "ipv4_only"
  },
  "inbounds": [
    {
      "type": "mixed",
      "listen": "0.0.0.0",
      "listen_port": 2080
    }
  ],
  "outbounds": [
    {
      "type": "vless",
      "server": "ИП СЕРВАКА",
      "server_port": 443,
      "uuid": "УАЙДИ",
      "flow": "xtls-rprx-vision",
      "tls": {
        "enabled": true,
        "server_name": "САЙТ ПРИКРЫТИЯ",
        "utls": {
          "enabled": true,
          "fingerprint": "БРАУЗЕР"
        },
        "reality": {
          "enabled": true,
          "public_key": "ПУБЛИК КЛЮЧ",
          "short_id": "ШОРТ"
        }
      }
    }
  ],
  "route": {
    "rules": [
      {
         "action": "sniff"
      },
      {
         "protocol": "dns",
         "action": "hijack-dns"
      }
    ]
  }
}
2025-03-12T19:18:58.015Z
0ka(0ka)

эти новые конфиги это уже флуд, сингбокс ту запятую сожрёт нормально, а ваш конфиг неправильный т.к. будет гонять днс через сервер (а точнее пакеты сокс прокси с доменом внутри, а не c ip), вы удалили ключевое правило resolve…
я рабочий уже давал Настройка DNS на Sing-Box - #6 by 0ka и учёл что в будущем могут добавить tun и правила роутинга с доменами

2025-03-12T20:44:01.642Z
Dr4tez(Dr4tez)

Вы бы хоть сначала попробовали, а потом делали заключения о том, что и как в нём работает и работает ли вообще. На убунту не имел возможности проверить, но если очень захочу, то проверю и на нём. Но андроиде работает как задумано последним конфигом Buttercup, только трафик идёт не в директ, а в туннель. Dns запросы при проверке поймал именно на домашнем dns сервере, а не на поднятом на vps. Честь вам и хвала, что учли возможное добавление tun, я предпочитаю не учитывать возможное, а только то, что имеем.
Можете задать вопросы по смущающим вас частям конфига или их отсутствию. Я приведу свои аргументы, вы свои, может я что-то новое узнаю. Я же не утверждаю, что познал sing-box полностью и что мои решения единственно верные. Но этот конфиг рабочий. А основной его смысл в предложении использовать “address”: “local” вместо прописывания ip адреса локалхоста, так что я бы не сказал что мой пост с конфигом- флуд.

2025-03-13T03:58:51.522Z
0ka(0ka)

логи вашего конфига:


на клиенте в логе никаких упоминаний о днс, а на сервер пришел пакет с доменным именем и резолвинг произошёл именно там, неожиданно?
проверялось через curl -x socks5h://127.0.0.1 2ip.me, буква h в socks5h важна т.к. она включает резолвинг через сокс прокси а не через системный днс, вы скорее всего не учли данный момент когда тестировали (т.е. ваш софт не умеет socks5h, а только socks5)

2025-03-13T08:46:30.489Z
Dr4tez(Dr4tez)

Я, честно говоря, впервые слышу про socks5h. Расскажу как я тестировал. Этот свой конфиг запускал в приложении sing-box на ТВ боксе с 9 андроидом. Подключался к нему как к socks5 серверу с приложения sing-box на мобильнике. Конфигом на мобильнике весь трафик, включая и днс запросы, направляется в туннель до sing-box на тв-боксе. Всё это находится в домашней сети. Так же в домашней сети в lxc контейнере proxmox на мини-пк работает Adgurad Home, локальный ip которого роутером назначается всем устройствам dns сервером. И на vps работает AGH в качестве dns сервера для туннелируемого туда трафика. Если в sing-box на тв-боксе запущен этот конфиг, являющийся по факту серверным, а на мобильнике запущен конфиг, являющийся для него клиентским, и я в браузере на мобильнике открываю конкретные сайты, то днс запросы к этим конкретным сайтам фиксируются в AGH дома, а в AGH на vps не фиксируются. Если в этом конфиге вместо “address”: “local” я вписываю “address”: “127.0.0.1”, то выходит наоборот- днс запросы фиксируются в AGH на vps, а в AGH дома не фиксируются. Логично же сделать вывод, что в первом случае резолв идёт через локалхост, а во втором через туннель на vps?

2025-03-13T12:26:44.826Z
0ka(0ka)

Логично только на половину т.к. у вас не используется socks5h (а напр в firefox используется именно он если в настройках вписать сокс прокси и поставить галку resolve through socks), в вашем случае (прозрачный прокси или же tun через socks) при загрузке 1 сайта происходит два запроса к прокси серверу: днс запрос (который ловится правилами sniff и hijack-dns) и https запрос на ip адрес, в случае с firefox и curl (socks5h) при загрузке 1 сайта происходит один запрос к прокси серверу: https запрос на доменное имя (которое может быть поймано через правило resolve).
Ваш конфиг работает только для socks5, мой конфиг работает для socks5 и socks5h (и скорее всего для http прокси тоже). Если не учитывать это и прописать прокси напр firefox или другом софте, то вы не заметите как будет использоваться удаленный днс и правила роутинга по ip перестанут работать.
Надеюсь это последний пост в теме и для остальных повторяю что рабочий конфиг Настройка DNS на Sing-Box - #6 by 0ka

2025-03-13T15:16:30.420Z
Dr4tez(Dr4tez)

Точно. Проверить через просто прокси расширение (FoxyProxy) в файрфоксе как-то в голову не пришло, не пользуюсь я такими методами. Проверил. Действительно, при подключении к конфигу через FoxyProxy, днс запросы при “address”: “local” уходят в AGH на vps. Делаю вывод, что это зависит от реализации клиента. Если клиент на sing-box, в моём случае с tun inbound и socks5 outbound, то работает как я описал выше, если клиент, например, FoxyProxy в браузере, тот тут уже “address”: “local” не канает без дополнительных правил в серверном конфиге. Хорошо, ваш конфиг самый лучший). И спасибо за науку, реально полезно. А всем остальным- не пользуйтесь моим конфигом ни в коем случае, а то я вас плохому научу). За сим откланиваюсь.

2025-03-13T16:01:33.047Z