Создание собственной фермы прокси на 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% пожизненную комиссию с каждого реферала.
Стать партнёром →