diff --git a/docs/ru/config/fakedns.md b/docs/ru/config/fakedns.md new file mode 100644 index 0000000..9d7a3a4 --- /dev/null +++ b/docs/ru/config/fakedns.md @@ -0,0 +1,202 @@ +# FakeDNS + +FakeDNS подменяет DNS-записи, чтобы получить целевое доменное имя, что позволяет сократить время DNS-запросов и получить целевое доменное имя при использовании прозрачного проксирования. + +::: warning +FakeDNS может загрязнить локальный DNS-кэш, что может привести к "недоступности сети" после отключения Xray. +::: + +## FakeDNSObject + +`FakeDNSObject` соответствует полю `fakedns` в конфигурационном файле. + +```json +{ + "ipPool": "198.18.0.0/16", + "poolSize": 65535 +} +``` + +`FakeDnsObject` также может быть настроен как массив, содержащий несколько пулов FakeIP. +При получении DNS-запроса FakeDNS вернет набор FakeIP, полученных из нескольких пулов FakeIP. + +```json +[ + { + "ipPool": "198.18.0.0/15", + "poolSize": 65535 + }, + { + "ipPool": "fc00::/18", + "poolSize": 65535 + } +] +``` + +> `ipPool`: CIDR + +FakeDNS будет использовать этот блок IP-адресов для выделения адресов. + +> `poolSize`: int + +Максимальное количество сопоставлений "домен - IP", которые FakeDNS может хранить в памяти. +Когда количество сопоставлений превышает это значение, старые сопоставления удаляются по алгоритму LRU. +Значение по умолчанию - 65535. + +::: warning +`poolSize` должен быть меньше или равен общему количеству адресов в `ipPool`. +::: + +::: tip +Если в поле `dns` конфигурационного файла указано `fakedns`, но `FakeDnsObject` не настроен, Xray инициализирует `FakeDnsObject` в соответствии с параметром `queryStrategy` компонента DNS. + +Если `queryStrategy` равен `UseIP`, инициализированный пул FakeIP будет эквивалентен: + +```json +[ + { + "ipPool": "198.18.0.0/15", + "poolSize": 32768 + }, + { + "ipPool": "fc00::/18", + "poolSize": 32768 + } +] +``` + +Если `queryStrategy` равен `UseIPv4`, инициализированный пул FakeIP будет эквивалентен: + +```json +{ + "ipPool": "198.18.0.0/15", + "poolSize": 65535 +} +``` + +Если `queryStrategy` равен `UseIPv6`, инициализированный пул FakeIP будет эквивалентен: + +```json +{ + "ipPool": "fc00::/18", + "poolSize": 65535 +} +``` + +::: + +### Как использовать FakeDNS? + +По сути, FakeDNS - это [DNS-сервер](./dns.md#serverobject), который можно использовать с любыми правилами DNS. + +Чтобы FakeDNS работал, необходимо направить DNS-запросы на него. + +```json +{ + "dns": { + "servers": [ + "fakedns", // fakedns на первом месте + "8.8.8.8" + ] + }, + "outbounds": [ + { + "protocol": "dns", + "tag": "dns-out" + } + ], + "routing": { + "rules": [ + { + "type": "field", + "inboundTag": ["dns-in"], // Перехват DNS-трафика, поступающего от DNS-входа или от входящего подключения прозрачного прокси. + "port": 53, + "outboundTag": "dns-out" + } + ] + } +} +``` + +Когда внешний DNS-запрос поступает в компонент FakeDNS, он возвращает IP-адрес из своего пула `ipPool` в качестве фиктивного результата разрешения доменного имени и сохраняет сопоставление между доменным именем и фиктивным IP-адресом. + +Кроме того, вам нужно включить `Sniffing` во входящем подключении, которое принимает трафик, который нужно проксировать, и использовать `fakedns` для замены целевого адреса **на стороне клиента**. + +```json +"sniffing": { + "enabled": true, + "destOverride": ["fakedns"], // Используйте "fakedns" или в сочетании с другими снифферами, или используйте "fakedns+others". + "metadataOnly": false // Если этот параметр равен true, то в destOverride можно использовать только fakedns. +}, +``` + +::: warning +Если FakeIP не будет правильно заменен на доменное имя, подключение к серверу не будет установлено. +::: + +### Использование FakeDNS с другими типами DNS + +#### Совместное использование с разделением DNS + +При использовании разделения DNS, чтобы `fakedns` имел высокий приоритет, нужно добавить для него тот же параметр `domains`, что и для других типов DNS. + +```json +{ + "servers": [ + { + "address": "fakedns", + "domains": [ + // То же самое, что и в разделе разделения DNS ниже. + "geosite:cn", + "domain:example.com" + ] + }, + { + "address": "1.2.3.4", + "domains": ["geosite:cn"], + "expectIPs": ["geoip:cn"] + }, + { + "address": "1.1.1.1", + "domains": ["domain:example.com"] + }, + "8.8.8.8" + ] +} +``` + +#### Черный список FakeDNS + +Если вы не хотите, чтобы FakeDNS использовался для определенных доменов, вы можете добавить параметр `domains` к другим типам конфигурации DNS, чтобы указать, что эти домены должны иметь более высокий приоритет при сопоставлении с другими DNS-серверами, чем с FakeDNS, тем самым реализовав механизм черного списка FakeDNS. + +```json +{ + "servers": [ + "fakedns", + { + "address": "1.2.3.4", + "domains": ["domain:do-not-use-fakedns.com"] + } + ] +} +``` + +#### Белый список FakeDNS + +Если вы хотите, чтобы FakeDNS использовался только для определенных доменов, вы можете добавить параметр `domains` к `fakedns`, чтобы указать, что эти домены должны иметь более высокий приоритет при сопоставлении с `fakedns`, чем с другими DNS-серверами, тем самым реализовав механизм белого списка FakeDNS. + +```json +{ + "servers": [ + "1.2.3.4", + { + "address": "fakedns", + "domains": ["domain:only-this-use-fakedns.com"] + } + ] +} +``` + + + +