В 2023 году люди боятся многих новых для них вещей, например, systemd, SELinux, IPv6 и др. От этих вещей люди стараются избавиться, отключить, удалить. Об этом написано во множестве любительских мануалов в интернете, коим может являться и этот. Далее речь пойдёт о протоколе интернета IP версии 6, для краткости — IPv6.

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

Текст я попытался написать максимально доступным языком. Это не технические руководство. Воспринимайте эту заметку как отправную точку, просто чтобы перестать бояться использовать IPv6 и познакомиться с его основными особенностями, которые отличают его от IPv4, но при этом дают заметные преимущества.

Как появился IPv6 и почему он именно такой

История протокола начинается в 1990-х годах. Предпосылкой появления нового протокола являлись проблемы, которые накопились при использовании IP протокола, который в дальнейшем я буду называть IPv4 (из-за версии 4 в заголовке IP пакета).

Первоочередной проблемой оказался размер адресного пространства. Во-первых, он не позволял дать отдельный адрес каждому устройству в сети, что хоронило изначальный принцип сети интернет — «сквозную прозрачность». Этот принцип гарантирует нам то, что для доставки информацию от одного узла сети к другому нам никак не нужно будет модифицировать пакет с данными. В настоящее время ограничение адресного пространства вообще привело к тому, что даже провайдеры стали выдавать пользователям серые адреса и использовать NAT.

Чтобы увеличить размер адреса необходимо увеличить количество используемых бит. В ходе обсуждения вопроса места размещения дополнительных бит адреса инженеры пришли к выводу, что текущим форматом заголовка IPv4 придётся пожертвовать, т.е. новый протокол не будет иметь обратной совместимости, а, значит, его можно радикально переделать так, чтобы исправить в нём существующие недостатки и добавить новые возможности. Именно поэтому он так заметно отличается от IPv4, а не продолжает тянуть всего его недостатки за собой.

Единственное, что осталось общим в пакете IP — поле версии протокола. Старый протокол имеет номер «4». Значение «5» уже было зарезервировано для «Internet Stream Protocol Version 2», который так и не стал общедоступным, поэтому для нового протокола использовали следующее значение — «6».

Одна из идей расширения адресного пространства — использование переменной длины адреса. В этом направлении также были разработки, например, «IP нового поколения» — TUBA. Она описана в RFC 1347. В качестве основы в ней используется протокол ISO CLNP. Однако, даже сами авторы выражали опасение, что гибкость адресации будет в ущерб производительности. За TUBA зарезервирована «9» версия IP. Если бы разработка была признана перспективной, то вполне возможно, что сейчас внедряли бы IPv9, а не IPv6.

Обо всех зарезервированных версиях IP можно узнать на сайте IANA.

В результате был выбран компромиссный вариант — 128 бит на адрес. Этого достаточно, чтобы не испытывать долгое время нехватку адресов, при этом адрес остаётся достаточно коротким, чтобы даже самые простые устройства нормально могли работать с подобными адресами. Конечно, если бы протокол IPv6 разрабатывался, например, в 2010-х годах или сейчас, то, вполне вероятно, что вместо 128 бит адреса могли бы использовать 256, т.к. возможности даже самых компактных устройств значительно выросли по сравнению с 1990-ми годами, когда протокол IPv6 только начал разрабатываться.

Если вы представляете себе, что такое IP адрес, но, при этом, вы не специалист, то большинство адресов, которые вы знаете — это индивидуальные IPv4 адреса. Кроме этого, часто можно встретить адреса из диапазона 224.0.0.0/4. Это адреса для многоадресной рассылки. Также существуют адреса для широковещательных запросов. В IPv6 тоже существуют индивидуальные адреса, также известные как unicast адреса. А вот работу группового вещания в IPv6 переделали полностью. Это очень большая тема, которая явно не для первого знакомства с протоколом, поэтому подробно все остальные типы адресов, кроме индивидуальных, далее не будут рассматриваться, а только иногда упоминаться, поскольку они важны для нормального функционирования IPv6.

Адреса IPv6

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

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

Поскольку адрес имеет большую длину, то его поделили на 8 групп по 16 бит. Каждую из групп записывают в виде шестнадцатеричного числа от 0000 до FFFF. Группы разделяют между собой знаком «:». Для уменьшения длины адреса, в каждой из групп опускают ведущие нули, например, также вы делаете в десятичной системе счисления: вы можете записать число 10 в таком виде 0010, однако ведущие нули легко можно опустить и оставить только 10.

Кроме этого, ввиду специфики распределения IPv6 адресов, адреса могут содержать повторяющиеся нулевые разряды, например, 2001:DB8:0:0:0:0:0:1. В таком случае самую большую последовательность нулей (и только одну!!!) можно заменить на ::. Тогда адрес может быть записан как 2001:DB8::1. По сути, то, что расположено до знака двойного двоеточия — это старшая часть адреса, а то, что справа — младшая. Количество нулевых разрядов всегда легко восстановить, т.к. общее количество разрядов всегда равно 8.

В паре с адресом обычно используется маска сети, чтобы обозначить какие адреса будут соответствовать заданной сети, а какие нет. Если записывать маску сети аналогично тому, как это делается в IPv4, то это будет очень громоздко. При этом, обычно, почти нигде не используются маски с разрывами. Поэтому в IPv6 принято обозначать не маску сети, а префикс. Префикс указывает какое количество бит в левой части маски будет заполнено единицами, вся остальная часть будет наполнена нулями. Возможно вы сталкивались с подобной записью в IPv4, например, 192.168.1.0/24, то эквивалентно маске 255.255.255.0. Аналогично запишется и IPv6, адрес, например, 2001:DB8::1/64.

В IPv6 приняли стандартный размер префикса для канала. Чтобы все механизмы IPv6 работали необходимо использовать префикс /64. Если в IPv4 вы выбирали себе маску и могли использовать как 255.255.0.0, так и 255.255.255.0, или даже 255.255.255.192, то для сетей IPv6 смело выбирайте /64. Если вы где-то встречаете варианты использования маски /65 или ещё больше, вплоть до /128, то явно что-то не так. Однако, в некоторых случаях, вы не можете повлиять на распределение адресов выше, возможно для вас это будет являться единственным выходом, например, хостинг провайдер выдаёт вам только сеть /64, а вы хотите организовать VPN сервер с поддержкой IPv6. Провайдер нарушает рекомендации, а вы вынуждены использовать данные префиксы. Готовьтесь к другим подводным камням! А лучше решите проблему и вернитесь к стандартной сети /64.

Первое, что нужно понять, что отличает IPv6 от IPv4 — это то, что ваше устройство теперь может иметь не один IP адрес, а сразу несколько. В IPv4 подобная ситуация тоже возможна, но это не имеет большого смысла. Да, вы можете создать две сети с разными диапазонами в одном сегменте сети, но какой-то практической пользы на постоянной основе это не несёт. Иметь множество IPv6 адресов на одном сетевом адаптере — это нормально. Более того, для нормальной работы обычной сети вы не можете отказаться от link-local адреса.

Link-local адреса или подключаемся к сети IPv6

В IPv4 существует такое понятие, как канальные IP адреса. Это специально выделенный диапазон 169.254.0.0/16, который используют ваши устройства, если на интерфейсе не задан IP адрес или его не удалось получить. Так, например, поступают все версии Windows начиная... как минимум с Windows 95. Диапазон не очень популярен, поскольку может быть использован только в изолированной сети, который также можно назвать каналом. Канал — это пространство, где узлы сети могут обмениваться между собой любыми пакетами данных без использования промежуточных узлов.

В IPv6 для link-local выделен специальный диапазон fe80::/10. Не смотря на такой широкий префикс, реально в сетях используется стандартный /64. И это не простая сеть, а очень важная. Любой узел при подключении к сети IPv6 обязан взять себе адрес из этого диапазона. Даже если есть несколько сетевых адаптеров, то на каждом должен быть адрес из этого диапазона. Более того, эти адреса могут пересекаться на одном устройстве. Благодаря тому, что в таблицах маршрутизации всегда указан сетевой интерфейс, устройство может легко иметь 2 и более одинаковых адреса. Подобного механизма в протоколе IPv4 не было. Возникает логический вопрос: а как тогда работать с этими адресами? Логический ответ: как пользователю вам эти адреса вряд ли понадобятся, просто не обращайте на них внимание. Но если вы хотите их использовать, то кроме адреса нужно указать сетевой интерфейс, который, скорее всего связан с одним каналом. Как будет сетевой интерфейс называться зависит от реализации. Например, в linux это выглядит так: fe80::1%ens3, где ens3 — имя сетевого интерфейса. В Windows используется число, которое указывает на конкретный сетевой интерфейс: fe80::1%3.

Первое, что вы увидите при включении IPv6 протокола на сетевом интерфейсе — это link-local адрес. Например, если вы подключите к сети компьютер под управлением ОС Windows, то он автоматически выберет себе адреса из указанного диапазона. Если в вашей сети не будет DHCPv4 сервера, то компьютер также получит IPv4 адрес из диапазона 169.254.0.0/16. В данном случае IPv4 и IPv6 работают примерно одинаково. При этом IPv4 адрес изменится, если в сети появится DHCP сервер, а IPv6 адрес останется и продолжит работать не зависимо от настроек сети.

Link-local адрес всегда выбирается по определённому алгоритму, благодаря чему этот адрес для интерфейса всегда одинаковый и не меняется со временем.

Link-local адресации вполне достаточно, чтобы, например, открыть для сети папку или принтер в Windows для других машин, которые подключены к вашему каналу. Для примера рассмотрим две системы с Windows 7. После запуска этих операционных систем в одной локальной сети сети, машины прекрасно видят себя через сетевое окружение. Более того, можно даже отключить IPv4 протокол и убедиться, что всё работает именно через IPv6.

Если на вашей машине активирован протокол IPv6, то даже если вы не настраивали IPv6 сети и используете Windows, то вполне вероятно, что большая часть трафика в внутри сети между устройствами через стандартные механизмы Windows ходит именно по IPv6. Например, протокол LLMNR (Link-Local Multicast Name Resolution) позволяет найти IPv6 адреса устройств с использованием запросов на групповые адреса. Именно поэтому, когда вы обращаетесь к соседнему устройству по имени, то вы с большой долей вероятности с помощью LLMNR получите его link-local адрес и обратитесь к его сетевым ресурсам именно по сети IPv6. Это просто магия IPv6!!! Вы ничего не настраивали, но уже всё работает. И это не сломается, даже если добавите вашей сети новые возможности, например, выход в сеть интернет, просто потому, что link-local адреса с вами всегда.

Посмотрите на адреса вашего сетевого адаптера. Если там указан адрес, который начинается на fe80:, то это тот самый link-local адрес. Если он у вас есть, то протокол IPv6 активен на этом сетевом интерфейсе. Однако, несмотря на свою замечательность, этот тип адресов не способен обеспечить обмен трафиком с другими сетями, т.к. данная сеть не маршрутизируется. Чтобы получить к ресурсам других сетей необходимо использовать другой тип индивидуальных адресов.

Рассмотрим два узла ALPHA и BETA на Windows 7 которые были объединены в сеть без каких либо других устройств. Windows 7 была выбрана как достаточно старая, к тому же её поддержка закончилась. Сразу после настройки узлы получили link-local адреса IPv6 и канальные адреса IPv4.

Настройка сети узла ALPHA
Настройка сети узла ALPHA
Настройка сети узла BETA
Настройка сети узла BETA

Даже если отключить IPv4 протокол, узлы прекрасно продолжают видеть друг друга.

Доступность общих папок при отключении IPv4
Доступность общих папок при отключении IPv4

Даже Windows 7 имеет полноценную поддержку протокола IPv6.

Любопытный факт. В сети IPv6 маршрутизатор может вообще не иметь никаких других адресов, кроме link-local, но при этом успешно маршрутизировать пакеты. А всё потому, что в его таблице маршрутизации могут быть быть указаны link-local адреса соседних маршрутизаторов.

Частные индивидуальные адреса (ULA)

Представьте себе ситуацию, что вы решили объединить две сети. Если у вас сеть IPv4, то вы начинаете использовать стандартные выделенные диапазоны: 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16. Благодаря использованию этих адресов, в дальнейшем, вы легко сможете подключиться к сети интернет, поскольку данные адреса используются только в частных сетях и не будет конфликта адресов. Разве что придётся применить специальный костыль (NAT), который будет подменять адрес из этого диапазона на тот, который способен маршрутизироваться в интернете.

В IPv6 тоже есть свой аналог. Это тоже специально выделенный диапазон fd00::/8. За этими адресами закрепилось наименование ULA — Unique local address. С ним рядом присутствует смежный блок fc00::/8, а вместе они представляют префикс fc00::/7. Однако окончательного решения по блоку fc00::/8 от IETF не было. Поэтому в большинстве случаев используется диапазон fd00::/8. Большинство маршрутизаторов с поддержкой IPv6 по умолчанию автоматически генерирует сеть fdXX:XXXX:XXXX::/48, которую в дальнейшем будет использовать в качестве ULA адресов. При использовании прошивки OpenWRT на вашем маршрутизаторе вы легко сможете изменить адресацию этой сети. А вот некоторые устройства, например, GPON маршрутизаторы от Ростелеком имеют крайне скудные настройки для IPv6 и не позволяют изменить адресацию этой сети.

Немаловажная деталь о которой говорилось ранее. В отличие от IPv4, использование ULA не означает, что ваш сетевой адаптер перестаёт пользоваться link-local адресом. Он по прежнему остаётся доступен и ваше устройство может общаться с соседями используя только его.

Как использовать эти адреса? Также, как вы используете аналогичную адресацию в IPv4. Можете просто назначить вручную каждому хосту свой IPv6 адрес. При этом, благодаря тому, что запись IPv6 адреса можно сократить, можно добиться ещё более лаконичной записи адреса, чем в IPv4, например, fd12::1. Первая часть адреса fd12:0:0:0: — это выбранная вами сеть, 0:0:0:1 — адрес узла внутри сети /64.

Прописывать адреса вручную обычно не очень хорошая идея. Для IPv4 чтобы получить адрес у нас есть единственный способ — спросить у сети, а не может ли она предоставить мне IPv4 адрес. Этот механизм называется DHCP. В IPv6 пошли дальше. Если ваша сеть нуждается в ULA адресах, то она, вероятно, будет использовать маршрутизатор для связи с другими сетями. Во время своей работы маршрутизатор рассылает уведомления рабочим станциям с какими сетями он работает, а также дополнительную информацию, например, адреса DNS серверов. Также маршрутизатор может отправить эти данные по запросу клиентов. Таким образом, как только в сети появляется маршрутизатор, он рассылает всем клиентам всю необходимую информацию. Устройства, получив анонс, могут автоматически сформировать свой уникальный адрес по определённым алгоритмам и настроить свои сетевые интерфейсы. Этот механизм называется SLAAC.

DHCP в IPv6 тоже не обошли стороной, поскольку это очень полезный инструмент. Маршрутизатор в анонсе может выставить два флага о необходимости обратиться к DHCP серверу:

  • за IPv6 адресом;

  • за дополнительными параметрами.

DHCP теперь не обязан предоставлять вам адрес, хотя может это делать, но всё также может подсказать вам где искать те или иные сервисы в сети. DHCPv6 становится опциональным, потому что без него сеть IPv6 способна работать просто при наличии маршрутизатора.

Снова посмотрите на адреса на вашем сетевом адаптере. Если там присутствуют адреса из диапазона fdXX:, то ваше устройство может общаться по сети не только с соседями, но ещё и через маршрутизаторы вашей локальной сети. Эти адреса могут появляются автоматически, если ваш маршрутизатор поддерживает IPv6. Этих адресов ещё недостаточно, чтобы получить полноценный доступ к интернет, но, как и в IPv4, вы уже можете воспользоваться прокси-сервером или даже NAT. Однако использование NAT не приветствуется в IPv6, и ваше устройство, скорее всего, предпочтёт использовать IPv4 адрес вместо ULA, если, конечно, такая возможность имеется.

Глобальные индивидуальные адреса IPv6 (GUA)

Самый востребованный тип Unicast адресов в интернет — Global Unique Address. Только адреса из этой группы могут маршрутизироваться в интернете. Если вы собираетесь использовать интернет, то вам нужен адрес именно из этого диапазона.

По своей сути эти адреса для пользователя ничем не отличаются от ULA, за одним главным исключением — пакеты с адресами GUA маршрутизируются в интернете. Из этого вытекает, что назначить себе любой GUA адрес, как это делали с ULA, просто так нельзя. Адреса GUA выделяются блоками поэтапно и, в конечном итоге, вы получаете свой блок от вашего провайдера. В рекомендациях IANA для абонента рекомендуется выделять сеть не менее /56 (т.е. вы получаете 256 сетей /64), что несколько меньше первой рекомендации /48 (65536 сетей /64). Особо жадные провайдеры могут выделять только одну сеть /64. Но есть и те, кто щедро выделяет максимально сеть /48.

Таким образом, GUA — это уже третий адрес, который может быть присвоен вашему сетевому интерфейсу наряду с link-local и ULA.

В настоящее время IANA выделяет адреса, в основном, из пула 2000::/3, (2XXX:... и 3XXX:...). Если подобных адресов нет на вашем сетевом интерфейсе, то и в интернет вы выйти с использованием IPv6, вероятно, не сможете.

Откуда у меня столько IPv6 адресов?

Пользователи Windows могут открыть свойства сетевого интерфейса и ужаснуться количеству IPv6 адесов. Пользователи Linux тоже могут выполнить команду ip a увидеть подобное:

2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 20:23:0d:db:09:10 brd ff:ff:ff:ff:ff:ff
    inet6 2001:0db8:2023:0910:60e1:76bd:601e:fa2f/64 scope global temporary dynamic
       valid_lft 85496sec preferred_lft 2696sec
    inet6 fd23:f1a9:d8a2::cea9:b317:45a2:eb90/64 scope global temporary dynamic
       valid_lft 528157sec preferred_lft 9546sec
    inet6 fd23:f1a9::12/128 scope global dynamic noprefixroute
       valid_lft 42598sec preferred_lft 2696sec
    inet6 2001:0db8:2023:0910::12/128 scope global dynamic noprefixroute
       valid_lft 42598sec preferred_lft 2696sec
    inet6 2001:0db8:2023:0910:36e1:7563:52e3:9043/64 scope global temporary deprecated dynamic
       valid_lft 85496sec preferred_lft 0sec
    inet6 2001:0db8:2023:0910:baa2:45c8:8915:6d10/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 85496sec preferred_lft 2696sec
    inet6 fd23:f1a9::cfab:64da:1f13:f335/64 scope global temporary deprecated dynamic
       valid_lft 441971sec preferred_lft 0sec
    inet6 fd23:f1a9::90e:a9d9:2a14:1a03/64 scope global mngtmpaddr noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::a33a:1d30:af11:d339/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

Из результатов видно, что устройство получило 9 адресов IPv6:

  1. fe80::a33a:1d30:af11:d339/64 scope link noprefixroute

  2. fd23:f1a9::90e:a9d9:2a14:1a03/64 scope global mngtmpaddr noprefixroute

  3. fd23:f1a9::12/128 scope global dynamic noprefixroute

  4. fd23:f1a9::cea9:b317:45a2:eb90/64 scope global temporary dynamic

  5. fd23:f1a9::cfab:64da:1f13:f335/64 scope global temporary deprecated dynamic

  6. 2001:0db8:2023:0910:baa2:45c8:8915:6d10/64 scope global dynamic mngtmpaddr noprefixroute

  7. 2001:0db8:2023:0910::12/128 scope global dynamic noprefixroute

  8. 2001:0db8:2023:0910:60e1:76bd:601e:fa2f/64 scope global temporary dynamic

  9. 2001:0db8:2023:0910:36e1:7563:52e3:9043/64 scope global temporary deprecated dynamic

Как уже описывалось выше, можно заметить, что первый адрес относится к link-local адресам. со второго по пятый относятся к ULA и с шестого по девятый к GUA. Как уже вам известно, адрес link-local был присвоен автоматически при включении протокола IPv6. А вот полученные адреса ULA и GUA можно разделить на 3 группы:

  1. автоматически сформированный адрес с помощью SLAAC;

  2. адрес, полученный от DHCPv6-сервера;

  3. автоматически сформированные адреса, которые обеспечивают приватность.

Автоматически настроенный IPv6 адрес

Как уже отмечалось ранее, при подключении к сети маршрутизатора, он начинает рассылать свои анонсы со всеми необходимыми для настройки сети параметрами. Одним из ключевых параметров, которые передают маршрутизаторы — это префиксы сетей, которые они обслуживают. Префикс сети, это ничто иное, как первые 64 бита адреса IPv6. Получив его, каждый узел сможет сформировать свой уникальный IPv6 адрес. Именно такими адресами являются №2 и №6 из нашего списка. Алгоритм формирования этого адреса может зависеть от операционной системы на устройстве, а также от его настроек, в том числе может быть привязан к MAC-адресу сетевого адаптера. Как вы понимаете, это не очень безопасно в интернете.

Одним из первых алгоритмов был модифицированный EUI-64. Что это такое? Это просто обычный MAC-адрес, который преобразовали из 48 до 64 бит. А модификация — это изменение бита, говорящего о том, что MAC-адрес назначен вручную. Зачем эта модификация. Да просто потому, что простые адреса вроде ::1, ::2 и прочие могли бы случайно совпасть с MAC-адресом, который был присвоен какому-либо устройству легально. Благодаря модификации MAC-адрес, соответствующий этим адресам однозначно говорит о ручном назначении MAC-адреса. Инженеры просто перестраховались.

EUI-64 вполне хороший вариант для link-local адресов, потому что он обеспечивает гарантированно уникальный адрес в сети, потому что MAC-адреса уникальны в каждом канале. Если адрес не уникален, то будет проблема с передачей Ethernet кадров и это, в любом случае, придётся исправлять.

Светить MAC-адресом в составе публичных IP не очень хорошая идея. Поэтому большинство операционных систем теперь используют случайную генерацию IPv6 адреса по определённому алгоритму. Этим они гарантируют постоянство IPv6 адреса внутри выданного префикса IPv6, но при этом из этого адреса невозможно извлечь MAC-адрес устройства и он не повторяется при изменении префикса.

Таким образом, получив от маршрутизатора анонс, устройство автоматически присвоило себе по одному адресу ULA и GUA. Эти два адреса выглядят совершенно различно. Один из адресов позволяет маршрутизировать пакеты внутри вашей сети, как это ранее вы делали в сетях, например, 10.0.0.0/8 или 192.168.0.0/16, а второй позволяет вашему устройству пользоваться сетью интернет.

В анонсах маршрутизатора даже можно передать адреса DNS серверов, которые обслуживают вашу сеть, в том числе, указать адреса публичных DNS, которыми должны пользоваться клиенты. К сожалению, не все клиенты способны принять данный тип данных, например, подобная проблема присуща ОС Windows. Решается она с помощью DHCPv6 сервера.

Даже если у вас пропадёт соединение с интернетом, ваш маршрутизатор оповестит все устройства о том, что GUA больше недоступен и ваши устройства продолжат общаться используя ULA адреса или даже link-local.

Адрес, присвоенный DHCPv6 сервером

О том, что DHCPv6 сервер доступен в вашей сети вы можете узнать из анонса маршрутизатора. Маршрутизатор может сообщить узлам, что IPv6 адрес нужно получать от DHCPv6-сервера.

Если ваш узел обратился к DHCP-серверу, то он вполне мог получить адреса №3 и №7 из нашего списка (fd23:f1a9::12 и 2001:0db8:2023:0910::12). Это означает, что вам в сети /64 был выдан адрес 12.

К сожалению, большинство узлов предпочитают адрес с наименьшим адресом. Т.е. если вы выходите в интернет, то вас легко идентифицировать по адресу 2001:0db8:2023:0910::12. Если вас это устраивает, то вы легко можете пользоваться интернетом и дальше.

Конфиденциальный IPv6 адрес

Если предыдущие IP адреса могли предоставить вам какие-то постоянные IPv6 адреса, хоть и случайные, но вы вполне могли их использовать для своих целей. Но если при их использовании у вас возникает ощущение дискомфорта, потому что вы считаете, что за вами могут следить, то для вас создан третий тип адресов. Не зависимо от того, какие постоянные адреса выданы вашему устройству, вы всегда можете получить случайный временный IPv6 адрес из доступных вам префиксов и использовать именно его.

Описание алгоритма приведено в RFC 4941 «Privacy Extensions for Stateless Address Autoconfiguration in IPv6». Если описать кратко, то ваш узел динамически формирует случайный IPv6 адрес из выданного маршрутизатором диапазона и пользуется им для всех исходящих соединений. Но тут есть одна проблема. Ваше устройство может соединиться и постоянно использовать соединение. При этом оно имеет право изменить свой IPv6 адрес. Для этого старые IPv6 адреса оно помечает как deprecated. Когда все соединения с использованием этого адреса будут закрыты, адрес может быть удалён с сетевого интерфейса.

В приведённом варианте механизмы конфиденциальных IPv6 адресов были использованы для 4 адресов: двух ULA (№4 и №5) и двух GUA (№8 и №9). Эти адреса помечаются как temporary.

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

Немного про безопасность IPv6

Очень часто в интернет одним из аргументов против IPv6 является то, что, якобы, в IPv4 трансляция адресов (NAT) обеспечивает защиту сети. Якобы, благодаря ему устройства внутри сети недоступны извне. Отчасти это так. Внутренняя адресация не может быть доступна из интернета напрямую. Однако исследователями найдено множество способов обойти ограничения NAT. Самым простым является заражение машины внутри сети, которая уже сама будет связываться с удалённым центром управления. Есть способы проброса пакетов на нужный узел внутри сети даже при наличии NAT. Защититься от этого метода можно только используя брандмауэр, который как раз и предназначен для защиты! Таким образом мы приходим к выводу, для того, чтобы обеспечить защиту вашей локальной сети от атак из интернет — использовать брандмауэр.

Для примера, рассмотрим настройки по умолчанию на маршрутизаторе с OpenWRT. Правила брандмауэра (межсетевого экрана) запрещают входящие пакеты из сети интернет и разрешают исходящие. При этом именно брандмауэр обеспечивает защиту вашей сети, а не NAT! NAT мы вынуждены применять по причине того, что мы не можем обеспечить нашу сеть достаточным количеством публичных IP адресов и нам необходимо на границе модифицировать адрес источника, записывать то, что мы сделали в специальную таблицу, чтобы при ответе отправить его на нужный узел сети, тоже модифицировав его соответствующим образом. Это сильно усложняет обработку транзитных пакетов, при этом нам не нужно забывать о правилах брандмауэра, который и защищает нашу сеть от вторжения!

А что нужно будет сделать, чтобы обеспечить доступ к сервису на одной из наших машин по IPv6? Достаточно создать правило для трафика, где указать адрес нашего сервиса и необходимые порты. После этого всё начинает работать. А что нужно сделать для IPv4? Во-первых, озадачиться выбором порта для сервиса, который будет перенаправлен на один из портов на внутреннем адресе, а также создать правило для трафика, как это было для IPv6. Если вы захотите вывести в интернет два веб-сервера, то у вас не получится этого сделать, поскольку порты 80 и 443 у вас в одном экземпляре на один IPv4 адрес. Направив трафик веб на одну из машин, вторую вы уже не сможете открыть не меняя номеров портов. Можно, конечно, получить ещё один внешний IPv4 адрес и перенаправлять соединения с одного адреса на одну машину, а с другого на другую. Но, согласитесь, схема очень уж сильно усложняется, если сравнивать с тем, что нужно было сделать при использовании IPv6.

Что нам даёт IPv6

Даже не смотря на то, что размер заголовков пакетов вырос, но он вырос не так значительно. При росте размеров адреса источника и получателя в 4 раза сам заголовок вырос только в 2 раза. При этом его размер стал фиксированным, что упрощает его обработку. Кроме этого, теперь заголовок не имеет контрольной суммы, что позволяет избавиться от необходимость её пересчёта на каждом промежуточном узле. Целостность самих данных контролируются на вышележащих уровнях (например, TCP и UDP). Надёжность передачи данных в сети возросла, а эти особенности протокола могут обеспечить более высокую скорость обработки на промежуточных узлах.

Администраторы получают гораздо более простые для понимания человеком правила управления трафиком. Теперь не нужно заботиться о том, что пакеты приходят на ваш узел с одним адресом, уходят с другим. Вы просто создаёте правила что можно, а что нельзя.

Пользователь же получает то, что он теперь может обмениваться данными с другими напрямую, минуя промежуточные серверы, которые перенаправляют трафик. Это особенно критично, если вы общаетесь через видео. Ваш трафик пересылается изначально на промежуточный сервер, который может пересылать сотни подобных звонков и уже потом передаёт адресату. Теперь у вас появляется возможность обмениваться этим трафиком напрямую и качество видеосвязи будет зависеть только от пропускной способности ваших каналов.

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

IPv4 ценный ресурс сети и их аренда стоит денег. Эта цена закладывается в стоимость вашего интернета, стоимость ваших серверов, которые вы арендуете.

В современном мире нет необходимости использовать IPv4 адреса. ОС Windows научилась их использовать полноценно как минимум с Windows 7. Другие системы умеют использовать их, также, с незапамятных времён. Самые беспроблемные устройства — современные смартфоны. Они просто появились практически одновременно со всемирным запуском IPv6. В конце концов, если вас так устраивают IPv4 адреса внутри вашей сети, используйте их. Но их использование в глобальной сети замедляет её и заставляет решать проблемы, которых просто нет в IPv6.

А можно полностью избавиться от IPv4 сейчас?

Да, но есть нюансы. Вы можете отключить IPv4 адрес на своей машине, но при этом потеряете доступ к сети IPv4. Доступ можно восстановить с помощью NAT64 и DNS64. NAT64 можно установить на ваш маршрутизатор, либо использовать сторонний сервис, поскольку вся адресация IPv4 легко вписывается в стандартную сеть IPv6. DNS64 обеспечивает преобразование IPv4 адресов в IPv6, которые будут указывать на ваш NAT64. Можно использовать для NAT64 стандартный диапазон 64:ff9b::/96, тогда вы даже можете использовать публичные сервисы DNS64, напрмиер, от Google и Cloudflare.

Адреса серверов Google DNS64:

  • 2001:4860:4860::6464

  • 2001:4860:4860::64

Адреса серверов Cloudflare DNS64:

  • 2606:4700:4700::64

  • 2606:4700:4700::6400

В качестве NAT вы можете использовать jool и tayga. Например, автор этой заметки использует jool на своём маршрутизаторе с прошивкой OpenWRT.

Что такое NAT64? Чтобы стало понятней, то ваш домашний маршрутизатор выполняет ту же функцию NAT, но он преобразует ваш внутренний адрес IPv4 в другой внешний адрес IPv4. Таким образом ваш NAT можно обозначить как NAT44. Соответственно NAT64 преобразует ваш IPv6 адрес в IPv4. Возможно, с точки зрения ресурсов, операция более затратная, чем NAT44, но она нужна только на время перехода от IPv4 к IPv6 для ресурсов, которые не работают с IPv6. Т.е. чем меньше IPv4, тем меньше нагрузка на NAT64. В перспективе он вообще становится ненужным.

Увы, но NAT64 с DNS64 не поможет вам, если ваше приложение использует IPv4 адреса напрямую. Из часто встречающихся ситуаций — торренты. Но и для этого есть отдельное решение — CLAT (Customer-side transLATor). По сути это NAT46, когда обращение к IPv4 преобразуется в обращение к NAT64, который произведёт обратное преобразование. Однако это решение необходимо устанавливать на каждое ваше устройство. Но есть вариант переноса его на ваш маршрутизатор. По сложности работы этой схемы это сопоставимо с тем, когда вы от провайдера получаете не публичный IPv4 адрес. Именно эти преобразования происходят на вашем маршрутизаторе и на сервере провайдера. Кстати, Европейские провайдеры успешно используют схему, при которой сервис CLAT переносится на маршрутизатор, который провайдер выдаёт пользователю (привет Ростелекому с его кривыми CPE, спасибо они хотя бы базовые возможности дают для IPv6). При этом его сеть полностью построена на IPv6, а доступ в IPv4 сеть он предоставляет через свои серверы равномерно распределяя ресурсы IPv4 между пользователями.

Заключение

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

Всемирный запуск состоялся 6 июня 2012 года, которому, почти год назад, предшествовал «Международный день IPv6» 8 июня 2011 года, когда производилось всемирное тестирование нового протокола. Уже в это время протокол был достаточно зрелым. Большинство оборудования с этого времени выпускалось и выпускается с поддержкой IPv6.

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

Комментарии (34)


  1. AlexeyK77
    13.11.2023 19:41
    +7

    " Однако исследователями найдено множество способов обойти ограничения NAT. Самым простым является заражение машины внутри сети, которая уже сама будет связываться с удалённым центром управления." - вот именно поэтому NAT и выполняет важнейшую функцию безопасности, что просто своим фактом существования сценарий подлома от простого: обнаружение-скан-взлом усложняется до взлома изнутри.

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


    1. Aelliari
      13.11.2023 19:41
      +7

      выполняет важнейшую функцию безопасности, что просто своим фактом существования

      Нельзя подменять фаерволл - нат-ом


      1. AlexeyK77
        13.11.2023 19:41
        +1

        так с этим никто и не спорит, фаервол необходим и дополняет нат.


    1. FSA Автор
      13.11.2023 19:41
      +3

      вот именно поэтому NAT и выполняет важнейшую функцию безопасности, что просто своим фактом существования сценарий подлома от простого: обнаружение-скан-взлом усложняется до взлома изнутри

      В сети IPv6 эту функцию выполняет, как и положено, файервол. Например, в OpenWRT по умолчанию запрещён доступ к узлам внутри сети извне, без всякого NAT. Если вам нужен такой доступ, то это нужно явно прописать в правилах файервола.


      1. alex_kag
        13.11.2023 19:41

        И так сделано во всех "провайдерских" модемах? Или все-же надо покупать отдельную железку домой?


        1. Heggi
          13.11.2023 19:41
          +2

          Сейчас даже в самых дешманских китайцах файрвол нормально настроен (за все модели не скажу, но с которыми я сталкивался - там все нормально из коробки было)


    1. MaxSoniX
      13.11.2023 19:41
      +4

      Если бы не для людей оно бы и осталось чередой бит. Начнёте работать с IPv6 - быстро привыкните. Это если бы секретари возмущались от обилия форм бюрократии. Либо вы с этим работаете либо как обычный человек изредка с этим будете сталкиваться.


    1. begin_end
      13.11.2023 19:41
      +8

      новый протокол не будет иметь обратной совместимости

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

      В процессе разработки настолько важной вещи стоило бы проконсультироваться с психологами, админами-обывателями, а не принимать решения в узком кругу технарей-супергиков.
      Начнем с того, как человек воспринимает числа: с возрастом в мозгу формируется отдельный элемент для каждого из часто используемых чисел величиной более 10. То есть, 127 мы запоминаем не как 1,2,7 а именно как 127 (сто-двадцать-семь). У нас есть оперативная память, позволяющая сохранить указатели на ограниченное число однородных объектов (принято считать, что в среднем это число равно 7). Обычный ipv4 тратит на запоминание 4 объекта, еще и место на порт остается (порт займет от 1 до 2 "указателей"). В чем ужас ipv6 для нашей памяти? Использование букв. Это для компьютера HEX числа нормальны. Наша память пытается запомнить [2001]:[0][db][8]:[2023]:[09][10]:[]:[12], минимум как 9 объектов (и это я еще скостил - 2001 или 2023 могут пройти за 1 объект, не как [20][01], так как это значения годов, которые мы часто встречали и которые по крайней мере у меня воспринимаются как цельное понятие; а db проходит единым из-за ассоциации с database).
      Но эти 9 объектов разного подтипа - числа, слово db и пустота []. И значит еще неявное количество памяти нужно для коррекции подтипов объектов. А еще есть нагрузка на память из-за нефиксированности числа запоминаемых объектов ("а это точно вся длина что мы вспомнили, больше ничего нет?"). Ведь в ipv4 мы запоминаем всего 4 числа с пределом 255, простая самопроверка.
      Теорию информации не обманешь. Если в адресе ipv6 хранится намного больше бит информации, то и помнить мы будем вынуждены больше, как бы там не укладывала информацию наша нейросетка.

      Ну и про NAT: обязательность его использования автоматически создает некоторую защиту. И речь не о том, что стоит или нет расчитывать на NAT, как на средство безопасности. Нужно понимать, что в реальности люди-неспециалисты (неперфекционисты, непрофессионалы) предпочитают использовать технологии в минимально жизнеспособном виде. И если без NATa не обойтись, то когда он станет не нужен многие будут забывать про файервол / отключать / убирать его (а неудобно же, нужно настраивать, а и так работает и прочее).

      В таких серьезных вещах, как сетевой протокол (всего человечества!) не место максимализму. Нужно подходить со здравым консерватизмом, высокой обратной совместимостью во всех аспектах контакта технологии с людьми.
      Когда-то, когда размышляли о вариантах решения проблемы с лимитом адресов, я наивно предполагал, что решение будет наподобие такого:

      Дополнительные 2 числа трудновато запомнить, но еще возможно. И хватит на 100+ лет. А еще можно было бы сделать автоматическую конвертацию протоколов, а не городить 2 параллельных сетевых стека. Старая адресация вошла бы, как часть новой. Новые устройства работали со старыми, старые с новыми (с нюансами естественно, задиапазонную часть адреса можно было бы передавать с помощью некого костыля, что на срок жизни устройств годный вариант и решающийся обновлением ПО). Но нет, любят все стереть и начать с чистого листа, как в присказке: "у нас есть 100 легаси стандартов, но все они плохие. а давайте сделаем новый, который лучше. теперь у нас 101 стандарт". При этом адресов заложили столько, что хватит на всю галактику (а на практике просто выносит память).

      Как бы так не вышло, что к моменту полного внедрения ipv6 во всем мире и отказа от ipv4, актуальность ipv6 упадет, да потребуется разрабатывать новый стандарт (появятся какие-нибудь космические сети, квантовые сети, потребующие реализации своих особенностей и т.д.).
      Я считаю, что внедрение ipv6 проходит крайне неудовлетворительно - до сих пор нельзя иметь сервер (для сервисов людям) лишь с ipv6 адресом. 99% локальных и магистральных провайдеров должны поддерживать ipv6 на всех уровнях, лишь тогда можно будет сказать, что он внедрен.


      1. FSA Автор
        13.11.2023 19:41
        +1

        Я сам с сетями давно общаюсь. Мне наоборот казалось странным, что IPv4 адреса записаны десятичными цифрами. Это жуть как неудобно, когда настраиваешь сеть, отличную от /16 и /24. В ВУЗах целые контрольные работы студенты делают, где их учат правильно в десятичном виде распределять адреса. Если бы использовали шестнадцатеричную систему счисления, как делали программисты раньше, да и сейчас на низком уровне, то не было бы гораздо проще. А так приходится запоминать кучу магических цифр, как минимум 4, 8, 12, 16, 20, 24, 28, 32, 64, 96, 128, 160, 192, 224, 240, 252, 254... Если смотришь дамы в том же Wireshark,то IP адреса явно не видны, потому что записаны в шестнадцатеричном виде...

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

        А ещё представьте себе, чтобы вы делали в десятичной системе, если бы провайдер выделил бы вам сеть /56, как, например, делает сейчас Ростелеком? Например, 2a01:620:c130:a300::/56. тут мы чётко видим, что нам доступны последние два нуля перед двойным двоеточием. a3 всегда остаётся постоянным в нашей адресации.


        1. begin_end
          13.11.2023 19:41
          +3

          Да, десятичная форма адреса это странно и неудобно для программиста. В случаях кодинга работа с ipv4 часто идет в HEX. Хотя это касаемо именно нативных/низкоуровневых приложений. В ЯП высокого уровня с адресами больше работают в текстово-десятичной форме.

          Чтобы люди были с шестнадцатеричной системой "на ты", ее следует преподавать с самого начала, как обычный счет. И мыслить все время в ее категориях. Чтобы в памяти сформировались отдельные ассоциативы, хотя бы для 00-FF.
          Но мне кажется, наша природная нейросеть не предназначена для естественной (неосознанной) работы с числами. Хотя бы вспомнить, как мы работаем с десятичной системой, запоминаем таблицу умножения. Для нас проще помнить числа, чем вычислять их.
          А буквы помнить сложнее, чем числа (потому что пул букв больше, и не важно, что в HEX только до f).

          На низовой работе админов регулярно приходится запоминать адреса, чтобы перенести их на иной носитель (на настраиваемый роутер, сервер, в список какого-нибудь ПО, на бумажку для другого админа). Для любого ipv4 адреса я способен 1 раз посмотреть, условно целую минуту побегать-поделать что-то и воспроизвести результат в другом месте. С ipv6 такое не прокатит, нужно смотреть 2-3 раза на источник. Уйти, держа весь результат в памяти не выйдет, приходится брать бумажку.

          При том я в программировании немало поработал с HEX числами. Но все равно, даже в иной предметной области (значение цвета) 0BA5F2D7 мне проще временно помнить, как 195-424-98-3 (4 объекта одного типа), чем как BA-5-F-2-D-7 (6 объектов разного типа).
          Воспроизвести голосом/надиктовать HEX тоже трудно - ведь в отличие от цифр у букв нет длинных прочтений, только их алфавитные звуки (и тут привет фонетический алфавит, Борис-Анна-пять-Федор-два-Денис-семь). Хотя... чем не идея и запоминать в такой форме, мне нравится.

          Я понимаю, что HEX-представление дает удобство вычисления масок. Но плата рабочей памятью за это кажется слишком дорогой в случае ipv6.


          1. FSA Автор
            13.11.2023 19:41
            +1

            Большинство вообще может не столкнуться с необходимостью где-то водить IPv6 адрес. Многие и без ввода IPv4 обходятся. При этом чтобы сеть IPv4 сама настроилась, нужен DHCP сервер. Если он по какой-то причине не работает или отсутствует, то мы вынуждены вводить руками IPv4 адрес устройства, IPv4 адрес маршрутизатора в качестве шлюза, маску сети, адреса DNS серверов. В IPv6 всё это предоставляет маршрутизатор с помощью анонса. Как пользователь, максимум, что вы можете сделать, выбрать адресацию для своей сети из fd00::/8. Если использовать DHCPv6, можно дать важным устройствам постоянный короткий IPv6 адрес. Например, адрес маршрутизатора может стать равным fd33::1. Т. е. команда ping будет выглядеть так: `ping fd33::1`. Тяжело запомнить?

            А вообще, нормальный маршрутизатор предоставит вам услуги DNS. И, например, дома я спокойно могу войти по IPv6 на свой «сервер умного дома» на Raspberry Pi с помощью команды ssh raxxla. Мой DNS на маршрутизаторе автоматом добавит мой домен, например, raxxla.example.org, найдёт этот адрес во внутренних записях и вернёт внутренний адрес IPv6. Я даже один раз забыл адрес этого сервера, просто потому что давно им не пользовался. Зайдя по доменному имени (его я использую постоянно) спокойно посмотрел.

            Кроме полноценного DNS есть ещё LLMNR и mDNS. Их тоже, при необходимости можно включить и настроить, и надобности в прямом указании IPv6 не будет.

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


            1. begin_end
              13.11.2023 19:41

              Эх, возможно, Вы даже не представляете сколько существует рядовых админов-эникеев, вынужденных настраивать локальные сети в диких (в плане развития) уголках ИТ. А ведь их гораздо больше профессионалов, которые разбираются в масках, днс и маршрутизации. Я бывал таким рядовым специалистом, да порой продолжаю быть.
              Для меня не проблема настроить ipv6, но это делать как-то не удобно что ли (по указанным выше причинам трудности переноса адреса в своей памяти или голосовой передачи адреса собеседнику).

              Простые эникеи, зачастую бывшие студенты на нижайше оплачиваемой работе, делают все по инструкциям и особенно не разбираются. Невольно и неосознанно тормозят подобные процессы перехода, а организациям без них не обойтись (продвинутых админов просто слишком мало).
              Под термин админ-эникей я подвожу не только сотрудника провайдера, днями обжимающего витуху и параллельно рассказывающего клиенту, как выключить и включить (кстати, в нашем провайдере нет поддержки ipv6 в принципе). Это и мелкий инди-разработчик какой-то железки, работающей с сетью, знания которого недостаточны для реализации ipv6. Это и китаец, распотрошивший старую проприетарную прошивку западной IP камеры и адаптирующей ее под свой продукт-копию (привет китайским железкам у провайдера, в которых таки есть ipv6, но 50/50; или китайским IP камерам, где его нет нигде). Много таких примеров можно отыскать в разных сферах.
              Конечно, при нужде всегда найдется человек, который разбирается в работе сети и осилит ipv6... но это просто не нужно, ибо оказывается - НЕ обязательно для нормальной деятельности, и так все работает. Ведь общеизвестно "работает - не трогай". Вот и внедряем, пока не сменится целое поколение людей (а то и 2 будет в итоге).


            1. 13werwolf13
              13.11.2023 19:41

              А вообще, нормальный маршрутизатор предоставит вам услуги DNS. И, например, дома я спокойно могу войти по IPv6 на свой «сервер умного дома» на Raspberry Pi с помощью команды ssh raxxla. Мой DNS на маршрутизаторе автоматом добавит мой домен, например, raxxla.example.org, найдёт этот адрес во внутренних записях и вернёт внутренний адрес IPv6. Я даже один раз забыл адрес этого сервера, просто потому что давно им не пользовался. Зайдя по доменному имени (его я использую постоянно) спокойно посмотрел.

              а ещё есть mdns например avahi, оно даже иногда работает..


            1. vesper-bot
              13.11.2023 19:41
              +1

              raxxla? Вау!


          1. vesper-bot
            13.11.2023 19:41

            часто идет в HEX

            Всё время читаю не как "в hex", а как "в НЁХ" с соответствующим отношением. :)

            в иной предметной области (значение цвета) 0BA5F2D7 мне проще временно помнить, как 195-424-98-3

            А это, вероятно, означает, что у вас цвет сжатый не по стандартной RGBA-системе (и кстати, не вижу в этом хексе 424 и 3, где?). Можете поделиться?


            1. begin_end
              13.11.2023 19:41
              +1

              0BA5F2D7 форматирован как ARGB,
              прямое преобразование HexToInt над BA5F2D7 → 195424983


              1. vesper-bot
                13.11.2023 19:41

                Тонко :)


  1. Assket
    13.11.2023 19:41
    +5

    Хорошая статья, для общего обозрения. Особенно отмечу, что рассказали почему NAT не фаервол. Многие начинающие админы свято верят в него, и жутко удивляются почему /me на их принтере "война и мир" печатает после банального route add 192.168.1.0/24 via 172.20.1.16. Я бы только предысторию про нехватку убрал - думаю, что если человек читает про v6 - он уже в курсе, что к чему и почему. Но совсем не рассказали про недостатки - я например никак не приму, самоназначение адресов в моем колхозе, трудности в внедрении от производителей железа - иногда кажется, что каждый хочет свой v6!


    1. FSA Автор
      13.11.2023 19:41
      +1

      Предыстория про нехватку неотъемлемая часть повествования, чтобы сразу отсечь вопросы «почему бы просто инженерам не добавить дополнительных бит в адрес». До сих пор есть те, кто думает, что можно был ничего не ломая просто добавить и больше ничего не делать. Именно так поступили разработчики, но поняли, что дополнительные биты просто некуда разместить не потеряв совместимость. А если теряется совместимость, то зачем тащить за собой ворох старых проблем?

      Я особо не заметил недостатков IPv6, кроме того, что заголовка IP вырос с минимальных 20 байт до 40. Зато он стал постоянного размера. Так что разница может быть заметна только на пакетах очень маленького объёма, если вообще будет заметна. Есть не всегда полноценная поддержка протокола в софте. Но это не проблема самого протокола, это проблема ПО конкретного железа. Чтобы осветить это в статье, нужно попробовать много разного железа. У меня этот набор ограниченный. Большая часть железа IPv6 протокол поддерживает. Я даже ради эксперимента переводил свою домашнюю сеть только на IPv6 и спокойно пользовался всем необходимым. Для Steam и торрентов пришлось поставить clatd, но это из-за того, что они напрямую работают с IPv4 адресами и не пользуются DNS. Ну и в торрентах чаще попадаются пиры только с IPv4, но и с IPv6 тоже не мало. Пока IPv4 доминирует в рунете, поэтому смысла полностью уходить на IPv6 пока нет, проще пользоваться дома дуалстэком. Но если его доля IPv4 заметно упадёт, то вполне возможно задействовать и вариант с NAT64+DNS64.


      1. begin_end
        13.11.2023 19:41

        Смотрите, а если вот порассуждать, как можно было бы (понятно, что "фарш обратно не провернуть"): мы вводим именно подверсию ipv4, выбрасываем работу с контрольной суммой, а в ее полях храним по 1 байту для входящего/исходящего адреса. Один доп. байт это конечно не 2, но увеличения всех адресов в 256 раз все равно ощутимо хватило бы человечеству на ближайшее столетие. Верно?

        Всегда проще чуть-чуть скорректировать старый протокол, старый код, чем с нуля реализовывать и внедрять новое, что в итоге заняло 20+ лет, а не 1 цикл обновления hardware. А инженерной утопии, когда каждое устройство будет иметь свой IP (одно из обоснований адресации ipv6), не наступит, но не потому что адресов не хватит, а потому что уже начинают понимать, что это не правильно и не безопасно. И не все пользователи - инженеры, а точнее почти все НЕ инженеры.


        1. czz
          13.11.2023 19:41
          +4

          А потом внезапно оказывается, что во всем выпущенном в мире софте и телекоммуникационном оборудовании адрес хранится в памяти в виде 32-битного числа.

          И чтобы все это переписать/переделать — тоже надо 20 лет :)


        1. FSA Автор
          13.11.2023 19:41
          +3

          Даже это мелкое изменение требует изменения ПО на ВСЁМ парке устройств. Ваше изменение делает протокол не совместимым с IPv4. К тому же вы не так много добавили в адрес и с нехваткой адресов можно вновь столкнуться очень быстро. Опять таки, адреса раздаются иерархично. Допустим мы решили проблему с обновлением ПО, чтобы оно стало поддерживать наш новый протокол (кстати, для IPv6 до большинства относительно современных устройств она уже решена). Этого одного байт недостаточно, чтобы распределить блоки между LIR, RIR и прочими. Опять придётся нашинковывать адресацию, как сейчас это обстоит в IPv4. Проходим весть тот же процесс с обновлением ПО, но толком так и не решаем проблему с адресным пространством, все косяки протокола тянем за собой, ещё и имеем новую адресацию, которую тоже как-то надо совмещать со старой на время перехода, да и все проблемы IPv4 тянем за собой... Великолепный план, отличный, как Швейцарские часы!


      1. Assket
        13.11.2023 19:41
        +2

        Я не зря упомянул железо. Да, это не проблема протокола, и как выясняется не проблема вендоров - они считают, что нет проблем. Каждый делает по своему, Android не знает ничего про DHCP6, D-link мне сказал - Multiple inteface no support DHCPv6 mode, hp 521 не умеет статику, итд итп. Зачем надо было сделать такие огромные префиксы и фактически запретить их делить меньше чем на /64, зачем мне в офисе триллион адресов на 10 компов, что бы я бегал по по компам вместо arp -a? Да, может это провайдер жмот, но иной раз у него PTR молебнами клянчишь, про RFC он с тобой говорить не будет. В итоге это становиться проблемой конечных пользователей. Точнее админов на местах, для которых попытка даже попробовать, превращается в танцы с бубном на минном поле.

        Излишняя приватность грозит беспределом в своей сетке, и не возможностью найти хост в сети. Да, дома это не важно, когда устройств и с 10 не наберется, а в офисе, когда компов ~500? Никто на ff02:1 никто не отвечает. DUID генерируется на машину, и потом прется с ним во все сетевухи.

        Нехватку адресов, кажется решили облаками, и внезапно это оказалось даже удобнее конечному пользователю. Теперь не надо утюгу прописывать адрес, настраивать доступ и файервол - проще завести аккаунт сяоми\хиквижен etc...

        Кто в вменяемом состоянии будет тратить на это время, деньги, бороться с ветряными мельницами в виде гугла? Я не против V6, но практика показывает что будущего у него нет. Может у V6.1 какого-то, да. Но как я вижу в 2012 году перспектив было больше чем 2023, там еще была надежда. Получилось как с коммунизмом, вроде идея хорошая, но не получилось, не фортануло.


  1. Sap_ru
    13.11.2023 19:41
    +5

    Угу, только этот IPv6 уже начал катиться в гуано.
    Хостеры и провайдеры массово выдают абонентам подсети /64 и даже меньше, с которыми в силу криворукости программистов (в частности хочется передать очередной пламенный привет MS) и уже устоявшихся обычаев просто непонятно что делать.
    Рассказывали, что можно будет отлично замапить на одну выданную подсеть все устройства без всяких NAT, а по факту?
    Мало ли что там чего рекомендует, и что там в RFC написано: на тебе, дорогой друг, хорошо если /64 и успехов упихать туда восемь домашних устройств и ещё какую-нибудь шляпу за VPN. В результате опять NAT и шлюзы с кучей приседаний. Причём, приседаний значительно более извращённых чем с IPv4.


  1. KyJIep-79
    13.11.2023 19:41

    Как по ipv6 для устройства в домашней сети реализовать WoL из интернета? Если можно, с подробностями.


    1. YaKrabik
      13.11.2023 19:41
      +3

      wol работает на канальном уровне. к ipv6 он не имеет никакого отношения.

      как реализовать? отправлять пакет с маршрутизатора или устройства в локальной сети, которое уже доступно из интернета.


      1. KyJIep-79
        13.11.2023 19:41

        Как раз это устройство и должно быть доступно из интернета, иногда, но для этого его сначала надо разбудить. По ipv4 это вообще не проблема, так и пользуюсь. МГТС даёт либо белый ipv4, либо ipv6, одновременно и то и другое у них почему-то невозможно. За белый ipv4 плачУ, само собой. Если бы можно было реализовать WoL из интернета, имея только ipv6, без костылей типа промежуточных устройств, с которых можно разбудить целевое устройство, а напрямую, как с ipv4, просто отсылая пакеты WoL на сетевуху целевого устройства, пусть и через проброс портов, отказался бы от белого ipv4.


  1. Spyman
    13.11.2023 19:41

    Я тут немного не в тему, но кажется прошаренные админы читают эту статью - подскажите нубу

    Если у меня сеть построенная так: маршрутизатор -> коммутатор -> 2 устройства, и я гоняю траффик между этими двумя устройствами, будет ли он идти через 1 -> коммутатор -> 2 или 1 -> коммутатор -> маршрутизатор -> коммутатор -> 2?

    Dhcp сервер понятное дело на маршрутизаторе.

    А статья хороша.


    1. 13werwolf13
      13.11.2023 19:41
      +1

      если у вас плоская сеть с одним общим адресным пространством то первый вариант, а dhcp сервер тут вообще не при делах


      1. FSA Автор
        13.11.2023 19:41

        В IPv6, кстати, даже устройства в такой схеме могут общаться через маршрутизатор. А могут общаться напрямую, если у них адреса из публичные из разных сетей. Тоже тема для статьи о маршрутизации в сетях IPv6. Есть интересные вещи, которых в IPv4 не было.

        Если протокол обнаружения соседей NDP работает в вашей сети нормально, то узлы будут общаться напрямую. Если сломаете или ограничите, то они могут воспользоваться услугами маршрутизатора, если, конечно, смогут.
        P.S. Я упоминал, что в заметке речь только об unicast адресах.


        1. 13werwolf13
          13.11.2023 19:41
          +1

          Да, тут вы правы. Я говорил лишь про идеальные условия. Вообщетзамечал на разных роутерах домашнего уровня разное "странное" поведение, влоть до того что на каком-то китайском чуде по умолчанию было запрещено всё общение устройств в локальной сети между собой, не проходил даже icmp. Благо тогда это решилось одной галочкой в настройках (одной из целых 4ёх, настроекат там было весьма куцо).


    1. dTi
      13.11.2023 19:41

      В коммутаторе есть таблица MAC. Роутер не будет участвовать. Просто отключите его и убедитесь. Когда время лизинга DHCP закончится - вот тогда могут быть проблемы.


  1. av-86
    13.11.2023 19:41
    -1

    АйпиВеШесть они ставят. А он нам на... не нужОн АйпиВеШесть ваш.


  1. vasilijmooduckovic
    13.11.2023 19:41

    tldr - делаем по первому абзацу и всех дел)))