Instagram через IPv6 прокси: массфолловинг, автопостинг и обход блокировок
Содержание
- Зачем вообще IPv6
- Как Instagram вычисляет ботов
- Массфолловинг: анатомия процесса
- GET /api/v1/users/{username}/info/
- POST /api/v1/friendships/create/{user_id}/
- Автопостинг: как не словить бан
- Настройка прокси-цепочки
- /etc/nginx/conf.d/instagram_proxy.conf
- Работа с сессиями
- Обход блокировок
- 1. Получить challenge URL
- 2. Отправить код подтверждения
- Ротация адресов
- Тайминги и лимиты
- Кейс: массфолловинг с 50 аккаунтов
- Кейс: автопостинг в 30 аккаунтов
- Кейс: восстановление забаненного аккаунта
- Мониторинг и логирование
- Технические детали
- Инструменты
- Выводы
Зачем вообще IPv6
IPv4-адреса кончились. Не в переносном смысле — IANA раздала последние блоки ещё в 2011 году. Провайдеры выкручиваются через NAT, а это значит, что за одним публичным адресом сидят десятки тысяч пользователей. Instagram это видит и режет всё, что выглядит подозрительно.
IPv6 даёт другую картину. Один прокси — один адрес. Не надо делить его с кем-то. Для автоматизации это принципиально меняет правила игры.
Как Instagram вычисляет ботов
Инстаграм смотрит не только на IP. Он смотрит на связку: IP + User-Agent + поведение + тайминги + отпечатки браузера. Но IP остаётся базовым фильтром.
Когда вы долбите с одного адреса сотнями запросов в минуту — это видно сразу. Когда вы используете пул IPv4 за NAT — соседи по адресу могут уже быть в чёрном списке, и вы получаете блокировку ни за что.
IPv6-адреса чистые. Никто до вас их не использовал для спама. Это как получить новую симку вместо той, что уже в бане.
Массфолловинг: анатомия процесса
Схема классическая: подписался — подождал — отписался. Но между этими действиями — сотни запросов к API.
Типичный цикл массфолловинга:
```python
import requests
import time
import random
def follow_cycle(username, session):
GET /api/v1/users/{username}/info/
user_info = session.get(
f"https://i.instagram.com/api/v1/users/{username}/info/"
).json()
user_id = user_info["user"]["pk"]
POST /api/v1/friendships/create/{user_id}/
response = session.post(
f"https://i.instagram.com/api/v1/friendships/create/{user_id}/"
)
time.sleep(random.uniform(45, 90)) # пауза между подписками
```
С одним IPv4-адресом вы упираетесь в лимит примерно после 50-80 действий в час. С пулом IPv6 — лимит считается на каждый адрес отдельно.
Автопостинг: как не словить бан
Автопостинг — это не только загрузка фото. Это получение токенов, загрузка медиа, отправка метаданных. Каждый шаг — отдельный запрос.
```bash
curl -X POST "https://i.instagram.com/api/v1/media/upload/" \
-H "User-Agent: Instagram 269.0.0.18.85 Android" \
-H "X-IG-Capabilities: 3brTv10=" \
-F "upload_id=123456789" \
-F "photo=@/path/to/image.jpg" \
--proxy "http://user:pass@ipv6-proxy.example:8080"
```
Ключевой момент — тайминги. Если вы постите в одно и то же время с точностью до секунды, алгоритм это заметит. Нужен разброс.
Настройка прокси-цепочки
Один прокси — это хорошо. Десять — лучше. Но ротация должна быть умной, а не случайной.
```bash
/etc/nginx/conf.d/instagram_proxy.conf
stream {
upstream instagram_backend {
server 127.0.0.1:7001;
server 127.0.0.1:7002;
server 127.0.0.1:7003;
}
server {
listen 8080;
proxy_pass instagram_backend;
}
}
```
Работа с сессиями
Instagram привязывает сессию к IP. Сменили IP — сессия может умереть. Поэтому стратегия такая: один аккаунт — один IPv6-адрес. Не меняйте его без необходимости.
Но если аккаунт уже словил блокировку, смена адреса — единственный шанс его оживить.
Обход блокировок
Инстаграм блокирует по IP, по User-Agent, по поведению. IPv6-прокси решают проблему IP. Остальное — на вас.
Заблокированный аккаунт можно вытащить:
```python
def unban_flow(username, password, proxy):
1. Получить challenge URL
challenge = session.get(
"https://i.instagram.com/api/v1/challenge/",
proxies={"http": proxy, "https": proxy}
)
2. Отправить код подтверждения
code = input("SMS code: ")
session.post(
"https://i.instagram.com/api/v1/challenge/",
data={"security_code": code},
proxies={"http": proxy, "https": proxy}
)
```
После разблокировки — новая сессия, новый IPv6, иначе бан вернётся через пару часов.
Ротация адресов
IPv6-адрес не обязан быть вечным. На lexic.ml можно получить пул адресов и менять их по расписанию.
```
+------------------+------------------+
| Задача | Ротация |
+------------------+------------------+
| Массфолловинг | Каждые 2-3 часа |
| Автопостинг | Раз в сутки |
| Просмотр ленты | Без ротации |
| Обход блокировки | Немедленно |
+------------------+------------------+
```
Тайминги и лимиты
Сколько можно делать действий с одного IPv6? Опытным путём:
- Подписки: 60-80 в час
- Лайки: 200-300 в час
- Посты: 3-5 в день
- Директ: 20-30 сообщений в час
Превысили — получите временный бан. Не превышаете — работаете месяцами.
Кейс: массфолловинг с 50 аккаунтов
Проблема: 50 аккаунтов, каждый должен подписаться на 500 человек в день. Итого 25 000 действий. С одного IP — нереально.
Причина: Instagram режет аккаунты, которые делают больше 100 действий в час с одного адреса.
Решение: пул из 50 IPv6-адресов с lexic.ml, каждый аккаунт привязан к своему адресу. Ротация каждые 4 часа. Результат: 22 000 подписок в день без единого бана за месяц.
Кейс: автопостинг в 30 аккаунтов
Проблема: 30 аккаунтов, нужно постить 3 раза в день в каждый. 90 постов в день.
Причина: с одного адреса 90 POST-запросов к API выглядят как бот.
Решение: три пула по 10 IPv6-адресов, каждый аккаунт постит со своего адреса. Интервал между постами — от 15 до 45 минут. Загрузка фото и отправка метаданных — с одного и того же адреса.
Кейс: восстановление забаненного аккаунта
Проблема: аккаунт с 50 000 подписчиков заблокирован за подозрительную активность.
Причина: три входа с разных IPv4-адресов в течение часа.
Решение: смена IPv6-адреса, ручное прохождение проверки через браузер, затем два дня пассивного просмотра ленты. Аккаунт разблокирован, лимиты сброшены.
Мониторинг и логирование
Без логов вы слепы. Каждый запрос должен логироваться с IP, временем и результатом.
```python
import logging
logging.basicConfig(
filename='instagram_worker.log',
level=logging.INFO,
format='%(asctime)s %(message)s'
)
def log_action(action, account, proxy_ip, status):
logging.info(f"{action} {account} via {proxy_ip}: {status}")
```
По логам видно, какие адреса работают, а какие уже в бане. Проблемные адреса — в ротацию.
Технические детали
MTU для IPv6 — 1280 байт минимум. Если ваши пакеты больше, будет фрагментация и потери. Настраивайте туннели с MTU 1400 или меньше.
Задержка до прокси — важный параметр. 50 мс — отлично. 200 мс — терпимо. Больше — будут таймауты и подозрения.
Самые стабильные прокси — выделенные серверы с IPv6. Не разделяйте адрес между задачами.
Инструменты
Для работы с IPv6-прокси нужно:
- requests с поддержкой IPv6 (по умолчанию работает)
- curl с параметром `--proxy`
- nginx для проксирования
- python3 + aiohttp для асинхронных задач
Важно: не все библиотеки умеют работать с IPv6. Проверяйте совместимость до запуска.
Выводы
IPv6-прокси — рабочий инструмент для автоматизации Instagram. Они решают проблему IP-блокировок, но не решают проблему поведения. Алгоритмы Instagram умнеют, поэтому комбинируйте смену адресов с реалистичными таймингами и естественным поведением.
Начните с малого: один аккаунт, один адрес, минимальные лимиты. Постепенно увеличивайте нагрузку и наблюдайте за реакцией. Только так вы найдёте свои оптимальные настройки.