Спам DNS запросами со стороны xray

Недавно заглянул во вкладку биллинга в Ya Cloud, чтобы посмотреть, куда утекают мои бабки, и обнаружил порядка 4,3 млн DNS-запросов, и счет в 200 рублей.

Сразу полез на сервер и через tcpdump -i any -n dst port 53 -c 200 2>/dev/null увидел, что каждую секунду летят запросы на резолв домена (включая IPv6, так как я забыл отключить его резолв), указанного в dest.

15:33:47.780098 eth0 Out IP 10.129.0.27.35431 > 10.129.0.2.53: 64945+ [1au] AAAA? nl-02.xxxx.xx. (47)
15:33:47.780192 eth0 Out IP 10.129.0.27.52251 > 10.129.0.2.53: 2639+ [1au] A? nl-02.xxxx.xx. (47)
15:33:47.839331 eth0 Out IP 10.129.0.27.48230 > 10.129.0.2.53: 50716+ [1au] A? ads.x5.ru. (38)
15:33:47.839335 eth0 Out IP 10.129.0.27.53474 > 10.129.0.2.53: 23481+ [1au] AAAA? ads.x5.ru. (38)
15:33:48.018471 eth0 Out IP 10.129.0.27.44640 > 10.129.0.2.53: 10603+ [1au] AAAA? ads.x5.ru. (38)
15:33:48.018492 eth0 Out IP 10.129.0.27.49273 > 10.129.0.2.53: 3916+ [1au] A? ads.x5.ru. (38)
15:33:48.031039 eth0 Out IP 10.129.0.27.59905 > 10.129.0.2.53: 850+ [1au] A? ads.x5.ru. (38)
15:33:48.031038 eth0 Out IP 10.129.0.27.42801 > 10.129.0.2.53: 42695+ [1au] AAAA? ads.x5.ru. (38)
15:33:48.113647 eth0 Out IP 10.129.0.27.37921 > 10.129.0.2.53: 29170+ [1au] AAAA? ads.x5.ru. (38)
15:33:48.113653 eth0 Out IP 10.129.0.27.50082 > 10.129.0.2.53: 27440+ [1au] A? ads.x5.ru. (38)
15:33:48.140722 eth0 Out IP 10.129.0.27.44192 > 10.129.0.2.53: 56328+ [1au] A? nl-02.xxxxx.xx. (47)
15:33:48.140722 eth0 Out IP 10.129.0.27.34350 > 10.129.0.2.53: 49471+ [1au] AAAA? nl-02.xxxx.xx. (47)
15:33:48.383839 eth0 Out IP 10.129.0.27.58838 > 10.129.0.2.53: 38293+ [1au] A? ads.x5.ru. (38)
15:33:48.383881 eth0 Out IP 10.129.0.27.58896 > 10.129.0.2.53: 7203+ [1au] AAAA? ads.x5.ru. (38)

Думаю, многие об этом знали, но всё же рекомендую разрезолвить домен вашего dest заранее и вписать IP-адрес напрямую (хардкодом). Возможно, есть решения лучше, но это самое простое, что можно сделать. В моем случае для ads.x5.ru это выглядит так: "dest": "91.206.100.25:443". Думаю сработает только в том случае, если целевой домен не прячется за cdn и не меняет ip-адреса по кд.

Также стоит проверить конфигурацию цепных прокси. В моем случае использовался мост, где в настройках outbound был указан домен вместо айпи. Это создавало двойную нагрузку: ядро каждую секунду генерировало запросы на резолв не только для dest, но и для самого исходящего соединения, что в сумме и набило те самые 4.3 млн запросов в биллинге.

Посмотрю, какой будет результат, но могу также добавить: это проблема не только лишних трат, но и фактического выявления ядра xray на вашей машине. Причем для этого даже не нужно проникать в систему, достаточно посмотреть данные биллинга. Да, угрозу по эвристике создают не только DNS-запросы, но, как мне кажется, это один из самых “палевных” факторов.

А вы не попробовали писать в hosts:

...
  "dns": {
    "hosts": {
      "ads.x5.ru": [
        "91.206.100.25"
      ]
    },
...

Я бы также рекомендовал настроить DoH в конфигурации.

Это тоже как вариант. С Doh щас посмотрю, но мне кажется что через него обрабатываются запросы непосредственно из туннеля, а не для обработки запросов самого ядра.

Посмотрел на 2 сервере, на нем doh прописан таким образом:

  "dns": {
    "servers": [
      "https://1.1.1.1/dns-query",
      "https://dns.google/dns-query"
    ],
    "disableCache": false,
    "queryStrategy": "UseIP",
    "disableFallback": false
  },

И все равно xray игнорирует его, обращаясь к системному резольверу:

16:19:53.689774 eth0 Out IP 10.128.0.9.44543 > 10.128.0.2.53: 18745+ [1au] A? ads.x5.ru. (38)

Как крайний вариант - прибить в /etc/hosts

Не думаю что это чем то отличается от хардкода внутри dest, только если дает возможность создать скрипт для периодического резольва домена и его изменения в hosts, что бы не менять айпи вручную при изменении.

Можно DNS inbound сделать и настроить перехват запросов на встроенный DNS-сервер, либо что-то наподобие dnsproxy использовать.

Просто включить DoT в systemd-resolved. Или установите любой другой системный резолвер, с поддержкой любого шифрованного DNS. Ну либо раскурите, как работает sniffing.

Тему можно закрыть.