VPN внутрь Tor, Tor внутрь VPN: почему цепочка рвётся
Когда VPN, Tor и прокси ставят друг на друга, порядок решает, что разрешается и что переносится. Найдите первую нарушенную границу, прежде чем менять все три.
Наслоение VPN, Tor и прокси приложения кажется умножением приватности, а на деле умножает число мест, где соединение может умереть. Обычный результат — браузер, который крутится, пока все три инструмента сообщают, что здоровы. Если изменить все три настройки сразу, исчезнет единственная подсказка о том, какой из них лжёт.
Сначала нарисуйте предполагаемый путь по порядку, назвав, какая программа открывает каждое соединение и какое имя разрешается на каждом шаге.
Слои не складываются, они взаимодействуют
VPN перед Tor означает, что входное соединение клиента Tor идёт внутри туннеля. VPN, переносимый через Tor, означает, что собственная конечная точка клиента VPN должна быть доступна через Tor, а это совсем другое требование. Прокси браузера добавляет ещё один скачок, о котором операционная система ничего не знает. Три схемы, три отдельных списка зависимостей.
Каждая схема меняет то, что можно разрешить, что можно перенести и кто видит первый пакет. Только одна из них может быть той конфигурацией, которую вы имели в виду.
Добавьте на схему и прямой путь. Резервный маршрут, исключение для разделённого туннеля или обход прокси могут загрузить страницу, тихо пропуская цепочку, которую вы хотели проверить, и такой успех вводит в заблуждение сильнее, чем отказ.
Порядок решает, что можно перенести
Tor переносит потоки TCP через свой интерфейс SOCKS, и клиент, который просит прокси разрешить имя хоста, оставляет запрос внутри цепи. UDP в обычных конфигурациях так не ходит, поэтому туннель WireGuard нельзя вложить в Tor без дополнительного TCP-ретранслятора посередине.
OpenVPN можно принудительно перевести на TCP, так что такая схема хотя бы описуема. Она также медленнее и хрупче, а картина отказа при обрыве выглядит так же, как заблокированный порт. Ожидайте, что на различение этих двух уйдёт больше времени, чем на починку любого из них.
Разрешение — вторая половина. С --socks5-hostname прокси разрешает адрес назначения, тогда как обычный --socks5 сначала спрашивает локальный распознаватель и утекает имя за пределы цепи. Именно этот один флаг решает, принадлежит ли запрос имени цепочке или вашему провайдеру.
| Order | What must resolve the endpoint | What usually breaks |
|---|---|---|
| VPN, then Tor | The tunnel's resolver | Entry guards blocked by the VPN provider's filters |
| Tor, then VPN | The SOCKS proxy, remotely | UDP transports, which Tor does not carry |
| App proxy on top | The application itself | Proxy bypass rules and cached connections |
Как найти первую нарушенную границу
Проверяйте этапы в том порядке, в каком идут пакеты, безобидными запросами и останавливайтесь на первом отказе. Запишите, какая команда выполнилась первой, потому что порядок — часть доказательства. Две команды отделяют мёртвую цепь от мёртвого выхода:
curl -s --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/api/ip curl -4 -s https://api.ipify.org; echo
Первая сообщает, завершается ли запрос через прокси SOCKS вообще, а вторая показывает адрес, который сеть представляет сейчас. Если первая не удалась, а вторая удалась, проблема у клиента Tor или до него. Если обе удались, а браузер всё равно не работает, приложение использует другой путь, чем оболочка.
Страница публичного IP тоже описывает только последний видимый выход. Она не может сказать, сколько скачков ему предшествовало, поэтому сочетайте её с поддерживаемым выводом состояния каждого инструмента, а не считайте одно число схемой.
Когда перестать добавлять слои
Если вы не можете одной фразой сказать, что даёт слой, уберите его. Цепочка с неясной целью — это цепочка, которую никто не отладит в три часа ночи, а выигрыш в приватности от необъяснимого скачка обычно меньше потерянной доступности.
Если слой действительно заслуживает своё место, сначала проверьте его отдельно, затем добавьте следующий и снова подтвердите путь теми же двумя командами. Восстановите полную цепочку перед обычным использованием и оставьте проверку TLS и аутентификацию включёнными; предупреждение о сертификате, принятое ради загрузки страницы, — это обход маршрутизации, а не починка. Запишите порядок, на котором вы остановились, пока он свеж.
Запишите этот порядок, включая распознаватель, который отвечает на каждом этапе. Работающая цепочка, которую вы можете описать, переживёт следующее обновление, а работающая цепочка, собранная перебором, исчезнет вместе с ним. Добавьте дату и версии, чтобы более поздний отказ можно было сравнить с известным хорошим состоянием, а не спорить о нём по памяти. Десять строк в текстовом файле экономят вечер догадок.