XRay: настройка перехвата DNS

Вчера РКН превратил мою настройку XTLS-Reality в тыкву, что я сразу связал с новостью о запрете ECH. Все запросы упали с подобными ошибками:

В качестве клиента использую Nekobox, настройки DNS с которыми ранее все работало:

На VPS развернут xray с конфигурацией:

{
  "log": {
    "loglevel": "trace",
    "dnsLog": true
  },
  "routing": {
    "rules": [],
    "domainStrategy": "AsIs"
  },
  "inbounds": [
    {
      "port": 443,
      "protocol": "vless",
      "tag": "vless_tls",
      "settings": {
        "clients": [
          {
            "id": "********-****-****-****-********",
            "email": "someuser@myserver",
            "flow": "xtls-rprx-vision"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
                "realitySettings": {
                        "show": false,
                        "dest": "www.somedomain.org:443",
                        "xver": 0,
                        "serverNames": [
                                "www.somedomain.org",
                                "somedomain.org"
                        ],
						"privateKey": "*******************************************",
                        "minClientVer": "",
                        "maxClientVer": "",
                        "maxTimeDiff": 0,
                        "shortIds": [
                                "****************"
                        ]
                }
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls"
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "tag": "block"
    }
  ]
}

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

Пытаюсь найти способ решить эту проблему, но похоже знаний и экспертизы не хватает уже, к тому же с DNS работал мало. Мои идеи сейчас:

  1. Попробовать настроить FakeDNS, запускать Nekobox в TUN режиме с FakeDNS настройкой. К сожалению пока безрезультатно.
  2. Перенаправлять все DNS запросы через SOCKS, на самой же впске их поднять

Возможно кто-то уже решил проблему, буду раз если поделитесь конфигами или советами.

P.S:

На данный момент пытался настроить fakedns по гайдам, нерабочее решение:

{
  "log": {
    "loglevel": "trace",
    "dnsLog": true
  },
  "routing": {
    "rules": [
      {
        "type": "field",
        "inboundTag": ["dns-in"],
        "port": 53,
        "outboundTag": "dns-out"
      }
    ],
    "domainStrategy": "AsIs"
  },
  "dns": {
    "servers": [
      "fakedns",
      "8.8.8.8"
    ],
    "queryStrategy": "UseIPv4"
  },
  "fakedns": [
    {
      "ipPool": "198.18.0.0/16",
      "poolSize": 65535
    }
  ],
  "inbounds": [
    {
      "port": 443,
      "protocol": "vless",
      "tag": "vless_tls",
      "settings": {
        "clients": [
          {
            "id": "********-****-****-****-********",
            "email": "someuser@myserver",
            "flow": "xtls-rprx-vision"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
                "realitySettings": {
                        "show": false,
                        "dest": "www.somedomain.org:443",
                        "xver": 0,
                        "serverNames": [
                                "www.somedomain.org",
                                "somedomain.org"
                        ],
                        "privateKey": "*******************************************",
                        "minClientVer": "",
                        "maxClientVer": "",
                        "maxTimeDiff": 0,
                        "shortIds": [
                                "****************"
                        ]
                }
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls",
          "fakedns"
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "tag": "block"
    },
    {
       "protocol": "dns",
       "tag": "dns-out"
    }
  ]
}

А если отключить dns маршрутизацию на втором скрине? Тогда dns запросы будут разрешаться на вашем сервере xray (если не используется tun режим, тогда имена будут разрешаться на вашей машине, используя сервер в поле “удалённый dns”)

Увы, без результатов, сделал сейчас тест:

  1. Вернул старый конфиг(без настроек fakedns)
  2. Отключил всю маршрутизацию DNS
  3. Запустил клиент в TUN режиме

В основных настройках отключил режим прослушивания, ранее стояло “подслушивать для маршрутизации”:

Снимок экрана 2024-11-07 122654

сейчас проверил, на ядре sing-box у меня вообще утечка dns. переключился на xray - все стало работать как надо. у вас какое ядро стоит?

обновлено: в nekobox 4 переделали много. тут я не помогу, надо тестировать, а обновлять старый клиент не хочется. у вас получается сервер на xray, а клиент на singbox, возможно в этом проблема. попробуйте другой клиент, на xray. Лично я использую v2rayN.

из патчноута nekobox 4:

  • Core больше не поддерживает Xray
  • DNS больше не совместим localhost
  • Тип DNS local изменен для использования реализации Single-Box. Если в режиме TUN возникают проблемы, рекомендуется использовать другие типы DNS.

и я так понимаю, у вас nekobox 4 версии, которая бета? просто у меня необновленный 3.26, поля настроек немного другие. возможно и логику работы где-то поменяли. но работает с текущими настройками прекрасно. На сервере в конфиге xray вообще dns не настроен (то есть используется системный резолвер). Маршрутизация части доменов в warp, а части напрямую - работает (все настроено на сервере).
nekoray_bLAow3hfjW

Сейчас переключился на ядро xray, но все по прежнему осталось. У меня тоже часть траффика идет напрямую, часть через прокси, вообще не вижу чтобы там что-то сейчас шло.

В основных настройках режим подслушивания отключил

Делаю для интереса Url test:

2024/11/07 10:00:33 DNS accepted https://8.8.8.8/dns-query [dns -> bypass]
2024/11/07 10:00:33 DNS accepted https://8.8.8.8/dns-query [dns -> bypass]
2024/11/07 10:00:33 [Error] app/dns: failed to retrieve response for p2p-sto2.discovery.steamserver.net. > Post "https://8.8.8.8/dns-query": context canceled
2024/11/07 10:00:36 [Warning] app/proxyman/outbound: failed to process outbound traffic > proxy/vless/outbound: failed to find an available destination > common/retry: [EOF] > common/retry: all retry attempts failed
[[VLESS] MyVLESS] ошибка теста: Get "http://cp.cloudflare.com/": io: read/write on closed pipe

Похоже еще используется dns сервер системы, который настроен как 8.8.8.8

Версия: NekoRay (3.26-2023-12-09)

Не совсем понимаю логику, у вас получается вообще никак не настроены правила DNS на сервере, но ресолв происходит на нем?

как вы определили что проблема в днс? у вас точно не лежит сервер? или может сайт для маскировки вас заблокировал или лежит? в конфиге пропишите ip адрес сервера, а не домен, и попробуйте зайти на сайт который не требует днс, напр http://1.1.1.2/cdn-cgi/trace

Да, если не трогать dns в конфиге xray, он просто использует линуксовые системные ресолверы.
Насколько я понимаю, это поведение по-умолчанию. Запросы от клиента проксируются без разрешения доменных имён в ip адреса, это делает сервер, и отсылает в ответе уже все готовое. Если ресолвить домены на клиенте, то надо как-то проксировать и запросы к dns, что не очень удобно. Логично это делать на сервере.

Связал с новостью о ECH и увидел вчера ошибки, как на самом персом скриншоте в топике. У меня стояла включенная маршрутизация DNS. 1.1.1.1 не был прописан ни в системе, ни на сервере

Но сейчас странное получил с вашим тестом http://1.1.1.2/cdn-cgi/trace

Открываю в браузере и все ок.

Но добавляю в настройки маршрутов Nekobox (IP - Proxy) - доступа нет.

Сейчас смотрю нет ли проблем с самим сервером. xray работает:

На всякий случай перезапустил firewalld, добавил 443 порт в исключения:
firewall-cmd --add-port=443/tcp

Телнетом он открывается

Могу только сказать что настраивал по гайду с хабра Bleeding-edge обход блокировок с полной маскировкой: настраиваем сервер и клиент XRay с XTLS-Reality быстро и просто / Хабр

Про DNS ни слова не было, каким образом настраивал я Nekobox я уже не вспомню, но маршрутизацию включил не просто так. Если по дефолту DNS ресолвиться должен на сервере, то ситуация конечно странная, буду разбираться дальше

Проверьте всё таки маскировочный домен. На нем должен работать TLS 1.3 и HTTP/2, проверить можно на Qualys SSL Labs Или такая удобная штука, если браузер лиса: GitHub - jannispinter/indicatetls: Addon for Mozilla Firefox that displays the TLS protocol version of websites you visit

В общем похоже ситуация разрешена. Все таки пришла мне идея проверить домен под которым я маскировался в reality и оказалось что он просто слег. Может там блокировки повлияли. Сменил в конфиге xray и клиента на новый и все заработало. Работает причем независимо от того, выбираю ли я включение маршрутизации DNS в клиенте или нет. Ошибки с dns-query смутили и отправили вообще по иному пути

Но раз топик завел попробую выяснить точно ли ресолвится все на сервере, а не у меня на системе

В таком случае пытаюсь понять что значат эти настройки:

Удаленный DNS: указывает, что ресолвинг происходит на сервере для соединений, которые добавлены у меня как маршруты через прокси? При этом ресолв будет происходит на 1.1.1.1?

DNS для прямых запросов: то что для политики напрямую, что я не хочу проксировать(доменную зону ru например). В таком случае используются настройки DNS системы?

Осталось разобраться с Final DNS Out

Про DNS в Nekoray.pdf (314,0 КБ)
Тут хорошо написано.

А какое ядро лучше - xray или sign-box?

Особо не изучал тему, но sing-box говорят быстрее. И в нем есть правила типа domain_suffix, что тоже удобно. Кратко говоря, sing-box по идее лучше. Но если он хреново работает, то и xray нормальная тема.

Ну да, sing-box в целом более функционален, зато под xray больше клиентов и серверного софта.

Благодарю. Похоже скорости лучше все таки отключать маршрутизацию через удаленный DNS сервис, даже если там DoH.

Про Firefox тоже полезное дополнение, т.к через него в основном и хожу всегда на сайты. Не хотелось бы конечно SOCKS5 открывать на впске, оставив только XTLS-Reality

Firefox вообще тема для работы с прокси, особенно если освоить Firefox Containers с расширением вроде “Container proxy”.

Mihomo