Создание собственной фермы прокси на Raspberry Pi для работы с антидетектом

· 14 мин чтения
raspberry pi прокси-ферма socks5 self-hosted антидетект devops инфраструктура
Создание собственной фермы прокси на Raspberry Pi для работы с антидетектом

Готовы защитить свою цифровую личность?

Выберите тариф и запускайте незаметные профили уже сегодня.

Начать

Коммерческие резидентные прокси стоят $5-15 за гигабайт трафика. Для операций с высоким потреблением трафика это значительная статья расходов. Собственная прокси-ферма на Raspberry Pi с мобильными USB-модемами или через домашние интернет-соединения даёт уникальные преимущества: контроль над IP-пулом, нулевую стоимость трафика (кроме платы за интернет) и возможность точно знать историю каждого IP.

Это руководство — для тех, кто готов вложить усилия в построение инфраструктуры, а не просто платить за готовое решение.

Что такое Raspberry Pi прокси-ферма и когда она нужна

Базовая идея: несколько Raspberry Pi, каждый подключён к уникальному источнику интернета (домашний провайдер, мобильный модем 4G/5G, соседская сеть через договор), запускают SOCKS5-прокси сервер. Антидетект-браузер подключается к этим прокси вместо коммерческих.

Преимущества собственной фермы:

  • Чистые IP с нулевой историей — ваши IP никогда не использовались для спама или скрапинга, что даёт максимальный trust score
  • Полный контроль — вы знаете каждый IP, его провайдера, историю использования
  • Нет ограничений по трафику — платите только за интернет-подключение
  • Ротация через отключение — физическое переподключение мобильного модема даёт новый IP

Недостатки, которые нужно учитывать:

  • Начальные инвестиции в оборудование и настройку
  • Необходимость физического обслуживания оборудования
  • Географически ограниченный пул (только там, где стоит оборудование)
  • Нестабильность IP при использовании мобильных модемов

Ферма наиболее оправдана, когда: у вас высокое потребление трафика (>50 GB/месяц), вам нужны IP конкретного провайдера (ISP прокси), или вы хотите максимальный контроль над репутацией IP.

Аппаратная часть: что нужно

Базовый вариант (5 прокси-нод)

Список оборудования на 5 нод:

  • 5 × Raspberry Pi 4 Model B (4GB RAM) — около $55 каждый
  • 5 × MicroSD карта 32GB Class 10 — $8-12 каждая
  • 5 × USB 4G/LTE модем — $20-40 каждый (в зависимости от региона)
  • 5 × SIM-карты с тарифом “только данные” — варьируется
  • 1 × USB Hub с питанием на 7-10 портов — $30-50
  • 1 × Managed switch или обычный Ethernet switch — $20-40
  • 1 × Raspberry Pi для управления (master node, можно Pi Zero 2W) — $15-20
  • Блок питания, корпуса, кабели — $30-50

Итого: $350-550 на 5 нод. При использовании как мобильных прокси с ротацией IP — это окупается через 1-3 месяца по сравнению с коммерческими прокси при среднем потреблении.

Альтернатива с домашними провайдерами

Если у вас доступ к нескольким физическим локациям (офис, дача, квартиры родственников), каждый Raspberry Pi подключается к Ethernet домашнего провайдера в этой локации. Вы получаете ISP-прокси с реальными домашними IP — максимальное доверие у платформ.

Выбор USB 4G модемов

Рекомендуемые модемы:

  • Huawei E3372h — широко поддерживается, простая настройка, работает в режиме HiLink (выглядит как Ethernet адаптер)
  • ZTE MF823 — альтернатива Huawei, аналогичный функционал
  • Quectel EC21/EC25 — более профессиональный вариант с расширенными AT-командами для управления

Для ротации IP на мобильных модемах критично, чтобы модем поддерживал перезагрузку через AT-команды или HTTP API. Большинство Huawei HiLink это поддерживают.

Установка операционной системы

Используем Raspberry Pi OS Lite (64-bit, без GUI) — минимальный footprint для сервера.

# На рабочем компьютере записываем образ на SD карту
# Используем Raspberry Pi Imager или dd

# Через Raspberry Pi Imager: выбрать Raspberry Pi OS Lite (64-bit)
# Настроить в Advanced settings:
# - hostname: proxy-node-01
# - Enable SSH
# - Username/Password или SSH key
# - Wi-Fi (если нет доступа к Ethernet при первой настройке)

После первого запуска подключаемся по SSH и обновляем систему:

ssh pi@proxy-node-01.local

sudo apt update && sudo apt upgrade -y

# Устанавливаем необходимые пакеты
sudo apt install -y \
  dante-server \
  3proxy \
  usb-modeswitch \
  usb-modeswitch-data \
  net-tools \
  curl \
  jq \
  cron

Настройка 4G модема

Большинство USB 4G модемов при первом подключении определяются как CD-ROM (режим загрузки драйверов для Windows). usb-modeswitch автоматически переключает их в режим модема.

# Проверяем, что модем определён
lsusb | grep -i huawei
# Должно показать: Bus XXX Device XXX: ID 12d1:14db Huawei Technologies

# Если модем в HiLink режиме — он появится как USB Ethernet устройство
ip link show
# Должен появиться usb0 или eth1

# Проверяем IP-адрес модема
ip addr show usb0
# Huawei HiLink обычно выдаёт IP 192.168.8.x

Для настройки автоподключения при старте системы:

# /etc/network/interfaces.d/usb0
auto usb0
iface usb0 inet dhcp
  metric 100  # Приоритет маршрута

Проверка интернет-соединения через модем:

# Проверяем маршрутизацию
curl --interface usb0 https://api.ipify.org
# Должен вернуть IP мобильного оператора

Настройка SOCKS5 прокси с dante

Dante — надёжный open-source SOCKS5 сервер для Linux.

sudo nano /etc/danted.conf
# /etc/danted.conf
logoutput: /var/log/danted.log

# Слушаем на всех интерфейсах
internal: 0.0.0.0 port = 1080

# Исходящий трафик через мобильный модем
external: usb0

# Методы аутентификации
socksmethod: username

# Разрешаем входящие подключения (с аутентификацией)
client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: connect disconnect
}

# Разрешаем исходящий трафик
socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    socksmethod: username
    log: connect error
}

Создаём пользователя для аутентификации:

# Dante использует системных пользователей
sudo useradd -r -s /bin/false proxy-user
echo "proxy-user:strong-password" | sudo chpasswd

# Запускаем и включаем автозапуск
sudo systemctl enable danted
sudo systemctl start danted

# Проверяем статус
sudo systemctl status danted

Тестируем прокси:

curl -x socks5://proxy-user:strong-password@localhost:1080 https://api.ipify.org
# Должен вернуть IP мобильного оператора

Ротация IP: перезагрузка модема через API

Один из главных плюсов мобильных прокси — возможность получить новый IP через переподключение к мобильной сети.

Huawei HiLink поддерживает управление через HTTP API:

#!/bin/bash
# /usr/local/bin/rotate-ip.sh

MODEM_IP="192.168.8.1"
INTERFACE="usb0"

echo "$(date): Starting IP rotation..."

# Получаем текущий IP
OLD_IP=$(curl -s --interface $INTERFACE https://api.ipify.org)
echo "Current IP: $OLD_IP"

# Перезагружаем соединение через API Huawei
# Сначала авторизуемся
SESSION=$(curl -s -c /tmp/huawei-cookie.txt \
  "http://$MODEM_IP/api/user/login" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "__RequestVerificationToken=$(curl -s "http://$MODEM_IP/api/webserver/SesTokInfo" | grep -oP '(?<=<TokInfo>)[^<]+')" \
  -d "Username=admin&Password=$(echo -n 'admin' | sha256sum | cut -d' ' -f1)Sese$(echo -n 'admin' | sha256sum | cut -d' ' -f1)" 2>/dev/null)

# Отключаем и переподключаем мобильное соединение
curl -s -b /tmp/huawei-cookie.txt \
  "http://$MODEM_IP/api/dialup/mobile-dataswitch" \
  -H "Content-Type: application/xml" \
  -d '<?xml version="1.0" encoding="UTF-8"?><request><dataswitch>0</dataswitch></request>'

sleep 5

curl -s -b /tmp/huawei-cookie.txt \
  "http://$MODEM_IP/api/dialup/mobile-dataswitch" \
  -H "Content-Type: application/xml" \
  -d '<?xml version="1.0" encoding="UTF-8"?><request><dataswitch>1</dataswitch></request>'

# Ждём переподключения
sleep 15

# Получаем новый IP
NEW_IP=$(curl -s --interface $INTERFACE https://api.ipify.org)
echo "New IP: $NEW_IP"

if [ "$OLD_IP" == "$NEW_IP" ]; then
  echo "WARNING: IP did not change after rotation"
else
  echo "Success: IP changed from $OLD_IP to $NEW_IP"
fi
chmod +x /usr/local/bin/rotate-ip.sh

# Тестируем
/usr/local/bin/rotate-ip.sh

Управляющий сервер (Master Node)

При ферме из нескольких Raspberry Pi нужен центральный сервер управления — discovery, мониторинг, API для динамического получения прокси.

На master node (может быть ещё один Raspberry Pi или VPS):

#!/usr/bin/env python3
# proxy-manager.py — простой API для управления прокси-фермой

from flask import Flask, jsonify, request
import subprocess
import json
import requests
from datetime import datetime

app = Flask(__name__)

# Конфигурация нод
PROXY_NODES = [
    {
        "id": "node-01",
        "host": "192.168.1.101",
        "port": 1080,
        "username": "proxy-user",
        "password": "strong-password-01",
        "interface": "usb0",
        "rotate_url": "http://192.168.1.101:8080/rotate"
    },
    {
        "id": "node-02", 
        "host": "192.168.1.102",
        "port": 1080,
        "username": "proxy-user",
        "password": "strong-password-02",
        "interface": "usb0",
        "rotate_url": "http://192.168.1.102:8080/rotate"
    },
]

def check_proxy_health(node):
    """Проверяем работоспособность прокси ноды"""
    try:
        proxies = {
            "socks5": f"socks5://{node['username']}:{node['password']}@{node['host']}:{node['port']}"
        }
        response = requests.get(
            "https://api.ipify.org?format=json",
            proxies=proxies,
            timeout=10
        )
        ip_data = response.json()
        return {
            "healthy": True,
            "current_ip": ip_data["ip"],
            "checked_at": datetime.utcnow().isoformat()
        }
    except Exception as e:
        return {
            "healthy": False,
            "error": str(e),
            "checked_at": datetime.utcnow().isoformat()
        }

@app.route('/api/proxies', methods=['GET'])
def list_proxies():
    """Список доступных прокси с проверкой здоровья"""
    result = []
    for node in PROXY_NODES:
        health = check_proxy_health(node)
        result.append({
            "id": node["id"],
            "endpoint": f"socks5://{node['username']}:{node['password']}@{node['host']}:{node['port']}",
            **health
        })
    return jsonify(result)

@app.route('/api/proxies/<node_id>/rotate', methods=['POST'])
def rotate_proxy(node_id):
    """Ротация IP на конкретной ноде"""
    node = next((n for n in PROXY_NODES if n["id"] == node_id), None)
    if not node:
        return jsonify({"error": "Node not found"}), 404
    
    try:
        response = requests.post(node["rotate_url"], timeout=60)
        return jsonify(response.json())
    except Exception as e:
        return jsonify({"error": str(e)}), 500

@app.route('/api/proxies/healthy', methods=['GET'])
def get_healthy_proxy():
    """Получить один работоспособный прокси (для антидетект-браузера)"""
    for node in PROXY_NODES:
        health = check_proxy_health(node)
        if health["healthy"]:
            return jsonify({
                "endpoint": f"socks5://{node['username']}:{node['password']}@{node['host']}:{node['port']}",
                "node_id": node["id"],
                "current_ip": health["current_ip"]
            })
    
    return jsonify({"error": "No healthy proxies available"}), 503

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9090, debug=False)

Настройка HTTP API на каждой ноде для выполнения ротации:

# /usr/local/bin/rotation-api.py
from flask import Flask, jsonify
import subprocess

app = Flask(__name__)

@app.route('/rotate', methods=['POST'])
def rotate():
    result = subprocess.run(
        ['/usr/local/bin/rotate-ip.sh'],
        capture_output=True,
        text=True,
        timeout=60
    )
    return jsonify({
        "success": result.returncode == 0,
        "output": result.stdout,
        "error": result.stderr
    })

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

Интеграция с Santiago Browser

Настройка использования прокси-фермы из антидетект-браузера:

// Скрипт для создания профилей с прокси из фермы
async function createProfileWithFarmProxy(profileName) {
  // Получаем здоровый прокси из фермы
  const proxyResponse = await fetch('http://proxy-master:9090/api/proxies/healthy');
  const proxyData = await proxyResponse.json();
  
  // Создаём профиль в Santiago Browser
  const profileResponse = await fetch('http://localhost:7891/api/profiles', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      name: profileName,
      proxy: {
        type: 'socks5',
        connectionString: proxyData.endpoint
      },
      fingerprint: {
        os: 'windows',
        timezone: 'America/New_York', // Соответствует геолокации прокси
        languages: ['en-US']
      }
    })
  });
  
  const profile = await profileResponse.json();
  console.log(`Created profile ${profile.id} with IP ${proxyData.current_ip}`);
  return profile;
}

Мониторинг и алерты

При ферме из нескольких нод критично знать о проблемах немедленно.

#!/bin/bash
# /usr/local/bin/health-check.sh — запускается через cron каждые 5 минут

WEBHOOK_URL="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
MASTER_URL="http://proxy-master:9090"

# Получаем статус всех нод
PROXIES=$(curl -s "$MASTER_URL/api/proxies")

# Проверяем каждую ноду
echo "$PROXIES" | jq -c '.[]' | while read proxy; do
  NODE_ID=$(echo "$proxy" | jq -r '.id')
  HEALTHY=$(echo "$proxy" | jq -r '.healthy')
  
  if [ "$HEALTHY" != "true" ]; then
    ERROR=$(echo "$proxy" | jq -r '.error')
    
    # Отправляем алерт в Slack
    curl -s -X POST "$WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d "{\"text\": \":red_circle: Proxy node $NODE_ID is unhealthy: $ERROR\"}"
  fi
done
# Добавляем в crontab
crontab -e
# */5 * * * * /usr/local/bin/health-check.sh >> /var/log/proxy-health.log 2>&1

Масштабирование фермы

Когда базовая ферма работает стабильно, масштабирование прямолинейно:

Добавление нод — каждый новый Raspberry Pi проходит тот же процесс настройки, затем добавляется в конфигурацию master node. Для ускорения используйте Ansible или скрипт инициализации:

# bootstrap.sh — запускается на новой ноде через SSH
#!/bin/bash
NODE_ID=$1
NODE_IP=$(hostname -I | awk '{print $1}')

# Установка пакетов
apt update && apt install -y dante-server python3-flask

# Копирование конфигурации (с master через SCP)
scp master-node:/etc/danted.conf /etc/danted.conf
scp master-node:/usr/local/bin/rotate-ip.sh /usr/local/bin/
scp master-node:/usr/local/bin/rotation-api.py /usr/local/bin/

# Создание пользователя
useradd -r -s /bin/false proxy-user
echo "proxy-user:$(openssl rand -base64 16)" | chpasswd

# Запуск сервисов
systemctl enable danted && systemctl start danted

echo "Node $NODE_ID initialized at $NODE_IP"

Географическое распределение — если нужны прокси из разных городов, размещайте Raspberry Pi в разных физических локациях. Для этого подходит схема: оплачиваете интернет-подключение в разных городах (или договариваетесь с людьми), размещаете там Pi.

Мобильные прокси с несколькими SIM — специализированные устройства (Mikrotik RB series) позволяют подключить до 8 SIM-карт к одному устройству, что увеличивает плотность прокси на единицу оборудования.

Безопасность инфраструктуры

Собственная прокси-ферма — это серверная инфраструктура, к которой применяются стандартные требования безопасности.

Firewall на каждой ноде:

# Разрешаем только с известных IP
sudo ufw allow from YOUR_WORKSTATION_IP to any port 1080
sudo ufw allow from MASTER_NODE_IP to any port 1080
sudo ufw allow from MASTER_NODE_IP to any port 8080
sudo ufw deny 1080
sudo ufw deny 8080
sudo ufw enable

Шифрование трафика — стандартный SOCKS5 не шифрует трафик между клиентом и прокси. В локальной сети это менее критично, но если прокси доступен через интернет — используйте Shadowsocks или WireGuard туннель поверх SOCKS5.

Ротация паролей — регулярно меняйте пароли proxy-user через скрипт и обновляйте конфигурацию антидетект-браузера.

Итог

Собственная прокси-ферма на Raspberry Pi — это инфраструктурная инвестиция с высокой отдачей при достаточном масштабе операций. Начальные затраты $350-500 на 5 нод окупаются за 1-3 месяца работы по сравнению с коммерческими резидентными прокси при среднем потреблении.

Главное преимущество, которое не измеряется деньгами — полный контроль над IP пулом. Вы точно знаете историю каждого IP, можете управлять ротацией, и уверены, что ваши IP не были скомпрометированы другими пользователями коммерческого пула.

Для начинающих рекомендуем стартовать с 2-3 нодами, отработать все процессы (установка, настройка, ротация, мониторинг) и затем масштабироваться. Первая нода займёт несколько часов на настройку. Каждая последующая при наличии скрипта инициализации — 30-60 минут.

Готовы защитить свою цифровую личность?

Выберите тариф и запускайте незаметные профили уже сегодня.

Получайте 15% пожизненную комиссию с каждого реферала.

Стать партнёром →