← Назад в базу знаний

WhatsApp через IPv6 прокси: VoIP, групповые чаты и обход ограничений

WhatsApp через IPv6 прокси: VoIP, групповые чаты и обход ограничений

Как WhatsApp использует сеть

WhatsApp держит постоянное TCP-соединение к своим серверам. Порт 5222 для XMPP-подобного протокола, порт 443 для медиа и звонков. Соединение живое, пока клиент в сети. Разрыв — и сообщения копятся на сервере до 30 дней.

Мобильный клиент переключается между Wi-Fi и LTE десятки раз в день. Каждый раз — новый IP, новый сеанс. Серверы WhatsApp видят это как смену endpoint. Прокси в этой схеме — дополнительный слой, который может как помочь, так и всё сломать.

IPv6 здесь не экзотика. У операторов давно dual-stack, а в некоторых регионах — IPv6-only с NAT64. WhatsApp умеет работать поверх IPv6 с 2016 года, но не все прокси-решения это переваривают.

Что ломается при проксировании VoIP

Голосовой трафик WhatsApp идёт через SRTP поверх UDP. Пакеты маленькие, 60–120 байт полезной нагрузки, интервал 20 мс. Потеря одного пакета — щелчок в ухе. Потеря десяти подряд — обрыв фразы.

TCP-прокси для VoIP не годится. Голова пакета в TCP добавляет 20 байт, плюс подтверждения, плюс retransmit при потере. Задержка растёт с 40 мс до 200+. Разговор превращается в рацию.

SOCKS5 умеет UDP ASSOCIATE. Это единственный способ гнать VoIP через прокси без потери качества. HTTP CONNECT — только TCP, для звонков бесполезен.

IPv6-прокси добавляет свои грабли. MTU в IPv6 минимум 1280 байт, фрагментация делается отправителем, не роутером. Если прокси не пропускает ICMPv6 Packet Too Big — большие пакеты молча теряются. Голос проходит, видео на 720p — нет.

Настройка SOCKS5 с IPv6

Клиент WhatsApp на Android не имеет встроенной настройки прокси. На iOS — тоже. Вариантов два: системный VPN-туннель или прокси на уровне роутера.

Для теста подойдёт curl. Проверяем, что прокси видит IPv6 и пропускает UDP:

```bash

curl -6 -x socks5h://[2001:db8::1]:1080 https://web.whatsapp.com -v

```

Флаг `-6` заставляет резолвить хостнейм в AAAA-запись. `socks5h` — резолвинг на стороне прокси, иначе DNS-запрос утечёт мимо туннеля.

Python-скрипт для проверки UDP через SOCKS5:

```python

import socks

import socket

s = socks.socksocket(socket.AF_INET6, socket.SOCK_DGRAM)

s.set_proxy(socks.SOCKS5, "2001:db8::1", 1080)

s.connect(("2606:4700:4700::1111", 53))

s.send(b"\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x07example\x03com\x00\x00\x01\x00\x01")

print(s.recv(512).hex())

```

Если ответ приходит — UDP через прокси работает. Если таймаут — сервер режет UDP или не поддерживает ASSOCIATE.

Групповые чаты и медиа

Групповой чат — это не multicast. Сервер WhatsApp рассылает копии каждому участнику. С точки зрения клиента это те же TCP-соединения, только трафика больше.

Медиа в группах — отдельная история. Фото и видео загружаются на CDN WhatsApp (домены `mmg.whatsapp.net`, `media-*.cdn.whatsapp.net`). Это HTTPS, порт 443. Прокси должен пропускать SNI без подмены, иначе TLS-хендшейк падает.

Проблема с IPv6: CDN WhatsApp отдаёт разные AAAA-записи в зависимости от региона. Прокси в Европе получит европейский edge, клиент в Азии — азиатский. Если прокси и клиент в разных регионах, CDN может отдать контент с задержкой 300+ мс.

Решение — Anycast. У WhatsApp есть Anycast-адреса для медиа. `media.fra2-1.fna.whatsapp.net` резолвится в ближайший edge. Если прокси сидит в Франкфурте, а клиент в Новосибирске — медиа пойдёт через Франкфурт. Задержка вырастет на 60–80 мс.

Кейс: обрыв звонков на MTU 1280

Сервер на Debian 12, ядро 6.1, nginx 1.24 в режиме stream-прокси. IPv6-туннель через Hurricane Electric. Клиент — WhatsApp Desktop на Windows 11.

Симптом: голосовые звонки соединяются, первые 3–5 секунд слышно, потом тишина в обе стороны. Чат работает нормально. Видео не запускается.

Причина — MTU. HE-туннель даёт MTU 1480 на интерфейсе, но внутри IPv6-пакета ещё инкапсуляция. Реальный MTU для полезной нагрузки — 1420. WhatsApp шлёт SRTP-пакеты по 1200 байт, они проходят. Но при переходе на видео пакеты вырастают до 1400+. Роутер на пути не может фрагментировать IPv6 и должен отправить ICMPv6 Type 2 (Packet Too Big). Этот ICMP блокировался файрволом.

Решение: разрешить ICMPv6 в ip6tables и понизить MTU на туннеле до 1380.

```bash

ip link set he-ipv6 mtu 1380

ip6tables -A INPUT -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT

ip6tables -A OUTPUT -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT

```

После этого звонки держатся часами. Видео 720p работает, 1080p подтормаживает — не хватает полосы.

Кейс: DNS-утечка и бан аккаунта

Клиент — WhatsApp на iPhone, прокси — SOCKS5 на IPv6-адресе в Нидерландах. Настройка через сторонний VPN-клиент.

Через два дня аккаунт заблокирован на 24 часа. Причина — WhatsApp видит смену IP каждые несколько минут. Прокси-клиент переподключался при потере сети, каждый раз получал новый IPv6-адрес из пула /64.

WhatsApp банит за резкие скачки геолокации. Если IP меняется с амстердамского на сингапурский за минуту — это выглядит как угон аккаунта.

Решение — статический IPv6-адрес или пул /128 с привязкой к сессии. Прокси должен держать один адрес минимум 24 часа. В настройках VPN-клиента нужно выключить «случайный IPv6».

Второй момент — DNS. Если клиент резолвит `web.whatsapp.com` через локальный DNS провайдера, а трафик идёт через прокси, — утечка. WhatsApp видит DNS-запрос из одной страны, TCP-соединение из другой. Подозрительно.

Правильно — DNS через прокси. В SOCKS5 это `socks5h`, в WireGuard — `DNS = 2001:db8::53` в конфиге peer.

Кейс: групповой чат на 500 человек

Компания использует WhatsApp Business для рассылок. Группа на 500 участников, 20–30 сообщений в час в пике. Прокси — IPv6-only, пул из 16 адресов.

Симптом: сообщения доставляются с задержкой 2–5 минут. Иногда «часики» висят бесконечно, потом сообщение уходит.

Причина — rate limit. WhatsApp ограничивает количество сообщений с одного IP. Для групп — примерно 100 сообщений в минуту с адреса. Пул из 16 адресов должен давать 1600/мин, но распределение было неравномерным: 14 адресов простаивали, 2 держали всю нагрузку.

Проблема в sticky-сессиях. Прокси-балансировщик привязывал клиента к одному exit-ноду по хешу от порта. Порт у клиента не менялся — весь трафик шёл через один адрес.

Решение — round-robin по каждому новому TCP-соединению, а не по сессии. WhatsApp переподключается каждые 5–10 минут, каждое переподключение — новый exit-IP.

```nginx

stream {

upstream whatsapp_backend {

least_conn;

server [2001:db8::1]:1080;

server [2001:db8::2]:1080;

server [2001:db8::3]:1080;

}

server {

listen [::]:1080;

proxy_pass whatsapp_backend;

proxy_timeout 600s;

}

}

```

После переключения на least_conn нагрузка распределилась, задержка упала до 3–8 секунд.

Сравнение протоколов для VoIP

| Протокол | UDP | Накладные расходы | Задержка (мс) | Годен для звонков |

|---|---|---|---|---|

| SOCKS5 | Да | 10 байт | 5–15 | Да |

| HTTP CONNECT | Нет | 0 | 20–40 | Нет |

| WireGuard | Да | 32 байта | 10–25 | Да |

| OpenVPN UDP | Да | 69 байт | 30–60 | С натяжкой |

| Shadowsocks | Да | 7–15 байт | 5–20 | Да |

Цифры — из тестов на канале 100 Мбит/с, RTT до прокси 15 мс. Реальные значения зависят от загрузки и качества маршрута.

WireGuard проигрывает SOCKS5 по накладным расходам, но выигрывает по стабильности. Туннель держит MTU и не зависит от приложения. Для мобильного клиента это важно — переключение Wi-Fi/LTE не рвёт сессию.

Что делать с IPv6-only

Если прокси только на IPv6, а WhatsApp-серверы имеют AAAA-записи — всё работает. Проблема в другом: некоторые CDN и корпоративные сети до сих пор IPv4-only.

Проверка:

```bash

dig AAAA web.whatsapp.com +short

dig AAAA mmg.whatsapp.net +short

```

Если AAAA есть — трафик пойдёт по IPv6. Если нет — нужен NAT64/DNS64. Прокси должен уметь трансформировать IPv6 в IPv4 на выходе.

На практике WhatsApp имеет полный dual-stack. Проблемы возникают только с медиа-CDN в отдельных регионах.

Итог

WhatsApp через IPv6-прокси работает. Но требует внимания к трём вещам: UDP для VoIP, стабильный IP для аккаунта, правильный MTU для медиа. SOCKS5 с поддержкой ASSOCIATE — минимально достаточное решение. WireGuard — если нужна надёжность и не жалко 32 байта на пакет.

Инфраструктура вроде lexic.ml даёт пул IPv6-адресов, что решает проблему rate limit и банов за смену геолокации. Главное — не гнать весь трафик через один exit-нод и не забывать про ICMPv6.

✔️Купить прокси