Pull to refresh

Мысли вслух про IPv6, или почему нас не спасет NAT

Reading time 4 min
Views 24K
Когда я читаю новости про IPv6 у меня складывается впечатление, что все сводится к выводам:
  1. Единственный плюс IPv6 — практически безграничное адресное пространство;
  2. IP-адресов мало, но, так как большинству белый адрес не нужен, нас спасет NAT;
  3. Если «отжать» IP-адреса у компаний, получивших большие пулы на заре интернета, то хватит еще на несколько лет.

При этом забывается масса важных деталей, которые сильно портят картину.


О проблеме нехватки IP-адресов


Когда создавался интернет, казалось, что 4 миллиарда адресов хватит всем с избытком. Сейчас, кол-во устройств, которые хотят в сеть, давно перевалило за это число и каждому адреса не хватает.

Самое интересное, что архитектура IP разрабатывалась с учетом избытка адресов — маршрутизация идет по префиксам адресов. В идеале, с точки зрения IP, сети должны быть в виде дерева, каждый узел которого имеет префикс, включающий все дочерние сети. Нарушение этого правила карается добавлением дополнительных записей в таблицу маршрутизации.

Из этого следуют следующие выводы:
  1. Чем более плотно используется адресное пространство, тем больше таблицы маршрутизации и затраты на их поддержание;
  2. Выдавать IP-адреса можно только пачками;
  3. Перераспределять адресное пространство дорого, то есть отнимание IP-адресов у зажравшихся империалистов ситуацию изменит не сильно.


Почему NAT не панацея?

Очень распространено мнение, что нас спасет NAT.

Для того, чтобы разобраться с ним, надо понять, как он работает. Общий принцип примерно следующий:
  1. Каждому сетевому IP-соединению соответствует комбинация: <IP-адрес клиента>:<порт на клиенте> — <IP-адрес сервера>:<порт на сервере>
  2. Порт на клиенте может быть произвольным, благодаря этому NAT может подменять внутренний адрес клиента на свой и общаться от своего имени.
    Для этого ему нужно хранить табличку с соответствием:
    <IP-адрес клиента>:<порт на клиенте> — <IP-адрес сервера>:<порт на сервере>, <порт на NAT>

Этот принцип накладывет следующие ограничения:
  1. Общее кол-во соединений с одного внешнего IP-адреса на один сетевой ресурс (комбинация <IP-адрес сервера>:<порт на сервере>) может быть не больше количества портов (для TCP и UDP оно равно 65535 — 4096 = 61439).
  2. Сервер не может быть за NAT, если NAT о нем ничего не знает (на домашних маршрутизаторах эта проблема обычно решается при помощи UPnP).
  3. Протоколы, которые не имеют понятие порта (например GRE), идентифицируются в NAT только по <IP-адресу сервера>, из-за этого за NAT по этим протоколам может к серверу подключиться только один клиент.
  4. Если пользователя за NAT-ом банят по IP, то страдают все, кто за тем же NAT-ом.


Общее кол-во соединений с одного внешнего IP-адреса на один сетевой ресурс может быть не больше количества портов

На примере, это выглядит следующим образом:
  1. Допустим за NAT-сидит 62000 человек;
  2. Все эти пользователи попытаются открыть окошко с сайтами yandex.ru и vk.ru;
  3. yandex.ru откроется у всех, так как имя yandex.ru ссылается на 6 IP-адресов;
  4. vk.ru откроется только у части пользователей, так как имя vk.ru ссылается на 1 IP-адрес (портов не хватило).

То есть мы будем получать проблемы с некоторыми сайтами в периоды пиковой нагрузки.

В реальности, цифры при этом будут существенно менее оптимистичными, по следующим причинам:
  1. браузеры обычно открывают несколько соединений на один сайт;
  2. после закрытия соединения порт некоторое время нельзя использовать для соединения с тем же ресурсом (особенно это актуально для UDP, где факт закрытия отсутствует).

При этом список ресурсов, которые массово используются пользователями не ограничивается сайтами. Он так же включает в себя:
  1. мессенджеры (ICQ, Google Talk и т.п.);
  2. сервера с обновления операционной системы, антивирусов и т.п.;
  3. службы хранения информации в online (Google Android, Dropbox, Ubuntu one и т.п.);
  4. сервера времени;
  5. DNS-сервера;
  6. teredo-сервера.

Из этого следуют следующие выводы:
  1. Емкость NAT-а ограничена. NAT позволяет «отодвинуть» решение проблемы, но не решает её.
  2. Слишком большое число пользователей за NAT-ом может приводить к трудноуловимым проблемам.

Кому нужен «белый» IP-адрес?


Очень распростанено мнение, что простому человеку белый IP-адрес не нужен, но это не совсем так.
Белый IP-адрес, может понадобиться:
  1. Тем, кому нужен VPN до работы.
    В Microsoft Windows штатная реализация VPN использует протокол GRE, у которого нет понятия порта. Из-за этого с NAT-ом этот протокол работает плохо.
    OpenVPN, Cisco VPN от этой проблемы не страдают, но и пользователю их настроить сложнее (в комплект Microsoft Windows они не входят).
  2. Тем, кому нужно использование P2P соединений.
    VoIP, Torrent и некоторые другие приложения любят передавать данные напрямую без участия внешнего сервера. NAT препятствует созданию прямого соединения. Обходится это путем хитрых алгоритмов, успешность которых зависит от типа NAT и использования внешних серверов.

То есть белый IP часто жизненно необходим людям, которым нужно работать из дома. При этом, заказать услугу «белый IP» у провайдера не всегда возможно.

Так же подсети белых IP-адресов могут понадобиться организациям, которые оказывает поддержку других организаций по VPN: когда используется несколько VPN до разных организаций, становится трудно избегать пересечения адресного пространства внутри своей и сторонней организации.

Какие плюшки дает IPv6, кроме увеличения адресного пространства?


У IPv6 помимо увеличения адресного пространства есть еще ряд преимуществ, среди них хотелось бы отметить:
  1. Упрощение маршрутизации.
    IP изначально проектировался с учетом на разряженное адресное пространсво.
  2. Увеличение скорости передачи данных.
    В IPv4 максимальная скорость передачи данных по TCP из-за размеров «окна» равна: 64Кбайт / <время отклика>
    То есть, если время отклика равно 150 мс, то данные по одному TCP-потоку можно прокачивать со скоростью не более 426 Кбайт/сек.
    Обычно это ограничение обходится путем передачи данных по UDP или в несколько TCP-потоков. Именно из-за этого лимита появились бесчисленные программы для быстрого скачивания с сайтов.
    В IPv6 такого жесткого ограничения нет.
  3. Мультикаст.
    Сейчас интернет-радиостанции вынуждены вещать каждому пользователю персонально одно и то же. Эфирное телевещание при такой схеме даже представить страшно.
    В IPv6 можно отправлять данные сразу нескольким подписчикам.

Итого


Лично у меня напрашиваются следующие выводы:
  1. Момент когда разом закончатся IP-адреса наступит очень не скоро, но от этого не легче;
  2. Процесс перехода на IPv6 идет черепашьими темпами и ускорения не предвидится, пока не начнутся реальные проблемы с получением IP-адреса;
  3. Из-за нехватки IP-адресов все больше пользователей будут запихивать за NAT;
  4. Пользователи без IPv6-адресов за NAT-ом начнут испытывать неожиданные проблемы при доступе к различным ресурсам.
Tags:
Hubs:
+90
Comments 143
Comments Comments 143

Articles