Что на самом деле делает fake-ip

При включённом fake-ip программа спрашивает адрес example.com, а ядро ничего не разрешает. Оно отдаёт неиспользованный адрес из зарезервированного диапазона, обычно 198.18.0.0/16. Когда программа подключается к этому адресу, ядро смотрит в собственную таблицу, восстанавливает имя домена и сопоставляет правила именно с именем.

Экономится один настоящий запрос. Нет запроса — нет и шанса получить отравленный ответ, и не надо ждать поездки до авторитетного сервера за границей. Плата в том, что всё, чему нужен настоящий адрес, теперь видит заглушку из 198.18. Обнаружение устройств в локальной сети, часть P2P-программ и фаза прямого соединения в некоторых играх на этом ломаются.

Партнёрский материалОткуда взять ссылку на подписку?Партнёрский сервис даёт 1 ГБ высокоскоростного трафика Гонконга при регистрации — импорт в один клик.Получить быстрые серверы

Рабочая отправная точка

dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "+.pool.ntp.org"
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://dns.google/dns-query
    - tls://1.0.0.1:853

nameserver — набор резолверов по умолчанию, обычно те, что быстрее отвечают в вашей сети. В fallback кладут шифрованные резолверы по DoH или DoT для имён, локальному ответу на которые доверять не хочется. Это не основной и резервный: ядро само решает, какому ответу верить, поэтому всё, что попало в fallback, должно быть источником, которому вы действительно доверяете.

Что класть в fake-ip-filter

  • Локальные имена. *.lan, *.local, имя, под которым открывается админка роутера. Выдайте им поддельный адрес — и до собственного железа вы больше не достучитесь.
  • Сервисы, которым нужен настоящий адрес: синхронизация времени, часть механизмов обнаружения во внутренней сети, трекеры загрузчиков.
  • Домены, которые ваши правила и так отправляют напрямую. Они всё равно уходят через локальную сеть, и заглушка ничего не даёт.
  • Игры. Здесь общего ответа нет. Некоторые проекты попадают в лобби по имени, а на матчевый сервер идут по чистому IP, и с fake-ip дорогу они не находят. Если игра перестала заходить в комнаты под TUN, первым делом добавьте её домены сюда.

Когда возвращаться к redir-host

redir-host — старый подход: имя разрешается по-настоящему, само имя запоминается, и при пересылке правила всё равно сопоставляются с именем. Он медленнее и оставляет вас под риском отравленного ответа, но адреса настоящие, поэтому сюрпризов с совместимостью заметно меньше.

Решение тут несложное. Если вы просто сидите в интернете, смотрите видео и работаете с инструментами разработчика — с fake-ip хлопот меньше. Если вы гоняете P2P, играете по сети, возитесь с десятком устройств в локалке или уже набили в filter дюжину исключений, лишь бы fake-ip не мешал, переходите на redir-host и не спорьте с ним дальше.

nameserver-policy для исключений

Некоторые имена дают правильный ответ только от конкретного резолвера: очевидный случай — домены корпоративной сети, и туда же сайты, чей CDN отдаёт вменяемый узел только локальному резолверу. nameserver-policy закрепляет резолвер за шаблоном домена, и это гораздо точнее, чем менять весь список nameserver.

  nameserver-policy:
    "+.corp.example.com": 10.0.0.53
    "geosite:cn": [223.5.5.5, 119.29.29.29]
После правки блока dns закройте существующие соединения перед проверкой, иначе вы измеряете кэш от прежней конфигурации. Кэш системы тоже стоит сбросить — в Windows это ipconfig /flushdns. И помните: адрес из 198.18, который возвращает nslookup при включённом fake-ip, — это работающий замысел, а не поломка.