Tumblr через IPv6 прокси: ведение блогов и обход ограничений
Содержание
- Почему IPv6, а не обычные прокси
- Как это работает
- Настройка прокси
- Parse CONNECT or GET request
- Extract host:port
- Connect via IPv6
- Resolve domain to IPv6
- Forward data
- Simple HTTP proxy logic
- Настройка браузера
- Ведение блога через API
- Credentials from Tumblr app
- Proxy configuration
- Create a text post
- Кейс: бан по контенту
- Кейс: скорость загрузки
- Кейс: блокировка API
- Настройка nginx как IPv6-прокси
- Buffer settings for media
- Автоматическая смена адресов
- Get current address
- Generate new suffix
- Remove old address
- Add new address
- Безопасность и приватность
- Резюме
Tumblr — старый зверь. Запущен в 2007, пережил покупку Yahoo, цензуру 2018 года и до сих пор жив. Но для пользователей из России и СНГ доступ к нему закрыт с 2022 года. Роскомнадзор заблокировал платформу за "призывы к экстремизму". Формально — да, контента там хватает. Практически — пострадали обычные блогеры.
IPv6 прокси решают проблему доступа. Но есть нюансы.
Почему IPv6, а не обычные прокси
Провайдеры блокируют по DNS и IP-адресам. IPv4-адреса заканчиваются, их переиспользуют, базы блокировок пополняются быстро. IPv6-пространство огромное. Подсеть /64 содержит 18 квинтиллионов адресов. Заблокировать их все физически невозможно.
Пример: у lexic.ml пул адресов в нескольких /48 подсетях. Это миллиарды адресов. РКН может блокировать неделями, а адреса меняются автоматически.
Как это работает
Tumblr использует HTTPS. Для проксирования нужен CONNECT-туннель или просто HTTP-прокси с поддержкой HTTPS. IPv6-прокси принимает запрос, открывает соединение к tumblr.com через свой IPv6-адрес, возвращает данные.
Ключевой момент: Tumblr отдаёт контент через CDN. Основной домен — tumblr.com, но медиафайлы раздаются с o.twimg.com и других поддоменов. Прокси должен корректно обрабатывать все запросы.
Настройка прокси
Берём стандартный HTTP-прокси на Python:
```python
import socket
import threading
import select
def handle_client(client_sock):
try:
request = client_sock.recv(4096)
if not request:
return
Parse CONNECT or GET request
first_line = request.split(b'\n')[0]
method = first_line.split(b' ')[0]
if method == b'CONNECT':
Extract host:port
host_port = first_line.split(b' ')[1].decode()
host, port = host_port.split(':')
Connect via IPv6
remote_sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
remote_sock.settimeout(10)
Resolve domain to IPv6
addrinfo = socket.getaddrinfo(host, int(port), socket.AF_INET6)
remote_sock.connect(addrinfo[0][4])
client_sock.send(b'HTTP/1.1 200 Connection Established\r\n\r\n')
Forward data
while True:
rlist, _, _ = select.select([client_sock, remote_sock], [], [], 30)
if client_sock in rlist:
data = client_sock.recv(4096)
if not data:
break
remote_sock.sendall(data)
if remote_sock in rlist:
data = remote_sock.recv(4096)
if not data:
break
client_sock.sendall(data)
else:
Simple HTTP proxy logic
pass
except Exception as e:
print(f"Error: {e}")
finally:
client_sock.close()
def main():
server = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('::', 8888))
server.listen(100)
print("Proxy listening on [::]:8888")
while True:
client_sock, addr = server.accept()
thread = threading.Thread(target=handle_client, args=(client_sock,))
thread.start()
if __name__ == '__main__':
main()
```
Это примитивный пример. Для реальной работы нужен обработчик ошибок, таймауты, поддержка HTTP/2. Но принцип понятен.
Настройка браузера
Firefox или Chrome с расширением FoxyProxy. Указываем адрес прокси: `[2606:4700::1]:8888`. В квадратных скобках — потому что IPv6-адрес содержит двоеточия.
Для curl:
```bash
curl -x "http://[2606:4700::1]:8888" https://tumblr.com/api/hello
```
Ведение блога через API
Tumblr имеет REST API. Версия 2, OAuth 1.0a. Создаём приложение на tumblr.com/oauth/apps. Получаем ключи.
```python
import requests
from requests_oauthlib import OAuth1
Credentials from Tumblr app
consumer_key = 'your_consumer_key'
consumer_secret = 'your_consumer_secret'
token = 'your_oauth_token'
token_secret = 'your_oauth_token_secret'
Proxy configuration
proxies = {
'http': 'http://[2606:4700::1]:8888',
'https': 'http://[2606:4700::1]:8888'
}
auth = OAuth1(consumer_key, consumer_secret, token, token_secret)
Create a text post
data = {
'type': 'text',
'title': 'Test post via IPv6 proxy',
'body': 'Hello from the future of networking!'
}
response = requests.post(
'https://api.tumblr.com/v2/blog/yourblog.tumblr.com/post',
auth=auth,
data=data,
proxies=proxies
)
print(response.status_code)
print(response.json())
```
Ответ 201 — пост создан. 401 — проблемы с OAuth. 403 — бан по IP.
Кейс: бан по контенту
Пример: блогер вёл дневник о ментальном здоровье. После блокировки Tumblr в РФ перешёл на прокси. Через месяц получил бан аккаунта за "спам".
Причина: Tumblr фиксирует вход с разных IP-адресов. IPv6-пул меняется каждые 10 минут. Система антифрода решила, что аккаунт взломан.
Решение: привязка прокси к конкретному аккаунту. Покупка выделенного IPv6-адреса. Статичный адрес — статичная репутация. Стоит примерно \$2-3 в месяц, зато аккаунт живёт.
Кейс: скорость загрузки
Пользователь жаловался на медленную загрузку изображений. Проверили: дашборд открывается за 2 секунды, но картинки грузятся по 10-15 секунд.
Причина: CDN Tumblr определяет геолокацию по IP прокси. Если IP из Нидерландов, медиафайлы отдаются с европейских серверов. Задержка до них — 30-40 мс. Но прокси с IPv6 в подсети, которая раньше принадлежала американскому хостеру — CDN думает, что пользователь в США, и гонит трафик через Атлантику. Пинг 150 мс, скорость падает.
Решение: выбор прокси с географией, близкой к целевой аудитории. Для русскоязычных блогов — европейские подсети. Для англоязычных — американские.
Кейс: блокировка API
Разработчик делал приложение для автоматического постинга. Работало через прокси. Через неделю — HTTP 429 Too Many Requests.
Причина: Tumblr ограничивает число запросов с одного IP. Стандартный лимит — 250 запросов в час. IPv6-пул с автоматической ротацией адресов обходил лимит, но система обнаружила аномалию — сотни запросов с разных адресов за короткое время. Флаг на аккаунт.
Решение: ротация не чаще раза в 5 минут. Плюс кеширование OAuth-токенов. Запросы к API не чаще одного в 15 секунд. Лимиты Tumblr жёсткие, но адекватные для ручного ведения блога.
Настройка nginx как IPv6-прокси
Отдельный случай — проксирование на уровне сервера. Если блог ведётся с VPS, а не с домашнего компьютера.
```nginx
server {
listen [::]:8080;
resolver 8.8.8.8;
location / {
proxy_pass https://tumblr.com\$request_uri;
proxy_set_header Host tumblr.com;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_ssl_server_name on;
proxy_ssl_name tumblr.com;
proxy_redirect https://tumblr.com/ /;
Buffer settings for media
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 8 32k;
proxy_max_temp_file_size 1024m;
}
}
```
Проблема: Tumblr отдаёт редиректы на api.tumblr.com, assets.tumblr.com. Все эти домены нужно тоже проксировать. Иначе получите бесконечную цепочку редиректов.
Автоматическая смена адресов
IPv6-прокси хороши тем, что адреса в подсети можно менять без переподключения. Скрипт на Python:
```python
import subprocess
import time
import random
def change_ipv6():
Get current address
result = subprocess.run(['ip', '-6', 'addr', 'show', 'dev', 'eth0'],
capture_output=True, text=True)
Generate new suffix
new_suffix = f"{random.randint(0, 65535):04x}:{random.randint(0, 65535):04x}"
Remove old address
subprocess.run(['ip', '-6', 'addr', 'del', f'2606:4700::1/64', 'dev', 'eth0'])
Add new address
subprocess.run(['ip', '-6', 'addr', 'add', f'2606:4700::{new_suffix}/64', 'dev', 'eth0'])
print(f"IP changed to 2606:4700::{new_suffix}")
while True:
change_ipv6()
time.sleep(600) # Every 10 minutes
```
Работает не везде. Хостер должен разрешать смену адресов. Обычно это VPS с выделенной IPv6-подсетью. Дешёвые shared-хостинги такого не дают.
Безопасность и приватность
Tumblr хранит метаданные. IP-адреса, с которых вы входили, фиксируются. Даже если вы используете прокси, Tumblr знает ваш User-Agent, куки, паттерны поведения.
Для полной анонимности нужно менять и User-Agent, и куки. И не входить в Google-аккаунт с того же браузера. Иначе Google свяжет ваш реальный IP с прокси через рекламные трекеры.
Паранойя? Возможно. Но Tumblr после 2018 года активно сотрудничает с правообладателями и властями. DMCA-запросы обрабатываются за 24 часа. Если постите контент, защищённый авторским правом — знайте, что ваш прокси-IP не спасёт. Tumblr выдаст все данные по официальному запросу.
Резюме
IPv6-прокси решают проблему доступа к Tumblr. Но не решают проблему репутации. Если аккаунт создан давно, с него постили с российского IP, потом резко — с нидерландского — это триггер для антифрода.
Лучшая стратегия: купить выделенный IPv6-адрес, настроить прокси только для Tumblr, не смешивать с другим трафиком. Дать аккаунту "прогреться" неделю-две, постить регулярно, не дёргать API почём зря.
И помните: Tumblr — это не только блог-платформа, но и социальная сеть. Посты без лайков, репостов и комментариев выглядят подозрительно. Алгоритмы продвижения видят активность. Пустой блог с прокси — быстрый путь к баннеру "This blog has been flagged for suspicious activity".