kosareva.cloud

OpenAI через VPN и прокси: почему ломается, как настроить и когда не нужен

VPN пускает вас на сайт, но API живёт по другим правилам: 403 по IP, обрывы соединения и чужие лимиты. Разбираем, как задать прокси в SDK и когда проще обойтись без него.

/ Короткий ответ

Что это значит

OpenAI API через VPN ломается по трём причинам. Первая — регион: если хотя бы часть запросов уходит с российского IP, приходит 403 с кодом unsupported_country_region_territory, и OpenAI может ограничить аккаунт. Вторая — соединение: туннель рвётся или меняет маршрут, и SDK отдаёт APIConnectionError или APITimeoutError, хотя ключ и запрос в порядке. Третья — общие адреса: на популярном VPN-сервере сидят сотни клиентов, и 429 вы получаете за чужой трафик.

Прокси удобнее системного VPN тем, что его можно задать точечно — для одного клиента, а не для всей машины. В Python SDK прокси берётся из переменных HTTP_PROXY и HTTPS_PROXY или передаётся через свой httpx-клиент. В Node.js — через параметр агента при создании клиента.

И честный вопрос: нужен ли VPN вообще. Он нужен, только если вы ходите напрямую на api.openai.com с ключом OpenAI. Если запросы идут через сервис, который принимает их с российских IP и сам стоит за границей, ни VPN, ни прокси в коде не нужны — меняется только base_url.

/ Почему

Почему через VPN ломается

  • 403 по IP. Часть запросов ушла мимо туннеля (split tunneling, отвал VPN) с российского адреса. OpenAI видит регион и отвечает unsupported_country_region_territory.
  • Connection error. Туннель пересобрался посреди запроса, DNS внутри VPN не резолвит api.openai.com или соединение режет провайдер. Ключ ни при чём.
  • 429 за чужой трафик. С одного IP-адреса VPN-сервера работают десятки аккаунтов. Лимиты по IP срабатывают раньше ваших.
  • Таймауты на длинных ответах. VPN добавляет задержку и рвёт долгие соединения; без стриминга ответ на 2–3 минуты не доживает до конца.
  • Проблема с аккаунтом, а не с сетью. Если 403 приходит и через прокси с иностранным IP, аккаунт уже ограничен, сетевые настройки не помогут.
/ Симптомы

Что вы видите и что это значит

Текст ошибкиПричинаЧто делать
403 unsupported_country_region_territoryЗапрос ушёл с российского IPПроверить, что весь трафик клиента идёт через прокси; если повторяется — аккаунт ограничен
APIConnectionError: Connection errorТуннель оборвался, DNS не резолвит, прокси не отвечаетПроверить прокси через curl, задать timeout и max_retries
APITimeoutError: Request timed outДлинный ответ не уложился в таймаут через медленный туннельВключить стриминг, поднять timeout
429 rate_limit_exceeded на первом запросеОбщий IP VPN-сервера с чужими аккаунтамиСвой прокси вместо общего VPN или сервис без VPN

Тело ответа OpenAI приходит без изменений через любой прокси, поэтому первым делом читайте code и type.

/ Что делать

Порядок действий

01

Определите, какая из трёх ошибок у вас

403 с unsupported_country — регион. Connection error и timeout — сеть. 429 сразу — общий адрес. От этого зависит, что менять.

02

Задайте прокси переменными окружения

SDK OpenAI и httpx читают HTTPS_PROXY сами. Это работает для всего процесса, включая другие библиотеки.

export HTTPS_PROXY=http://user:pass@proxy.example:3128
export HTTP_PROXY=http://user:pass@proxy.example:3128
python app.py
03

Или только для клиента OpenAI

Свой httpx-клиент с прокси, таймаутом и повторами. Остальной код процесса ходит в сеть напрямую.

import httpx
from openai import OpenAI

client = OpenAI(
    http_client=httpx.Client(proxy="http://user:pass@proxy.example:3128"),
    timeout=60,
    max_retries=3,
)
04

Проверьте прокси отдельно от кода

Если curl через прокси возвращает список моделей, сеть в порядке и проблема в коде или аккаунте.

curl -x http://user:pass@proxy.example:3128 \
  https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"
05

Уберите VPN, если он не нужен

Сервис, принимающий запросы с российских IP, снимает все три проблемы разом: прокси в коде не нужен, аккаунт OpenAI не нужен, лимиты свои.

client = OpenAI(
    api_key="ваш ключ",
    base_url="https://api.kosareva.cloud/v1",
)
/ По инструментам

Где это чинится в разных инструментах

  • VS Code, Cline, Continue. Прокси задаётся в настройках редактора (http.proxy), расширения его наследуют. Системный VPN при этом можно выключить.
  • Claude Code, Codex CLI. Читают HTTPS_PROXY из окружения терминала. Задайте переменную в той же сессии, где запускаете команду.
  • Docker, n8n. Переменные HTTP_PROXY и HTTPS_PROXY передаются в контейнер через environment; VPN на хосте внутрь контейнера не попадает.
  • Python и Node.js SDK. Python — переменные окружения или httpx-клиент, Node.js — параметр агента при создании клиента. В обоих задайте timeout и max_retries.
/ FAQ

Частые вопросы

Нарушает ли VPN условия OpenAI?

OpenAI оказывает услуги по списку стран, России в нём нет. Работа через VPN — обход этого ограничения, аккаунт могут ограничить без предупреждения.

Подойдёт ли SOCKS5-прокси?

Да, httpx умеет socks5 после установки дополнения httpx[socks]; адрес пишется как socks5://host:port. В переменных окружения тот же формат.

Почему 429 приходит, хотя я почти не делаю запросов?

Общий IP VPN-сервера: лимит срабатывает по адресу, а не по вашему ключу. Свой прокси или сервис без VPN снимают это.

/ На kosareva.cloud

Как это выглядит у нас

Наш шлюз принимает запросы с российских IP, VPN и прокси для него не нужны: base_url https://api.kosareva.cloud/v1 для OpenAI-формата, ANTHROPIC_BASE_URL=https://api.kosareva.cloud для Claude Code. Ключ OpenAI при этом не требуется, используется наш, оплата в рублях. Если VPN включён системно, запросы к нам через него тоже пройдут, но пользы от этого никакой.

Ключ, который работает из России

OpenAI-совместимый адрес, оплата в рублях, ключ сразу после регистрации. Пополнение картой от 50 ₽.

Получить ключ