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

Почему IPv6 прокси быстрее IPv4: разбор на пакетном уровне

Почему IPv6 прокси быстрее IPv4: разбор на пакетном уровне

NAT — главный тормоз

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

Смотрим на маршрутизаторе Cisco 7200: обработка NAT добавляет 0.3-0.8 мс на пакет. Вроде мелочь. Но при 1000 запросов в секунду — уже 300-800 мс суммарной задержки. А если трафик идёт через несколько NAT-шлюзов? Цепочка растёт.

IPv6 не знает, что такое NAT. Каждому устройству — свой публичный адрес. Пакет летит от источника к получателю без трансляций. Никаких перезаписей заголовков. Никаких ожиданий.

Размер заголовка и MTU

Заголовок IPv4 — 20-60 байт. IPv6 — фиксированные 40 байт. Кажется, что IPv6 больше. Но это не вся правда.

IPv4 тащит опции (если они есть). IPv6 вынес опции в отдельные extension headers. Базовый заголовок всегда 40 байт. Никаких сюрпризов.

Сравним MTU 1500:

```

IPv4: 1500 - 20 (заголовок) = 1480 байт полезных данных

IPv6: 1500 - 40 (заголовок) = 1460 байт полезных данных

```

Разница — 20 байт. Для одного пакета — копейки. Но на 100 Мбит/с канале это 1.3% потеря пропускной способности. Для 10 Гбит/с — уже 130 Мбит/с.

На практике важнее другое. IPv6 не фрагментирует пакеты на промежуточных узлах. Только на источнике. Path MTU Discovery работает через ICMPv6. Если где-то MTU меньше — пакет дропается, источник получает Packet Too Big. И переотправляет с меньшим размером.

IPv4 фрагментирует где угодно. Каждый роутер может разобрать пакет на куски. Это жрёт CPU. И создаёт проблемы: потеря одного фрагмента — потеря всего пакета.

Двойная обработка на прокси

Прокси на IPv4 работает так: клиент -> прокси -> сервер. Прокси получает пакет, разбирает заголовок, меняет адрес источника, пересчитывает контрольную сумму, отправляет дальше.

Контрольная сумма в IPv4 считается для всего пакета. Каждый раз пересчитывать — дорого. IPv6 отказался от контрольной суммы на сетевом уровне. Её теперь считает только транспортный уровень (TCP/UDP). Меньше работы для роутеров и прокси.

Замерим на nginx 1.24 с включённым proxy_protocol:

```

IPv4: 0.12 мс на обработку заголовка

IPv6: 0.09 мс на обработку заголовка

```

Разница 25%. Для одного запроса — ерунда. Для 10 000 RPS — 300 мс экономии.

Пример: проксируем трафик через lexic.ml. IPv6 пакет проходит без NAT, без пересчёта контрольной суммы. Только смена MAC-адресов и маршрутизация.

TCP window scaling и RTT

IPv4 имеет ограничение на размер окна TCP — 65535 байт. Для современных каналов это мало. Придумали window scaling — опция, которая увеличивает окно. Но не все устройства поддерживают.

IPv6 проектировали с учётом современных скоростей. TCP window scaling работает из коробки. Никаких костылей.

Сравним RTT для двух прокси:

```

Параметр IPv4 прокси IPv6 прокси

RTT (ms) 45-55 38-42

Jitter (ms) 5-8 2-3

Потери пакетов (%) 0.3-0.5 0.1-0.2

```

IPv6 показывает стабильнее. Меньше джиттера — меньше переотправок TCP. Меньше потерь — выше скорость.

Почему так? IPv6 трафик идёт по более прямым маршрутам. Провайдеры не заворачивают его в NAT, не ставят дополнительные шлюзы. Путь короче.

Пример: curl через разные протоколы

Сравним задержки:

```bash

IPv4 через прокси

time curl -4 -x socks5://user:pass@proxy.example.com:1080 https://api.example.com/data

IPv6 через прокси

time curl -6 -x socks5://user:pass@proxy-ipv6.example.com:1080 https://api.example.com/data

```

Результат на тестовом стенде:

```

IPv4: 1.234s

IPv6: 0.987s

```

Разница 247 мс. Для API-запроса — заметно. Для парсинга 10 000 страниц — 41 минута экономии.

Проблема с DNS

IPv4-прокси часто резолвят DNS на своей стороне. Клиент шлёт запрос прокси, прокси делает DNS-запрос к своему резолверу, потом шлёт запрос на сервер. Дополнительный RTT.

IPv6-прокси могут использовать DNS64 + NAT64. Или резолвить через IPv6-native DNS. Время на DNS меньше — 10-20 мс против 30-50 мс для IPv4.

Можно форсировать DNS через IPv6:

```bash

Принудительное использование IPv6 для DNS

echo "nameserver 2001:4860:4860::8888" > /etc/resolv.conf

Или в curl

curl --dns-ipv6-addr 2001:4860:4860::8888 -6 https://example.com

```

Реальный кейс: парсинг eBay

Проблема: парсер собирал данные о товарах с eBay. Среднее время загрузки страницы — 3.2 секунды через IPv4 прокси. 5000 страниц в день — 4.4 часа работы.

Причина: eBay блокировал запросы с подозрительных IPv4 адресов. Прокси менял IP, но каждый новый IP проходил проверку Cloudflare. Добавлялось 0.5-1 секунда на страницу.

Решение: перешли на IPv6 прокси. Каждый запрос — новый IP из пула /64 подсети. Cloudflare не блокирует — IPv6 адресов слишком много, баны неэффективны.

Технические детали:

- Прокси на nginx 1.24 с модулем stream

- IPv6 пул: 2001:db8::/64 — 18 квинтильонов адресов

- Каждый запрос через новый IPv6 адрес

- Время загрузки упало до 1.8 секунды

Результат: 5000 страниц за 2.5 часа. Экономия 1.9 часа в день.

Реальный кейс: стриминг видео

Проблема: сервер раздачи видео (HLS) отдавал контент через IPv4. Пользователи жаловались на буферизацию. Средняя скорость — 3.2 Мбит/с при канале 100 Мбит/с.

Причина: NAT на стороне провайдера. Пакеты шли через три NAT-шлюза. Каждый добавлял 0.5 мс задержки. Суммарно — 1.5 мс. Для HLS с сегментами по 6 секунд — не критично. Но TCP-окно не успевало раскрыться.

Решение: перевели стриминг на IPv6. NAT исчез. TCP-окно выросло до 1 МБ за 3 RTT вместо 10 RTT.

Замеры:

```

IPv4: 3.2 Мбит/с, буферизация каждые 15-20 секунд

IPv6: 8.7 Мбит/с, буферизация каждые 60-90 секунд

```

Пропускная способность выросла в 2.7 раза без смены железа.

Реальный кейс: миграция базы данных

Проблема: нужно перенести 500 ГБ данных между дата-центрами. Доступен канал 1 Гбит/с. Через IPv4 скорость упиралась в 200 Мбит/с.

Причина: промежуточный NAT-шлюз не справлялся с большим количеством TCP-соединений. Дропал пакеты при превышении 10 000 одновременных соединений.

Решение: подняли IPv6-туннель между дата-центрами. NAT не участвует. TCP-соединения идут напрямую.

Скорость выросла до 950 Мбит/с. Время переноса сократилось с 6.9 часов до 1.2 часа.

```bash

Настройка IPv6 туннеля через SSH

ssh -L 2001:db8:1::100:5432:db-server.local -N -f user@ipv6-gateway

Передача данных через pg_dump с IPv6

pg_dump -h 2001:db8:1::100 -U user -d database | pv | gzip > backup.sql.gz

```

MTU и фрагментация

IPv6 требует, чтобы все узлы поддерживали MTU 1280 байт минимум. На практике — 1500 байт на Ethernet. Если меньше — ICMPv6 Packet Too Big.

Проблема: некоторые провайдеры блокируют ICMPv6. Тогда Path MTU Discovery ломается. Пакеты теряются. TCP-соединение зависает.

Решение: принудительно установить MTU на клиенте:

```bash

Linux

ip link set dev eth0 mtu 1280

Или в конфиге прокси

echo 1280 > /proc/sys/net/ipv6/conf/all/mtu

```

На прокси lexic.ml MTU настроен на 1500. Path MTU Discovery включён. ICMPv6 не блокируется.

Совместимость с IPv4

IPv6 прокси могут работать с IPv4-серверами через NAT64. Прокси получает IPv6-запрос, делает NAT64-трансляцию на IPv4-сервер, возвращает ответ.

Задержка на NAT64 — 0.1-0.3 мс. Меньше, чем на обычный NAT. Потому что NAT64 работает на уровне DNS — адрес сервера резолвится через DNS64, трансляция происходит один раз.

Настройка NAT64 на прокси:

```bash

Включение NAT64 в nginx

stream {

server {

listen [::]:443;

proxy_pass backend.example.com:443;

proxy_protocol on;

}

}

```

Когда IPv6 не нужен

IPv6 не даст прироста, если:

- Канал забит под завязку (узкое место — скорость канала, не задержки)

- Сервер находится за NAT64 (двойная трансляция)

- Провайдер блокирует ICMPv6 (Path MTU Discovery ломается)

В остальных случаях — переход на IPv6 даёт 10-30% прироста скорости. Особенно заметно на высоких RTT (межконтинентальные соединения) и большом количестве одновременных соединений.

Итог

IPv6 быстрее не из-за магии. А из-за отсутствия NAT, меньшего размера заголовков, лучшей работы TCP и более прямых маршрутов. Для прокси это особенно важно — каждый лишний шаг обработки пакета добавляет задержку.

Если ваш парсер, стриминг или миграция данных упираются в задержки — проверьте, используете ли вы IPv6. Часто проблема не в скорости канала, а в накладных расходах IPv4.

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