Ротация прокси-IP без VPN: что видит выход
Меняйте выходы прокси без VPN: что может прочитать HTTP-прокси, как липкие сессии предотвращают сломанное состояние и какой выход вы сможете защитить в политике.
Ротация прокси и VPN меняют ваш публичный адрес на разных уровнях, и эта разница определяет, что утекает. VPN переносит каждый пакет в туннель, поэтому адрес источника, который видит цель, — это конечная точка туннеля. Прокси находится выше сетевого уровня: из выхода видны только запросы, которые вы отправляете через него, а всё остальное на машине сохраняет настоящий адрес. Если правильно выстроить это разделение, ротация превращается из галочки в проектное решение.
Откуда на самом деле берётся публичный адрес
Адрес, который видит цель, — это тот, откуда ваш трафик вышел в последний раз, а в домашнем подключении это адрес провайдера на вашем роутере, а не что-то, чем владеет машина. Перезагрузка роутера может вернуть ту же аренду, а смена его MAC-адреса иногда создаёт новый, но ни то ни другое не даёт выбора страны. VPN подменяет адрес источника на уровне IP, поэтому каждый пакет с машины, включая DNS и фоновые обновления, выходит из конечной точки туннеля. Прокси работает на уровень выше: он принимает запрос, открывает своё соединение с целью, и только этот запрос появляется из выхода. Всё остальное на машине по-прежнему использует настоящий адрес.
Это разделение объясняет большинство сюрпризов. Расширение браузера, направленное на прокси, меняет только то, что отправляет браузер, и ничего больше, поэтому второе приложение на том же хосте всё ещё выдаёт исходный адрес. Системный VPN имеет обратный режим отказа: он покрывает трафик, который вы хотели оставить локальным, и закрывается только если клиент так настроен. Выбор между ними — это на самом деле выбор того, какой трафик должен двигаться.
Затем ротация применяется к тому уровню, который вы выбрали. С прокси ротация означает, что следующий запрос использует другой выход. С VPN это означает снести и заново построить туннель, что медленнее и проявляется как заметное переподключение.
Что HTTP-прокси может прочитать, а что нет
При обычном HTTP прокси видит абсолютный URI в строке запроса, каждый заголовок и тело. Он может всё это записать и переписать любую часть, поэтому бесплатный прокси, который внедряет скрипт в ответы, делает ровно то, что разрешает протокол. Аутентификация использует Proxy-Authorization, а отсутствующие или неверные учётные данные дают 407 Proxy Authentication Required вместо ошибки соединения.
При HTTPS клиент отправляет CONNECT host:port и прокси открывает необработанный туннель, после чего видит зашифрованные байты. Он всё ещё узнаёт имя хоста из строки CONNECT и обычно из поля SNI в TLS-рукопожатии, поэтому журналирование на уровне имени хоста сохраняется, даже если полезная нагрузка — нет. Чтобы прочитать нагрузку, нужно завершить TLS сертификатом, которому клиент доверяет, а это другой продукт с другим риском. А спецификация семантики HTTP определяет CONNECT как запрос туннеля, и это правильная мысленная модель того, что выход может и чего не может видеть.
curl -v -x http://proxy.example.net:8080 https://example.com 2>&1 | grep -E 'CONNECT|Proxy-'
Подробный вывод показывает строку CONNECT до любого трафика TLS, и именно в этот момент прокси узнаёт ваш пункт назначения. Прокси, который отвечает 407, так и не открыл туннель, поэтому повтор с другими настройками TLS не поможет.
Гранулярность ротации решает, что сломается
Ротация на каждый запрос — это настройка, которая выглядит самой безопасной и ломает больше всего. Файлы cookie, CSRF-токены и серверные сессии привязаны к идентичности, а идентичность, которая меняется между входом и следующим вызовом, для цели выглядит как угон сессии. Многие провайдеры предлагают липкую сессию, кодируя её в имени пользователя прокси, поэтому выход остаётся фиксированным на выбранное окно.
Выбирайте гранулярность по задаче, а не по умолчанию провайдера. Краулер, который забирает независимые страницы, может ротироваться на каждый запрос, а платёжному потоку или аутентифицированному API нужно удерживать один выход на весь поток. Два вызова ниже показывают липкое имя пользователя и обычную ротирующую конечную точку, а socks5h схема разрешает имена на прокси, а не локально.
curl -sS -x http://user-session-a1b2:[email protected]:8080 https://ifconfig.me
curl -sS -x socks5h://127.0.0.1:1080 https://ifconfig.me
Локальный DNS — это тихая утечка. Если клиент разрешает имя до подключения, резолвер всё равно узнаёт каждый хост, который вы посещаете, даже если HTTP-запрос уходит в другое место. А socks5h форма и разрешение на стороне прокси избегают этого, и их использование ничего не стоит.
Что цель классифицирует помимо адреса
Репутация адреса — один из нескольких входов. Цели объединяют ASN и его метку дата-центра или жилого, TLS-отпечаток клиента, настройки HTTP/2, порядок заголовков, частоту запросов и форму навигации. Жилой выход под управлением браузера без интерфейса может провалиться там, где выход из дата-центра под управлением настоящей сессии проходит.
Тип выхода определяет, что вы можете честно утверждать о трафике, и каждый несёт свою цену.
| Exit type | What the target sees | Main cost |
|---|---|---|
| Datacenter proxy | Hosting ASN, cheap, often pre-blocked | Low reputation, easy to detect |
| Residential network | A consumer ISP address belonging to someone else | Consent and terms-of-service exposure |
| Mobile carrier | A carrier NAT address shared by many subscribers | Price, plus shared blame for abuse |
| Your own cloud egress | An address you are accountable for | Recognisable, but defensible |
Общий выход не нейтрален. Всё остальное, что работает с этого адреса, попадает в ту же корзину репутации, а адрес, который другие арендаторы уже сожгли, проваливается раньше, чем будет прочитан ваш первый запрос.
Выберите выход, который вы сможете описать в политике
Полезный вопрос не в том, как скрыть адрес, а в том, кто отвечает за трафик, который из него выходит. Ваш собственный облачный выход на задачу, подрядчик с договором об обработке данных и опубликованным сроком хранения, и самостоятельно размещённый VPN с одной идентичностью на задачу — всё это описывается одним предложением. Бесплатный список — нет, потому что у его оператора нет перед вами обязательств и есть все стимулы вести журналы.
Держите свои ограничения скорости ниже того, что терпит цель, и собирайте только те поля, которые нужны задаче, чтобы ошибка оставалась маленькой. Более быстрая ротация, чтобы уйти от блокировки, обычно повышает частоту запросов, которая её вызвала.
Запишите выбранный выход, его окно ротации и его владельца в конфигурацию задачи перед первым запуском. Когда придёт блокировка, именно эта заметка скажет вам, менять выход или менять поведение.