FakeDNS
FakeDNS подменяет DNS-записи, чтобы получить целевое доменное имя, что позволяет сократить время DNS-запросов и получить целевое доменное имя при использовании прозрачного проксирования.
Внимание
FakeDNS может загрязнить локальный DNS-кэш, что может привести к "недоступности сети" после отключения Xray.
FakeDNSObject
FakeDNSObject
соответствует полю fakedns
в конфигурационном файле.
{
"ipPool": "198.18.0.0/16",
"poolSize": 65535
}
FakeDnsObject
также может быть настроен как массив, содержащий несколько пулов FakeIP.
При получении DNS-запроса FakeDNS вернет набор FakeIP, полученных из нескольких пулов FakeIP.
[
{
"ipPool": "198.18.0.0/15",
"poolSize": 65535
},
{
"ipPool": "fc00::/18",
"poolSize": 65535
}
]
ipPool
: CIDR
FakeDNS будет использовать этот блок IP-адресов для выделения адресов.
poolSize
: int
Максимальное количество сопоставлений "домен - IP", которые FakeDNS может хранить в памяти.
Когда количество сопоставлений превышает это значение, старые сопоставления удаляются по алгоритму LRU.
Значение по умолчанию - 65535.
Внимание
poolSize
должен быть меньше или равен общему количеству адресов в ipPool
.
Подсказка
Если в поле dns
конфигурационного файла указано fakedns
, но FakeDnsObject
не настроен, Xray инициализирует FakeDnsObject
в соответствии с параметром queryStrategy
компонента DNS.
Если queryStrategy
равен UseIP
, инициализированный пул FakeIP будет эквивалентен:
[
{
"ipPool": "198.18.0.0/15",
"poolSize": 32768
},
{
"ipPool": "fc00::/18",
"poolSize": 32768
}
]
Если queryStrategy
равен UseIPv4
, инициализированный пул FakeIP будет эквивалентен:
{
"ipPool": "198.18.0.0/15",
"poolSize": 65535
}
Если queryStrategy
равен UseIPv6
, инициализированный пул FakeIP будет эквивалентен:
{
"ipPool": "fc00::/18",
"poolSize": 65535
}
Как использовать FakeDNS?
По сути, FakeDNS - это DNS-сервер, который можно использовать с любыми правилами DNS.
Чтобы FakeDNS работал, необходимо направить DNS-запросы на него.
{
"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
для замены целевого адреса на стороне клиента.
"sniffing": {
"enabled": true,
"destOverride": ["fakedns"], // Используйте "fakedns" или в сочетании с другими снифферами, или используйте "fakedns+others".
"metadataOnly": false // Если этот параметр равен true, то в destOverride можно использовать только fakedns.
},
Внимание
Если FakeIP не будет правильно заменен на доменное имя, подключение к серверу не будет установлено.
Использование FakeDNS с другими типами DNS
Совместное использование с разделением DNS
При использовании разделения DNS, чтобы fakedns
имел высокий приоритет, нужно добавить для него тот же параметр domains
, что и для других типов DNS.
{
"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.
{
"servers": [
"fakedns",
{
"address": "1.2.3.4",
"domains": ["domain:do-not-use-fakedns.com"]
}
]
}
Белый список FakeDNS
Если вы хотите, чтобы FakeDNS использовался только для определенных доменов, вы можете добавить параметр domains
к fakedns
, чтобы указать, что эти домены должны иметь более высокий приоритет при сопоставлении с fakedns
, чем с другими DNS-серверами, тем самым реализовав механизм белого списка FakeDNS.
{
"servers": [
"1.2.3.4",
{
"address": "fakedns",
"domains": ["domain:only-this-use-fakedns.com"]
}
]
}