Сайт FSA
31.08.2022

Как я перестал бояться IPv6

На самом деле, использовать IPv6 я начал довольно давно. Ещё в 2015 году, а возможно и раньше. Использовал его я на своём VPS сервере. Но только сейчас, с появлением возможности использовать IPv6 дома, без костылей, погрузился в особенности нового протокола с головой. И оказалось, что не всё так страшно. Протоколом можно пользоваться уже сейчас.

Ещё 8 июня 2011 года, с 00:00 по UTC ведущие интернет-провайдеры и компании, предоставляющие контент в интернете, в течение 24 часов предоставляли доступ как по IPv4, так и по IPv6. Спустя год, 6 июня 2012 года состоялся Всемирный запуск IPv6 — тестирование IPv6 признано успешным. В этот день крупные компании предоставили полноценный доступ к своим сайтам по IPv6, такие, как Google, Facebook, Microsoft Bing, Yahoo.

Спустя 10 лет поддержка IPv6 появляется и у Российских провайдеров. Именно то, что я получил возможность нативно использовать этот протокол в сети Ростелеком и послужило толчком для знакомства с ним.

Перестаём бояться IPv6 адресов

Первое, что пугает в новом протоколе - размер IP адреса. Теперь вместо 32 бит для адресации используется 128! С первого взгляда кажется, что использовать такие длинные адреса будет намного сложнее, чем IPv4. Но на самом деле разработчики протокола учли, что человеку сложно оперировать большими объёмам данных и добавили возможность значительно сокращать запись адреса. Для записи адресов IPv4 его разбивали на блоки по 8 бит и записывали значение каждого блока в виде десятичного числа. Между числами, в качестве разделителя, использовали точку. Для IPv6 используется аналогичный метод, но адрес разбивается на блоки по 16 бит, каждый блок записывается в шестнадцатеричной системе счисления. В качестве разделителя используется символ двоеточие, например 2001:0db8:00ac:000d:0000:0000:0000:0001. Выглядит это громоздко. Поэтому первое, что можно сделать, основываясь на нашем детском опыте в математике, это отбросить ведущие нули из каждого разряда, т.е. записать адрес так: 2001:db8:ac:d:0:0:0:1. Уже лучше! Но в глаза бросается несколько идущих подряд нулей. Для сокращения записи необходимо самую длинную последовательность из нулей заменить на ::. Таким образом мы разделим наш адрес на две части и мы точно будем знать правую часть адреса и левую. А недостающие нули мы дополним, поскольку знаем сколько должно быть групп из 16 бит. Таким образом адрес сокращается до 2001:db8:ac:d::1. По сравнению с 212.220.200.60 выглядит, конечно, немного сложнее, но не очень.

С адресацией для локальных сетей всё ещё веселее. Для них выделен диапазон fc00::/7, т.е. вы вправе для своей локальной сети использовать адреса вида fc00::1 или fd12::1. По моему мнению, они выглядят даже лучше, чем 192.168.1.1, 172.16.1.1 или 10.0.0.1, которые используются для тех же целей.

Но ведь адрес может быть 2001:db8:c11c:1600:ad76:5be7:6191:380c? Да! Может быть. Но в вашем распоряжении стандартно даётся сеть размером 64 бита. Т.е. вы вправе выбирать внутри сети половину адреса, т.е. если вы хотите задать адрес вручную, то можете выбирать красивый и легко запоминающийся адрес для своего сервера, например, первый адрес в своей сети 2001:db8:c11c:600::1 или какую-нибудь фразу 2001:db8:c11c:600::dead:beef (набор символов, конечно ограничен, но простор для творчества есть). Кроме этого, если вы получите в распоряжение стандартную сеть /48, то вы вправе для серверов выбрать нулевую сеть и тогда адрес можно сократить до 2001:db8:c11c::1. Любителям красивых адресов есть где разгуляться! Ну, а если ваш компьютер не является сервером, то сложный адрес - это скорее преимущество. К тому же, обычно такие адреса, в большинстве случаев, не нужно вводить вручную.

Новинки в протоколе IPv6

В сети IPv4 для того, чтобы узел смог подключиться к сети был необходим DHCP сервер или ручная настройка IP адресов на каждом узле. В сетях IPv6 сервер DHCP теперь не является обязательным. Любой маршрутизатор, при подключению к сети, рассылает узлам данные о сети с которой он работает и узлы сами могут выбрать себе адреса из доступных диапазонов. Также, узел при подключении к сети может отправить запрос на поиск маршрутизатора и в ответ получить эту же информацию не дожидаясь рассылки маршрутизатора. Таким образом, чтобы начать пользоваться интернетом не хватает только адреса DNS сервера. Можно воспользоваться и DHCP. При необходимости, маршрутизатор может в своём ответе указать, что за дополнительными настройками необходимо обратиться к DHCP серверу (например, за адресами DNS-серверов), а также маршрутизатор может ответить, что, в том числе и IP адрес, клиент должен получить от DHCP сервера.

Иметь несколько адресов в IPv6 сети - это нормально. Первый адрес, который обычно получает сетевой интерфейс - это Link-local адрес из диапазона fe80::/10. Благодаря ему ваше устройство может общаться с соседями, которые работают с вами в одном канале, например, сети WiFi или сегменте Ethernet сети. Адреса этого диапазона не маршрутизируются.

Если вы хотите получить несколько сетей, но при этом чтобы они не имели доступа к интернету (по аналогии с сетями 192.168.0.0/16, 172.16.0.0/12, 100.64.0.0/10, 10.0.0.0/8), то можете использовать адреса из диапазона fc00::/7 (от fc00:... до fdff:...). Данные адреса называются Unique local. Они также, как и их аналоги из IPv4 не маршрутизируются в интернете, но при этом могут маршрутизироваться внутри вашей локальной сети. Да, говорят, что в сетях IPv6 нет NAT. Однако никто вам не запрещает применить этот костыль для подобных адресов и сделать также, как было в сети IPv4. Но это не приветствуется, хотя и возможно.

Для полноценного доступа в интернет ваш узел должен получить Global unicast адрес. По сути, это аналог «белого» IP адреса в IPv4. Левую часть адреса выделяет провайдер, который предоставляет вам услуги доступа в интернет. Причём, вам может быть выделена сеть длиной /48, что позволит создать в пределах своей сети 65536 подсетей стандартного размера /64. На практике, мне выдали сеть размером /56, что тоже не мало и позволяет создать мне 256 подсетей /64.

Никто не мешает нам одновременно иметь несколько адресов, в том числе, по несколько Unique local и Global unicast адресов.

Ещё одной особенностью IPv6 является то, что благодаря наличию Link-local адресов наш маршрутизатор может вообще не иметь Global unicast адреса или Unique local. Связь внутри сети производится через Link-local адреса. Например, если посмотреть таблицу маршрутизации на моём компьютере, то можно увидеть, что маршрутом по умолчанию является адрес fe80::1 на интерфейсе wlp3s0:

fsa@local$ ip -6 route
...
default via fe80::1 dev wlp3s0 proto ra metric 600 pref medium

Есть значительные изменения в вещании на множество узлов. Однако не буду раскрывать эту тему ввиду того, что эта заметка предназначена для первого знакомства с IPv6.

Как перейти на IPv6

Даже не смотря на то, что свободные адреса IPv4 закончились, очень многие даже не задумываются о переходе на IPv6. А всё потому, что нельзя просто так взять и перейти на IPv6. Этот протокол обратно не совместим с IPv4. Но, с другой стороны, IPv6 поддерживает большинство современного программного обеспечения и операционные систем. У вас возникнут проблемы, если вы используете Windows XP (В 2022 году? С вами всё в порядке?) или какой-то специфическое ПО, разработчики которого не позаботились о поддержке IPv6. Браузеры, мессенджеры, торрент-клиенты - почти все поддерживают работу в IPv6 сетях. Я даже оказался в ситуации, что остался без работающей сети IPv4. Я даже не сразу заметил, что с ней что-то не так, потому что то, чем я пользовался, работало по IPv6. А всё потому, что на моём компьютере был настроен Dual-Stack, т.е. одновременно можно пользоваться как IPv4 протоколом, так и IPv6. Если сервис доступен по IPv6, то будет обращение к сервису именно по этому протоколу.

Если вы администратор сети, то вы, также, можете организовать для своих пользователей сеть IPv6 в механизмом трансляции NAT64 (из IPv6 в IPv4). Это позволит построить сеть полностью только на IPv6, но при этом получать доступ к ресурсам, которые доступны только по IPv4. Подробнее об этом я писал в заметке. Из достоинств - упрощается настройка сети, потому что не нужно настраивать IPv4 сеть. Из недостатков - не всё может корректно работать. В некоторых случаях может потребоваться дополнительное ПО на клиентах, которое обеспечит возможность работы некоторых приложений, которые не готовы к переходу на IPv6.

Что работает по IPv6

Увы, на многих популярных Российских сайтах протокол IPv6 не поддерживается. Однако настройка его на веб-сервере вообще не вызывает никаких затруднений. Например, в сервере nginx для IPv6 требуется добавить 1 строку в конфигурацию сайта.

На что обращаешь внимание после IPv4

Первое, на что обращаешь внимание - что твой шлюз по умолчанию не находится в той же сети, что и твой адрес. Точнее находится, но это адреса link-local, т.е из диапазона fe80::/10, которые присваиваются каждому физическому интерфейсу, где есть IPv6. Изначально сбивает с толку, но с другой стороны логично, потому что по этим адресам доступны все ваши соседи и именно они будут знать как маршрутизировать ваш запрос. А если они не ваши соседи, то и смысл вам знать их адрес из другой сети, кроме как link-local.

Вторая особенность - это то, что каждый узел может иметь более одного адреса. Никаких серых адресов. Впрочем, серые адреса могут вам понадобиться, если вы хотите сделать свою внутреннюю сеть, которая иногда может лишаться доступа в интернет, или, возможно и для того, чтобы не выводить в интернет узлы, которые не должны там быть. Одновременно ваши машины могут иметь адреса от двух провайдеров интернета, а также свой внутренний адрес. И это нормально. При чём один из адресов, который реально выдан провайдером, ваш маршрутизатор может запретить использовать до тех пор, пока другой маршрутизатор не скажет, что его провайдер отключил доступ по какой-то причине, например, авария. Узлы в сети примут информацию о новом маршруте, куда им стоит отправлять свои данные на основе анонсов от ваших маршрутизаторов.

Из второй особенности следует то, что адресация сети - это теперь не ваша забота, а то, что передают маршрутизаторы своим соседям. Теперь вы каждую доступную сеть должны прописать на маршрутизаторе. Каждый маршрутизатор просто говорит о том, какие адреса он предоставляет. Если эти адреса из глобальной адресации, значит через него можно ходить в интернет, если из локально уникальных, значит через него можно искать локальные ресурсы, которые недоступны через интернет.

Кстати, иметь несколько маршрутизаторов для доступа в интернет через IPv6 в одной сети тоже нормально! Более того, это позволит вам обеспечить резервирование таким способами, которые IPv4 даже не снились.

Когда мне говорят, что провайдер не хочет выделять сеть /48

С одной стороны, выглядит логично. Зачем мне 65536 сетей стандартного размера /64?

Ладно. Пусть это неэкономный расход ресурса сети IPv6. Мы даже не знаем сколько там в интернете сетей и клиентов сейчас. А давайте просто математически посчитаем то, что есть у нас сейчас в IPv4 и то, что нам даёт IPv6? При этом будем сильно жестить и сильно преувеличивать возможность IPv4, а для IPv6 максимально уменьшать размеры сетей, которые может получить провайдер в реальности.

Мы точно знаем, что для адресации сети в IPv4 используется 32 бита.

IPv6 - 2001:0DB8::/32, IPv4 - 255.255.255.255 эквивалентно FF.FF.FF.FF, т.е. сейчас всего адресов IPv4 столько, сколько можно раздать сетей /32 операторам, если брать просто размер в битах. Напрямую сравнивать не совсем корректно, потому что там есть специальные диапазоны сетей в IPv4, да и в IPv6 используются пока не все начальные биты адреса. Но в грубом представлении можно сказать, что если провайдеру в сети IPv6 выделен диапазон /32, то это примерно равнозначно, что ему выделен 1 или, давайте возьмём по максимуму, 16 адресов IPv4. Почему именно 16? Потому что я так хочу и именно столько вариантов у первого знака в IPv6 адресе. Сейчас используются только значения 2 и 3. Если просто отбросить это разряд, то число возможных IP префиксов в IPv6 с размером /32 сократится в 16 раз. Т.е. получается, что если всем провайдерам нарезать по 16 адресов IPv4, это всё равно что нарезать им сети по /32 в IPv6. Давайте пойдём дальше.

Сколько клиентов провайдер может подключить с 16-тью адресами IPv4? Наверно только 16? Да чего там, как минимум пару десятков, а то и сотен, потому что есть костыль в виде NAT. Представим, что он подключил прямо по максимуму, аж 256 абонентов, т.е. по 16 человек на один IPv4 адрес.

А что у нас с IPv6? Он может подключить аж целых 65536 клиентов, что в 4096 раз больше, чем с IPv4 и без NAT (в 256 раз больше, чем с NAT), которые, к тому же, будут иметь аж целых 65536 сетей стандартного для IPv6 размера в /64 в своём распоряжении. Даже не заставляйте переводить это в число доступных адресов, потому что это не имеет смысла. Т.е. вместо 16 адресов IPv4 адресов, провайдер имеет возможность адресовать столько клиентов и сетей у них стандартного размера, сколько не существует в данный момент белых IPv4 адресов.

А ведь можно ещё и экономить. И вместо 65536 сетей раздать клиентам по 256 сетей (/56), ведь, всё равно, даже этого, им будет много. Тогда получается, что на 16 адресов IPv4 приходится 16777216 клиентских сетей IPv6 (больше миллиона клиентов IPv6 на один IPv4 адрес), по 256 сетей стандартного размера /64 в каждом.

Ещё один способ наглядно показать обширность адресного пространства IPv6. На всей планете по данным 2021 года проживает 8 миллиардов человек. Давайте поделим адресное пространство на всех! Посчитаем сколько сетей /48 существует в адресном пространстве. Префикс для сети /48 имеет, как ни странно, 48 бит. В настоящее время адреса выделяются из диапазонов, которые начинаются на 2 и 3. Для простоты, будем учитывать /48 сети только те, что начинаются с символа «2». Эта цифра в префиксе занимает 4 бита. Т.е. в нашем распоряжении 48-4=44 бита, или 2^44=1,710^13. Поделим количество сетей /48 на число людей на планете 810^9. Таким образом, каждому человеку на земле доступно 2199 сетей размером /48 в публичном адресном пространстве IPv6, где адрес начинается с символа «2».

Если провайдеры будут экономить и выдавать каждому человеку на земле /56, тогда будет доступно 4,5*10^15, или 562949 сетей /56 на одного человека на земле!!!

А ещё не забываем, что первый символ IPv6 адреса может иметь 16 разных значений. Часть из них уже зарезервировано, но расширяться есть куда.

Провайдеры, вам всё ещё мало???

Вместо заключения

Если вы являетесь администратором какого-либо сервера, то стоит рассмотреть возможность подключения IPv6. Хостинг-провайдеры, в большинстве своём, выдают IPv6 сети в пользование без проблем, а зачастую даже бесплатно или за символическую плату. У меня на одном из серверов сеть /64 стоит 10 рублей в месяц, а на другом эта же сеть уже включена в тариф. Чем больше сервисов будет доступно по IPv6, тем более популярен это будет у провайдеров, предоставляющих услуги доступа в интернет, а значит и серверы будут больше использовать этот протокол. А ведь это прямой интерес для всех, поскольку адрес IPv4 закончились, а покупка старых блоков обходится довольно дорого. Кроме этого необходимо содержать ещё и железо, которое занимается NAT для тех клиентов, которые получают серые адреса при подключении, которые вынуждены выдавать провайдеры, опять таки, из-за нехватки IPv4 адресов.

Если вы просто хотите ознакомиться с IPv6 дома, то можете попробовать включить IPv6 на вашем маршрутизаторе. В августе 2022 года я обнаружил, что подобное работает на сети Ростелеком в Новосибирской и Свердловской областях, но есть некоторые незначительные ограничения, с которыми обычный пользователь интернета вряд ли столкнётся. Если у вас есть статический IP адрес, то можно может работать туннель 6to4, который не нужно дополнительно настраивать.

Если же ваш провайдер не предоставляет доступ по IPv6 ни в каком виде, то можно воспользоваться туннельным брокером, например, https://he.net, но для настройки туннеля требуется статический IPv4 адрес. Не рекомендую сильно нагружать канал через туннельного брокера, например, качать торренты. Используйте его только в ознакомительных целях!

Рекомендую ещё один полезный ресурс https://version6.ru где можно найти информацию о новом протоколе на русском языке.

Просто попробуйте IPv6 на практике и вы увидите, что ничего страшного в нём нет. Но его особенности в будущем облегчат жизнь провайдерам, удешевят оборудование и сделают сеть быстрее! Ну а IPv4 должен уйти на покой.


Обратите внимание, что заметки могут обновляться со временем. Это может быть как исправление найденных ошибок, так и доработка содержания с целью более полного раскрытия темы. Информация об изменениях доступна в репозитории на github. Там же вы можете оставить в Issue ваши замечания по данной заметке.


Если данная заметка оказалась вам полезной, можете поблагодарить автора финансово.