Файл hosts против фильтра на роутере: блокировка сайта через VPN
Запись hosts отвечает локально и переживает любой туннель. Фильтр на роутере видит только то, что проходит через роутер, поэтому VPN, заканчивающийся на ноутбуке, скрывает имя.
Запись в файле hosts и фильтр на роутере блокируют один и тот же сайт по совершенно разным причинам, поэтому один продолжает работать под VPN, а другой тихо перестаёт. Файл hosts отвечает на имя раньше, чем хоть один пакет покинет машину. Фильтр на роутере проверяет трафик, который через него проходит. Поставьте туннель между этими двумя точками, и второй теряет обзор, а первый ничего не замечает.
Где разрешается имя, решает всё
Каждая блокировка начинается с вопроса: кто превращает имя в адрес? На обычном настольном компьютере отвечает системный резолвер, который идёт по заданному порядку и обычно читает файл hosts раньше, чем обращается к DNS. В фильтруемой сети ответ может дать роутер, который видит запрос только тогда, когда клиент отправляет его через него без защиты. Измените путь — измените, кому разрешено отвечать.
VPN делает здесь две вещи сразу: он смещает маршрут по умолчанию и может навязать свой DNS-сервер. Любого из этих изменений достаточно, чтобы увести разрешение имён от устройства, которое применяло блокировку.
Это механизм знакомой жалобы: фильтр работает, пока не подключится VPN.
Запись hosts отвечает раньше, чем существует туннель
Строку вида 127.0.0.1 www.example.com читает локальный резолвер, поэтому ответ создаётся на машине без участия сети. Подключите туннель, смените DNS-сервер, смените сеть: запись всё равно возвращает loopback. Поэтому блокировка через hosts — единственная из двух, на которую не влияет место окончания VPN.
Её слепые зоны столь же локальны. Приложение, которое несёт свой резолвер, говорит по DNS over HTTPS или подключается к буквальному адресу, никогда не спрашивает систему, поэтому запись не используется. Адрес в кэше работающего процесса даёт тот же эффект, пока этот процесс не перезапустится.
Подтвердите ответ с помощью getent ahosts в Linux или Resolve-DnsName в Windows, а не доверяя вкладке браузера.
Фильтр на роутере видит только то, что через него проходит
Фильтр содержимого или URL на домашнем роутере сопоставляет имена и запросы, которые проходят через него в читаемом виде. Когда клиент строит шифрованный туннель к серверу в другом месте, роутер видит один поток к этому серверу и ничего внутри. Фильтру не с чем сопоставлять имя, поэтому он пропускает трафик, и это выглядит как отказ фильтра, а не как обход.
Работает другая топология: роутер сам держит туннель, расшифровывает на конце и применяет фильтр там. В такой схеме фильтр стоит там, где появляется открытый текст.
Если туннель заканчивается на ноутбуке, роутер по определению находится вне защищённого пути, как бы ни было записано правило.
Четыре точки применения и что каждая упускает
Четыре места могут применить блокировку, и каждое отказывает по-своему. Читайте список как карту покрытия, а не как рейтинг.
- Файл hosts или локальный резолвер: работает офлайн и под любым туннелем, но обходится встроенным резолвером или жёстко заданным адресом.
- Фильтрация DNS на шлюзе VPN: охватывает клиентов, использующих навязанный резолвер, и упускает клиентов, обходящих DNS.
- Правила выхода на шлюзе по адресу или SNI: независимы от DNS клиента, но слепы к именам, которые не могут прочитать, и к адресам, которые не выучили.
- Управляемая политика браузера или устройства: сильна на управляемом оборудовании, отсутствует на личных устройствах.
Ни одно из этого не является границей безопасности против целеустремлённого пользователя на неуправляемом устройстве. Это средства политики, и честное описание говорит, какой трафик каждое из них действительно покрывает.
Выберите слой, соответствующий замыслу: домашнее удобство принадлежит устройству, а организационное правило — шлюзу.
Проверьте оба состояния, прежде чем считать это готовым
Запустите те же три команды с подключённым и отключённым VPN: getent ahosts, чтобы увидеть ответ резолвера, nslookup, чтобы увидеть, что возвращает запрос, и curl -I к сайту, чтобы увидеть, завершается ли ещё соединение. Если первая возвращает loopback, а третья подключается к настоящему адресу, что-то обошло резолвер, и запись hosts не та контроль, о которой вы думаете.
На роутере прочитайте счётчики фильтра до запроса и после. Счётчик, который никогда не двигается, означает, что трафик так и не дошёл до фильтра, и это ответ маршрутизации, а не правила.
Запишите результат вместе с топологией, потому что следующее изменение VPN снова сдвинет путь.