Помогите настроить работу с dns в sing-box на OpenWRT умоляю

Всем привет бандиты!

Уже пару недель читаю этот чудесный форум и решил таки зарегистрироваться и задать вопрос, ибо самому разобраться в проблемах не выходит пока. Кроме того, даже человек, который писал несколько гайдов по sing-box на гитхабе не смог мне помочь, либо ему было просто лень объяснять новичку :sweat_smile:
Надеюсь, тут кто-нибудь согласится потратить немного своего личного времени и поможет мне с тремя вопросами по настройке =)

Мой setup:
Установил последнюю openwrt на народный AX3000t, после чего накатил и настроил чистый sing-box (точечная маршрутизация мне не нужна, поэтому tproxy и nftables не настраивал). Кроме того, я не устанавливал никаких расширений для спуфинга dns типа DNScrypt2.

Все предварительные настройки sing-box тоже реализовал. Кратко перечислю, чтобы меня не считали уж совсем нубом:

/etc/config/sing-box:

config sing-box 'main'
	option enabled '1'
	option user 'root'
	option conffile '/etc/sing-box/config.json'
	option workdir '/usr/share/sing-box'

/etc/config/firewall:

config zone
        option name 'tun'
        option forward 'ACCEPT'
        option output 'ACCEPT'
        option input 'ACCEPT'
        option masq '1'
        option mtu_fix '1'
        option device 'tun0'
        option family 'ipv4'

config forwarding
        option name 'lan-tun'
        option dest 'tun'
        option src 'lan'
        option family 'ipv4'

Теперь о том, что я хочу достичь:

Банально ровной работы конфигов экспортированных из nekoray/ nekobox. Однако при чистом sing-box и попытках указать в конфиге правило работы dns конфиг просто не заводится и трафик через сервер не идёт. Остается ip провайдера. Я по-всякому пробовал менять значения работы с dns в конфиге, но dns просто не подхватываются и в итоге соединение идёт мимо конфига.

Вопрос №1:

Я так понимаю, что чистый sing-box не умеет сам обрабатывать dns запросы из конфига и нужно отдельно настраивать dns сервер верно? Если это так подскажите мне пожалуйста как это сделать? :slightly_smiling_face: Насколько я догадываюсь для этого необходимо изменить настройки dnsmasq?

Далее, у меня есть конфиг для теста, VPS сервер которого может сам делать запросы dns локально. И на чистом sing-box у меня заводятся только такие конфиги. Все другие, где жёстко заданы правила делать запросы к google или CF не работают.

Вот этот конфиг (вместе с сылками формата vless и nekoray для удобства если заходите проверить их сами):

Спойлер
vless://76ad8213-4617-47eb-92cc-5392b39b45ce@172.67.73.163:80?security=&type=ws&path=/?ed%3D2048&host=eLOQuENt-caSE.ZUlaIR.orG.&encryption=none#%F0%9F%94%92%20VL-WS-NONE%20%F0%9F%8F%B4%E2%80%8D%E2%98%A0%EF%B8%8F%20NA-172.67.73.163:80

nekoray://vless#eyJfdiI6MCwiYWRkciI6IjE3Mi42Ny43My4xNjMiLCJuYW1lIjoi8J-UkiBWTC1XUy1OT05FIPCfj7TigI3imKDvuI8gTkEtMTcyLjY3LjczLjE2Mzo4MCIsInBhc3MiOiI3NmFkODIxMy00NjE3LTQ3ZWItOTJjYy01MzkyYjM5YjQ1Y2UiLCJwb3J0Ijo4MCwic3RyZWFtIjp7ImVkX2xlbiI6MCwiaG9zdCI6ImVMT1F1RU50LWNhU0UuWlVsYUlSLm9yRy4iLCJpbnNlY3VyZSI6ZmFsc2UsIm11eF9zIjowLCJuZXQiOiJ3cyIsInBhdGgiOiIvP2VkPTIwNDgifX0=

{
    "dns": {
        "independent_cache": true,
        "rules": [
            {
                "outbound": "any",
                "server": "dns-direct"
            },
            {
                "query_type": [
                    32,
                    33
                ],
                "server": "dns-block"
            },
            {
                "domain_suffix": ".lan",
                "server": "dns-block"
            }
        ],
        "servers": [
            {
                "address": "https://8.8.8.8/dns-query",
                "address_resolver": "dns-local",
                "detour": "proxy",
                "strategy": "ipv4_only",
                "tag": "dns-remote"
            },
            {
                "address": "https://8.8.8.8/dns-query",
                "address_resolver": "dns-local",
                "detour": "direct",
                "strategy": "ipv4_only",
                "tag": "dns-direct"
            },
            {
                "address": "rcode://success",
                "tag": "dns-block"
            },
            {
                "address": "local",
                "detour": "direct",
                "tag": "dns-local"
            }
        ]
    },
    "inbounds": [
        {
            "domain_strategy": "",
            "listen": "127.0.0.1",
            "listen_port": 2080,
            "sniff": true,
            "sniff_override_destination": false,
            "tag": "mixed-in",
            "type": "mixed"
        },
        {
            "auto_route": true,
            "domain_strategy": "",
            "endpoint_independent_nat": true,
            "inet4_address": "172.19.0.1/28",
            "interface_name": "neko-tun",
            "mtu": 9000,
            "sniff": true,
            "sniff_override_destination": false,
            "stack": "gvisor",
            "strict_route": false,
            "tag": "tun-in",
            "type": "tun"
        }
    ],
    "log": {
        "level": "info"
    },
    "outbounds": [
        {
            "domain_strategy": "",
            "flow": "",
            "packet_encoding": "",
            "server": "172.67.73.163",
            "server_port": 80,
            "tag": "proxy",
            "transport": {
                "early_data_header_name": "Sec-WebSocket-Protocol",
                "headers": {
                    "Host": "eLOQuENt-caSE.ZUlaIR.orG."
                },
                "max_early_data": 2048,
                "path": "/",
                "type": "ws"
            },
            "type": "vless",
            "uuid": "76ad8213-4617-47eb-92cc-5392b39b45ce"
        },
        {
            "tag": "direct",
            "type": "direct"
        },
        {
            "tag": "bypass",
            "type": "direct"
        },
        {
            "tag": "block",
            "type": "block"
        },
        {
            "tag": "dns-out",
            "type": "dns"
        }
    ],
    "route": {
        "auto_detect_interface": true,
        "final": "proxy",
        "geoip": {
            "path": "C:/Users/user/Downloads/nekoray-3.26-2023-12-09-windows64/nekoray/geoip.db"
        },
        "geosite": {
            "path": "C:/Users/user/Downloads/nekoray-3.26-2023-12-09-windows64/nekoray/geosite.db"
        },
        "rules": [
            {
                "outbound": "direct",
                "process_name": [
                    "uTorrent"
                ]
            },
            {
                "outbound": "dns-out",
                "protocol": "dns"
            },
            {
                "network": "udp",
                "outbound": "block",
                "port": [
                    135,
                    137,
                    138,
                    139,
                    5353
                ]
            },
            {
                "ip_cidr": [
                    "224.0.0.0/3",
                    "ff00::/8"
                ],
                "outbound": "block"
            },
            {
                "outbound": "block",
                "source_ip_cidr": [
                    "224.0.0.0/3",
                    "ff00::/8"
                ]
            }
        ]
    }
}

Открывая этот конфиг в nekoray заходя на browserleaks в информации об утечке DNS я вижу только локальные запросы от VPS сервера без любых сторонних хвостов от google или Cloudflare:

Однако, когда я экспортирую outbound этого конфига в sing-box (/etc/sing-box/config.json) на роутере и запускаю его, у меня помимо серверных dns появляются ещё локальные dns моего провайдера:

Вопрос №2
Как правильно настроить sing-box чтобы dns запросы себя вели так же, как они ведут себя в nekoray при работе с этим конфигом? То есть чтобы в утечке dns были только серверные dns запросы как на скриншоте из примера выше?
Уже всю голову сломал и не выходит. Если я в конфиге блокирую dns запросы провайдера, то и от vps сервера dns запросы пропадают.

Вопрос №3

Ну и последняя ситуация это конфиги, где жёстко заданы правила запросов днс от google либо Cloudflare.

Как добиться того, чтобы при указании в конфиге sing-box определённых правил работы с dns через google или Cloudflare это работало? Например, вот как в этом конфиге (тоже экспортировал с nekoray):

Спойлер
vless://0132166f-e702-48ed-a9e7-b07af768faf8@45.150.115.251:8880?security=&type=ws&path=/Telegram%F0%9F%87%A8%F0%9F%87%B3%20@WangCai2%20/?ed%3D2560&host=cf.d3z.net&encryption=none#%F0%9F%94%92%20VL-WS-NA%20%F0%9F%87%A8%F0%9F%87%BE%20CY-45.150.115.251:8880

nekoray://vless#eyJfdiI6MCwiYWRkciI6IjQ1LjE1MC4xMTUuMjUxIiwibmFtZSI6IvCflJIgVkwtV1MtTkEg8J-HqPCfh74gQ1ktNDUuMTUwLjExNS4yNTE6ODg4MCIsInBhc3MiOiIwMTMyMTY2Zi1lNzAyLTQ4ZWQtYTllNy1iMDdhZjc2OGZhZjgiLCJwb3J0Ijo4ODgwLCJzdHJlYW0iOnsiZWRfbGVuIjowLCJob3N0IjoiY2YuZDN6Lm5ldCIsImluc2VjdXJlIjpmYWxzZSwibXV4X3MiOjAsIm5ldCI6IndzIiwicGF0aCI6Ii9UZWxlZ3JhbfCfh6jwn4ezIEBXYW5nQ2FpMiAvP2VkPTI1NjAifX0=

{
    "dns": {
        "independent_cache": true,
        "rules": [
            {
                "outbound": "any",
                "server": "dns-direct"
            },
            {
                "query_type": [
                    32,
                    33
                ],
                "server": "dns-block"
            },
            {
                "domain_suffix": ".lan",
                "server": "dns-block"
            }
        ],
        "servers": [
            {
                "address": "https://8.8.8.8/dns-query",
                "address_resolver": "dns-local",
                "detour": "proxy",
                "strategy": "ipv4_only",
                "tag": "dns-remote"
            },
            {
                "address": "https://8.8.8.8/dns-query",
                "address_resolver": "dns-local",
                "detour": "direct",
                "strategy": "ipv4_only",
                "tag": "dns-direct"
            },
            {
                "address": "rcode://success",
                "tag": "dns-block"
            },
            {
                "address": "local",
                "detour": "direct",
                "tag": "dns-local"
            }
        ]
    },
    "inbounds": [
        {
            "domain_strategy": "",
            "listen": "127.0.0.1",
            "listen_port": 2080,
            "sniff": true,
            "sniff_override_destination": false,
            "tag": "mixed-in",
            "type": "mixed"
        },
        {
            "auto_route": true,
            "domain_strategy": "",
            "endpoint_independent_nat": true,
            "inet4_address": "172.19.0.1/28",
            "interface_name": "neko-tun",
            "mtu": 9000,
            "sniff": true,
            "sniff_override_destination": false,
            "stack": "gvisor",
            "strict_route": false,
            "tag": "tun-in",
            "type": "tun"
        }
    ],
    "log": {
        "level": "info"
    },
    "outbounds": [
        {
            "domain_strategy": "",
            "flow": "",
            "packet_encoding": "",
            "server": "45.150.115.251",
            "server_port": 8880,
            "tag": "proxy",
            "transport": {
                "early_data_header_name": "Sec-WebSocket-Protocol",
                "headers": {
                    "Host": "cf.d3z.net"
                },
                "max_early_data": 2560,
                "path": "/Telegram🇨🇳 @WangCai2 /",
                "type": "ws"
            },
            "type": "vless",
            "uuid": "0132166f-e702-48ed-a9e7-b07af768faf8"
        },
        {
            "tag": "direct",
            "type": "direct"
        },
        {
            "tag": "bypass",
            "type": "direct"
        },
        {
            "tag": "block",
            "type": "block"
        },
        {
            "tag": "dns-out",
            "type": "dns"
        }
    ],
    "route": {
        "auto_detect_interface": true,
        "final": "proxy",
        "geoip": {
            "path": "C:/Users/user/Downloads/nekoray-3.26-2023-12-09-windows64/nekoray/geoip.db"
        },
        "geosite": {
            "path": "C:/Users/user/Downloads/nekoray-3.26-2023-12-09-windows64/nekoray/geosite.db"
        },
        "rules": [
            {
                "outbound": "direct",
                "process_name": [
                    "uTorrent"
                ]
            },
            {
                "outbound": "dns-out",
                "protocol": "dns"
            },
            {
                "network": "udp",
                "outbound": "block",
                "port": [
                    135,
                    137,
                    138,
                    139,
                    5353
                ]
            },
            {
                "ip_cidr": [
                    "224.0.0.0/3",
                    "ff00::/8"
                ],
                "outbound": "block"
            },
            {
                "outbound": "block",
                "source_ip_cidr": [
                    "224.0.0.0/3",
                    "ff00::/8"
                ]
            }
        ]
    }
}

Как я написал выше, подозреваю, что нужно дополнить настройки в разделе dnsmasq, но я пока не особо понял как это правильно сделать. Буду очень рад если подскажете =)

Заранее спасибо!

PS: Конфиги который я закинул для примера расшарены и бесплатны.
PS2: Это моя первая тема и я мог ошибиться с категорией, надеюсь модератор поправит если нужно =)

Я бы не парился, снес все, и накатил с нуля так сказать.

Команды для openwrt:

openwrt
opkg update
opkg install sing-box

uci set sing-box.main.enabled="1"
uci set sing-box.main.user="root"
uci commit sing-box

uci set network.proxy=interface
uci set network.proxy.proto="none"
uci set network.proxy.device="tun0"
uci set network.proxy.defaultroute="0"
uci set network.proxy.delegate="0"
uci set network.proxy.peerdns="0"
uci set network.proxy.auto="1"
uci commit network
service network restart

uci add firewall zone
uci set firewall.@zone[-1].name="proxy"
uci set firewall.@zone[-1].forward="REJECT"
uci set firewall.@zone[-1].output="ACCEPT"
uci set firewall.@zone[-1].input="ACCEPT"
uci set firewall.@zone[-1].masq="1"
uci set firewall.@zone[-1].mtu_fix="1"
uci set firewall.@zone[-1].device="tun0"
uci set firewall.@zone[-1].family="ipv4"
uci add_list firewall.@zone[-1].network="tun0"
uci add firewall forwarding
uci set firewall.@forwarding[-1].dest="proxy"
uci set firewall.@forwarding[-1].src="lan"
uci set firewall.@forwarding[-1].family="ipv4"
uci commit firewall
service firewall reload 

Пример конфига sing-box (1.11.*):

config.json
{
  "log": {
    "level": "warning",
    "timestamp": true
  },
  "dns": {
    "final": "cloudflare-proxy",
    "strategy": "ipv4_only",
    "servers": [
      {
        "tag": "yandex-direct",
        "address": "tls://77.88.8.8",
        "detour": "direct-out"
      },
      {
        "tag": "cloudflare-proxy",
        "address": "tls://1.1.1.1",
        "detour": "proxy"
      }
    ],
    "rules": [
      {
        "action": "route",
        "server": "yandex-direct",
        "rule_set": [
          "geosite-category-ru"
        ]
      }
    ]
  },
  "inbounds": [
    {
      "tag": "all-in",
      "type": "tun",
      "address": [
        "172.18.0.1/30"
      ],
      "auto_route": true,
      "strict_route": true,
      "stack": "system",
      "mtu": 9000
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct-out"
    },
    {
      "type": "vless",
      "tag": "proxy",
      "server": "SERVER IP",
      "server_port": 443,
      "uuid": "uuid",
      "flow": "xtls-rprx-vision",
      "tls": {
        "enabled": true,
        "server_name": "server name",
        "utls": {
          "enabled": true,
          "fingerprint": "fingerp"
        },
        "reality": {
          "enabled": true,
          "public_key": "eee",
          "short_id": "eee"
        }
      },
      "packet_encoding": "xudp"
    }
  ],
  "route": {
    "final": "direct-out",
    "auto_detect_interface": true,
    "rules": [
      {
        "action": "sniff"
      },
      {
        "protocol": "dns",
        "action": "hijack-dns"
      },
      {
        "action": "reject",
        "protocol": [
          "quic"
        ]
      },
      {
        "action": "route",
        "outbound": "direct-out",
        "rule_set": [
          "geosite-category-ru"
        ]
      },
      {
        "action": "route",
        "outbound": "proxy",
        "rule_set": [
          "refilter_domains",
          "refilter_ipsum"
        ]
      }
    ],
    "rule_set": [
      {
        "tag": "refilter_domains",
        "type": "remote",
        "format": "binary",
        "url": "https://github.com/1andrevich/Re-filter-lists/releases/latest/download/ruleset-domain-refilter_domains.srs",
        "download_detour": "proxy"
      },
      {
        "tag": "refilter_ipsum",
        "type": "remote",
        "format": "binary",
        "url": "https://github.com/1andrevich/Re-filter-lists/releases/latest/download/ruleset-ip-refilter_ipsum.srs",
        "download_detour": "proxy"
      },
            {
        "tag": "geosite-category-ru",
        "type": "remote",
        "format": "binary",
        "url": "https://github.com/runetfreedom/russia-v2ray-rules-dat/raw/refs/heads/release/sing-box/rule-set-geosite/geosite-category-ru.srs",
        "download_detour": "proxy"
      }
    ]
  },
  "experimental": {
    "cache_file": {
      "enabled": true
    }
  }
}

Спасибо за ответ! Скажите, а на OpenWRT вы это пробовали запускать? Потому что по конфигам у меня установлено всё то же самое что вы и прописали сейчас. Но проблема в dns, они не идут… В этом и вопрос моего топика собственно =)

Да, прямо сейчас на роутере использую. Я не эксперт по OpenWrt и сетям если что, просто нашел рабочие (по крайней мере для себя) команды.

А можете попробовать мои конфиги запустить и посмотреть какой будет результат? Я во всех видах 2 конфига слил, те что экспортил из nekoray.

Я просто пытаюсь разобраться с тем как работать с днс.. потому что они у меня тупо не подгружаются. Видимо я что-то неправильно настроил.

да, давайте, потрите данные для подключения к серверу только.

upd: а, затупил, оно в теме есть, ща

В общем, вопросы всё ещё актуальны, разобраться пока не смог в них =(

По совету rewhat изменил настройки на openwrt на такие:

/etc/config/network:

config interface 'proxy'
        option proto 'none'
        option device 'tun0'
        option delegate '0'
        option peerdns '0'
        option defaultroute '0'

/etc/config/firewall:

config zone
        option name 'proxy'
        option forward 'REJECT'
        option output 'ACCEPT'
        option input 'ACCEPT'
        option masq '1'
        option mtu_fix '1'
        option device 'tun0'
        option family 'ipv4'
        list network 'tun0'

config forwarding
        option dest 'proxy'
        option src 'lan'
        option family 'ipv4'

Конфиг с сервером (он бесплатный мне не жалко, так что выкладываю как есть):

Спойлер
{
  "log": {
    "level": "warning",
    "timestamp": true
  },
  "dns": {
    "final": "cloudflare-proxy",
    "strategy": "ipv4_only",
    "servers": [
      {
        "tag": "cloudflare-proxy",
        "address": "tls://1.1.1.1",
        "detour": "proxy"
      }
    ]
  },
  "inbounds": [
    {
      "tag": "all-in",
      "type": "tun",
      "address": [
        "172.18.0.1/30"
      ],
      "auto_route": true,
      "strict_route": true,
      "stack": "system",
      "mtu": 9000
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct-out"
    },
        {
            "domain_strategy": "",
            "flow": "",
            "packet_encoding": "",
            "server": "45.150.115.251",
            "server_port": 8880,
            "tag": "proxy",
            "transport": {
                "early_data_header_name": "Sec-WebSocket-Protocol",
                "headers": {
                    "Host": "cf.d3z.net"
                },
                "max_early_data": 2560,
                "path": "/Telegram =^gM-( =^gM-3 @WangCai2 /",
                "type": "ws"
            },
            "type": "vless",
            "uuid": "0132166f-e702-48ed-a9e7-b07af768faf8"
        },
  ],
 "route": {
    "final": "proxy",
    "auto_detect_interface": true,
    "rules": [
      {
        "action": "sniff"
      },
      {
        "protocol": "dns",
        "action": "hijack-dns"
      },
      {
        "action": "reject",
        "protocol": [
          "quic"
        ]
      }
    ]
  },
  "experimental": {
    "cache_file": {
      "enabled": true
    }
  }
}

В итоге получилось с поддержкой rewhat привести его в такой вид и он таки конектится к серверу, но всё опять упирается в изначальную проблему с которой я пришёл на этот форум для поиска решения: нет DNS запросов :smiling_face_with_tear:

Вот скрин с browserleaks:

Если напишите мне 27 июня, то пришлю вам инструкцию как реализовать прокси DNS на VPS/VDS в связке AdGuard Home + Sing-box.
Может получится адаптировать под роутер.

синг бокс это как бы не главный днс сервер в openwrt, там есть dnsmasq в котором у тебя прописан днс провайдера, его нужно убрать, а локальный днс сингбокса у тебя скорее всего там не прописан вообще и никак не используется. можно не убирать днс прова а снизить ему приоритет, но почему-то на сайтах типа browserleaks всё равно есть утечки, я точно не знаю как это работает.

короче убери днс с wan, создай static ip interface tun0 в luci, пропиши там айпи адрес (172.19.0.1) и маску (255.255.255.240) как в конфиге sing-box и укажи днс сервер (172.19.0.0)

В общем, конфиги завести получилось. Секрет был в том, что конфиг нужно было как он есть перенести в config.json и поменять только данные в inbound на настройки роутера. После этого конфиг заработал.

Но пока так и не получилось добиться на sing-box такого же поведения с запросами днс как это работает на nekoray. Программа nekoray каким-то образом может делать локальные днс запросы на самом vps сервере после чего в утечке днс нету 50 серверов от google / CF:

И я никак не могу понять, как это повторить на sing-box. Конфиг то работает экспортированный в sing-box, но ДНС запросы выдаёт такие:

К чему коммент непонятно, ответа на свой пост не вижу, инфы которая могла бы помочь с ответом на новый вопрос тоже, да и на старый тоже

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

Следующая и последняя проблема, которую я пытаюсь решить, это сделать так, что бы днс запросы шли непосредственно с vps сервера, а не заранее заданные типа google или Cloudflare. Пытаюсь добиться того же результата, который получается по днс при работе этого конфига в nekoray.

Вы так и не внесли никакой полезной информации. Если непонятно: нужно прислать последнюю версию клиентского и серверного конфигов, настройки днс в openwrt.

Мне кажется вы не понимаете как работает днс, то что вы хотите невозможно понять

Извиняюсь, видимо действительно я не до конца понимаю, как работает днс =)

Вот из конфига /etc/sing-box/config.json:

{
 "dns": {
        "independent_cache": true,
        "rules": [
            {
                "outbound": "any",
                "server": "dns-direct"
            }
        ],
        "servers": [
            {
                "address": "https://8.8.8.8/dns-query",
                "address_resolver": "dns-local",
                "detour": "proxy",
                "strategy": "ipv4_only",
                "tag": "dns-direct"
            },
            {
                "address": "local",
                "detour": "proxy",
                "tag": "dns-local"
            }
        ],
    },

А где можно посмотреть серверный? я просто использую конфиг купленный отдельно, у меня нет доступа к серверу. Просто если он работает в nekoray, то я получаю только серверные днс, как на скрине:

А если тот же конфиг я испоьзую в sing-box, то у меня получается с выше указанным днс следующее:

Вероятно на сервере перехватывается udp dns, вы прописали у себя https dns который сервер не сможет перехватить

А как правильно переписать конфиг в этом случае сможете подсказать? =)

Пробуй address: “1.1.1.1”
Только правильности конфигу это не добавит, я не понимаю почему вы думаете что что-то неправильно

Если я просто меняю на 1.1.1.1 то днс перестают идти вообще:

Если вместе с этим я меняю detour на direct, то появляются ru днс от CF:

Просто что 1.1.1.1 чтол 8.8.8.8 это всё заведомо заданные днс сервера от гугла и cf, но суть как раз в том, что nekoray запросы днс получает именно серверные с меткой провайдера сервера SAS. И я пытаюсь такой же результат достичь.

Ну для начала стоит ответить все что я просил выше, и как выглядят настройки некобокса, наверняка там может быть udp dns прописан, или вообще включен http proxy который не использует локальный днс вообще

Это не даст абсолютно ничего