Доступ к зарубежным LLM с российских IP-адресов
При размещении систем автоматизации, таких как n8n или аналогичные платформы, на российских серверах для соблюдения требований 152-ФЗ о защите персональных данных, возникает техническая сложность с доступом к зарубежным языковым моделям (OpenAI, Anthropic, Google и другим). Эти сервисы в рамках соблюдения санкционного режима ограничивают подключения с российских IP-адресов.
Техническое решение через прокси-сервер
Эффективным способом обхода данного ограничения является настройка прокси-сервера в нейтральной юрисдикции. Для этого потребуется арендовать дополнительный VPS с локацией в стране, не участвующей в санкционных ограничениях - например, в Казахстане. Стоимость такого решения относительно невысока: VPS у провайдера Бегет с казахстанской локацией обойдётся в 22 рубля в сутки (около 660 рублей в месяц).
В данном руководстве подробно рассматривается процесс развёртывания прокси-сервера и конфигурации клиентской части. Вы научитесь настраивать автоматическое перенаправление всех запросов к зарубежным LLM через промежуточный сервер, что обеспечит стабильный доступ к AI-сервисам при сохранении данных на территории РФ в соответствии с законодательными требованиями.
Настройка прокси-сервера
Прокси-сервер будем реализовывать на базе Nginx Stream Module с SSL passthrough функциональностью. Это позволяет проксировать SSL/TLS трафик без его терминации, сохраняя end-to-end шифрование между клиентом и целевыми API. Nginx будем устанавливать в докере.
1. Подключаемся к серверу по SSH
ssh root@ip_адрес_сервера
2. Проверяем доступ к LLM
Перед дальнейшими действиями нам надо убедиться, что с этого сервера есть доступ к зарубежным LLM. Проверим на примере с OpenAI:
curl -i https://api.openai.com/v1/models -H "Authorization: Bearer YOUR_OPENAI_KEY"
где YOUR_OPENAI_KEY - это ваш ключ OpenAI, полученный на https://platform.openai.com/
В результате вы должны получить список моделей OpenAI. Если этого не произошло и вы получили 403 ошибку типа: {"error":{"code":"unsupported_country_region_territory","message":"Country, region, or territory not supported","param":null,"type":"request_forbidden"}}, то с этого сервера нельзя подключиться к зарубежным LLM и следуют выбрать другой сервер в другой локации.
3. Устанавливаем docker
Установку можно произвести по инструкции на сайте докера или выполнив действия ниже:
# Обновляем систему
apt update && apt install -y curl ca-certificates
# Добавляем GPG ключ Docker
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
# Добавляем репозиторий Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# Устанавливаем Docker
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin4. Создаем конфигурацию nginx
# Создаем директорию для конфигурации
mkdir -p /root/llm-proxy && cd /root/llm-proxy
# Создаем конфигурационный файл
cat > nginx.conf << 'EOF'
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
# Определяем upstream серверы
upstream openai_api {
server api.openai.com:443;
}
upstream anthropic_api {
server api.anthropic.com:443;
}
upstream cohere_api {
server api.cohere.com:443;
}
# Карта для выбора upstream по SNI hostname
map $ssl_preread_server_name $upstream {
api.openai.com openai_api;
api.anthropic.com anthropic_api;
api.cohere.com cohere_api;
default openai_api;
}
# Прокси сервер
server {
listen 443;
ssl_preread on;
proxy_pass $upstream;
proxy_connect_timeout 60s;
proxy_timeout 600s;
}
}
EOF5. Запускаем docker контейнер с proxy
docker run -d \ --name llm-proxy \ -p 443:443 \ -v /root/llm-proxy/nginx.conf:/etc/nginx/nginx.conf:ro \ --restart always \ nginx:latest
6. Проверяем работу контейнера
# Проверяем логи docker logs llm-proxy # Проверяем, что контейнер запущен docker ps | grep llm-proxy
Настройка клиента для работы через прокси-сервер
Для корректной работы необходимо настроить перенаправление всех запросов к зарубежным LLM через ваш прокси-сервер. Ключевая идея решения - переопределить DNS-резолвинг для доменов AI-сервисов, чтобы они указывали на IP-адрес вашего прокси вместо реальных адресов.
Принцип работы
Вместо стандартного DNS-разрешения мы жёстко привязываем определённые доменные имена (api.openai.com, api.anthropic.com и другие) к IP-адресу прокси-сервера. Все запросы к этим доменам автоматически направляются через промежуточный сервер, который уже имеет доступ к зарубежным LLM.
Варианты реализации
Вариант 1: Приложение запущено непосредственно на хосте
Если ваше клиентское приложение работает напрямую в операционной системе сервера, достаточно добавить соответствующие записи в системный файл /etc/hosts:
YOUR_PROXY_IP api.openai.com YOUR_PROXY_IP api.anthropic.com YOUR_PROXY_IP api.cohere.com
Вариант 2: Приложение в Docker-контейнере
При использовании Docker необходимо задействовать параметр extra_hosts в файле docker-compose.yml. Этот параметр добавляет пользовательские записи в /etc/hosts внутри изолированной среды контейнера, что позволяет перенаправлять запросы независимо от настроек хост-системы.
Практический пример для n8n на хостинге Beget
Ниже представлена пошаговая инструкция настройки для популярной платформы автоматизации n8n, развёрнутой на серверах Бегет:
1. Подключаемся к серверу n8n по SSH
ssh root@ip_адрес_сервера_n8n
2. Переходим в папку с n8n
cd /opt/beget/n8n/
3. Останавливаем контейнер с n8n
docker compose down n8n
4. Добавляем параметр extra_hosts в docker-compose.yml
Находим секцию x-shared: &shared и внутри нее после volumes добавляем новый параметр extra_hosts, вот так:
# Запускаем редактор nano
nano docker-compose.yml
# Добавляем extra_hosts
x-shared: &shared
restart: always
image: docker.n8n.io/n8nio/n8n:latest
env_file: .env
links:
- postgres
- redis
volumes:
- n8n_storage:/home/node/.n8n
- ./healthcheck.js:/healthcheck.js
- ./my_user_folder/pro_files:/home/node/my_user_folder/pro_files
extra_hosts:
- "api.openai.com:YOUR_PROXY_IP"
- "api.anthropic.com:YOUR_PROXY_IP"
- "api.cohere.com:YOUR_PROXY_IP"
depends_on:
redis:
condition: service_healthy
postgres:
condition: service_healthy
где YOUR_PROXY_IP - это IP-адрес вашего прокси сервера
5. Запускаем контейнер с n8n
docker compose up -d n8n
6. Проверяем логи
docker compose logs n8n
Готово! Вы успешно настроили доступ к зарубежным AI-сервисам, сохранив при этом соответствие российскому законодательству. Успешной автоматизации!