Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 1)

Могут ли роутеры и компьютеры одновременно работать с IP и IPv6

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

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

При анализе сети, допустим, с помощью Wireshark или tcpdump можно пропустить половину или даже больше трафика, если забыть про IPv6! То есть в качестве фильтра отображения пакетов в Wireshark вы введёте (обычный фильтр для показа трафика IP протокола):

ip

То вы увидите примерно такое:

Но если ввести такой фильтр

ipv6

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

При анализе сети, при настройке фильтров отображения по IP, при выполнении атак (например, ARP и DNS спуфинг в локальной сети), нужно помнить про IPv6!

Ещё раз: IP и IPv6 это две параллельные сети, которые не особо связаны друг с другом (хотя одно и то же оборудование может поддерживать работу с обоими протоколами). В результате при настройке сети, например, файервола, нужно отдельно сделать настройки для протокола IP, а затем делать такую же настройку IPv6. Поскольку это разные сети, есть шанс, что системный администратор настроил их по-разному, что даёт лазейки для выполнения атак или обхода ограничений с использованием IPv6. Реальный пример я описывал здесь (краткий пересказ: у отечественного VPS хостера ВНЕЗАПНО для клиентов сломался доступ к DNS серверам Google. При этом каждому VPS серверу прилагается 3 бесплатных IPv6 адреса. В дополнении к существующим записям DNS серверов, я добавил ещё парочку IPv6 адресов DNS Google в настройки и всё заработало! Видимо, при блокировке доступа, произошло именно это — администратор сети забыл (не посчитал нужным) позаботиться об IPv6 сети…)

IPv6 адреса могут пригодиться при исследовании локальных сетей Интернет-провайдеров, стоит попробовать использовать IPv6 для обхода Captive Portal (перехватывающих порталов) и других ограничений сети, про IPv6 нужно помнить при анализе трафика на своём компьютере и в локальных сетях, либо наоборот для увеличения скрытности своего пребывания (в надежде, что в настройках логирования трафика не упомянут IPv6 или что геолокация по IPv6 сейчас в зачаточном состоянии (по крайней мере, в публичных базах данных)).

Кстати про блокировки, насколько я понимаю (поправьте, если ошибаюсь), в реестре РКН ведь IPv6 отсутствуют вовсе?..

Эта статья поможет вам сделать первые шаги по использованию IPv6 адресов с популярными программами.

Структура IPv6 адреса

Ниже приведены примеры правильных IPv6 адресов:

::1
2a02:6b8:a::a
2a02:f680:1:1100::3d60
2604:a880:800:c1::2ae:d001
2001:db8:11a3:9d7:1f34:8a2e:7a0:765d

Они, мягко говоря, разные. Давайте разберёмся, как такое возможно.

Адреса IPv6 в полной форме отображаются как восемь четырёхзначных шестнадцатеричных чисел (то есть восемь групп по четыре символа), разделённых двоеточием. Пример адреса:

2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d

Шестнадцатеричные числа записываются с помощью цифр от 0 до 9 и с помощью букв от a до f.

Полная запись может быть сокращена используя несколько методов нотации, к примеру, адрес 2001:0db8:0000:0000:0000:8a2e:0370:7334 равнозначен адресу 2001:db8::8a2e:370:7334.

Кстати, ведь IP адреса тоже поддерживают сокращённую запись, к примеру, следующая команда прекрасно будет работать:

ping 127.1

В результате будет выполнен пинг адреса 127.0.0.1, который в сокращённом виде представляет собой 127.1.

Для IP адресов группы цифр называют октетами (что на каком-то языке означает «восемь») поскольку каждая цифра в адресе содержит восемь бит информации, всего в IP четыре октета, то есть для адреса используется 32 бита. Кстати, именно поэтому число в каждом октете ограничено 255 — это соответствует количеству информации, которое могут хранить 8 бит, это 28, то есть числа от 0 до 255.

У IPv6 адресов в каждом сегменте 16 бит информации, на английском языке эти сегменты называют hextet или hexadectet. Всего 8 сегментов по 16 бит информации, получается, что для записи IPv6 адресов используется 8*16=128 бит.

Как уже было сказано выше, в IPv6 адресах числа в группах записываются в виде шестнадцатеричных чисел, а не в виде десятеричных, как в IP. Кстати, если запись была бы в виде десятичных чисел, то в каждом сегменте были бы числа от 0 до 65535 (это 216). Что касается шестнадцатеричных чисел, то для записи 16 бит информации нужно число длиной до четырёх символов, поэтому получается, то размер раздела составляет 4 символа, но может быть меньше, поскольку нули в начале числа писать необязательно. То есть если там должно быть число 00a1, то можно записать просто a1 — это первый способ сокращения записи IPv6 адресов.

Если в группе число равно 0 (то есть четыре нуля), то записывается один ноль.

Если групп с нулями несколько подряд, то независимо от количества нулей вся эта группа записывается как идущие два подряд двоеточия (::). Последнее сокращение можно использовать в одном IPv6 адресе только один раз, даже если имеется несколько групп с нулями. Если групп с нулями несколько, то заменяется только самая продолжительная из них. Если имеется две группы с нулями одинаковой длины, то заменяется та, которая идёт первой, то есть более левая.

Пример использования этих правил:

Начальный адрес: 2001:0db8:0000:0000:0000:ff00:0042:8329

После удаления всех начальных нулей в каждой группе: 2001:db8:0:0:0:ff00:42:8329

После пропуска последовательных сегментов с нулями: 2001:db8::ff00:42:8329

Петлевой адрес 0000:0000:0000:0000:0000:0000:0000:0001 используя правила сокращения можно сократить до ::1

Вернёмся к адресам из примеров выше:

::1

Как мы уже выяснили, это петлевой адрес 0000:0000:0000:0000:0000:0000:0000:0001.

2a02:6b8:a::a

Здесь пропущено несколько секций с последовательными нулями. Сколько именно? Это можно узнать исходя из следующего правила: всего должно быть 8 секций, а имеется только 4, значит, пропущено 4 секции, то есть в полном виде число должно выглядеть так:

2a02:6b8:a:0:0:0:0:a

Или даже так:

2a02:06b8:000a:0000:0000:0000:0000:000a

Следующий пример:

2a02:f680:1:1100::3d60

В этом адресе 5 сегментов, а должно быть 8, значит пропущено 3, запись адреса в полном виде:

2a02:f680:1:1100:0:0:0:3d60

Или вместе со всеми нулями:

2a02:f680:0001:1100:0000:0000:0000:3d60

2604:a880:800:c1::2ae:d001

В этом адресе 6 сегментов, а должно быть 8, следовательно, полная запись этого адреса:

2604:a880:800:c1:0:0:2ae:d001

2001:db8:11a3:9d7:1f34:8a2e:7a0:765d

В этом адресе 8 сегментов и нет двух двоеточий подряд — следовательно, это и есть полная запись адреса, разве что, опущены начальные нули:

2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d

Надеюсь, эти простые упражнения помогли вам «наметать глаз» и научиться узнавать IPv6 адреса.

Как узнать, у меня IPv6 адрес или нет? Как узнать свой IPv6 адрес

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

С IPv6 адресами в этом смысле проще — их настолько много, что потребность в NAT отпадает — можно каждому клиенту раздать по персональному IPv6 адресу.

Но тут возникает другое затруднение. Давайте посмотрим вместе. В Windows для вывода своих IP и IPv6 адресов в командной строке выполните команду:

ipconfig

Пример вывода:

Адаптер Ethernet Ethernet:

   DNS-суффикс подключения . . . . . : home
   IPv6-адрес. . . . . . . . . . . . : 2403:6200:8862:2cb4::2
   IPv6-адрес. . . . . . . . . . . . : 2403:6200:8862:2cb4:bc07:bcb4:b7d0:24eb
   IPv6-адрес. . . . . . . . . . . . : fd14:9d09:d004:7e00:bc07:bcb4:b7d0:24eb
   Временный IPv6-адрес. . . . . . . : 2403:6200:8862:2cb4:7462:9648:7bcd:20a8
   Временный IPv6-адрес. . . . . . . : fd14:9d09:d004:7e00:7462:9648:7bcd:20a8
   Локальный IPv6-адрес канала . . . : fe80::bc07:bcb4:b7d0:24eb%16
   IPv4-адрес. . . . . . . . . . . . : 192.168.1.20
   Маска подсети . . . . . . . . . . : 255.255.255.0
   Основной шлюз. . . . . . . . . : fe80::1%16
                                       192.168.1.1

В Linux для просмотра своих IP и IPv6 адресов поможет команда:

ip a


Здесь IPv6 адреса вместе с масками подсети перечислены в строках:

    inet6 2403:6200:8862:2cb4::5/128 scope global dynamic noprefixroute 
       valid_lft 6125sec preferred_lft 2525sec
    inet6 fd14:9d09:d004:7e00:9965:7843:6899:ec5f/64 scope global dynamic noprefixroute 
       valid_lft 6948sec preferred_lft 3348sec
    inet6 2403:6200:8862:2cb4:3541:b9e5:61ac:69d3/64 scope global dynamic noprefixroute 
       valid_lft 6948sec preferred_lft 3348sec
    inet6 fe80::74a0:94fb:fc04:a1d8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Мы рассмотрим зарезервированные диапазоны IPv6 адресов чуть позже, забегая вперёд скажу, что глобальные адреса в настоящее время могут начинаться только на 2 или на 3 (другие пока просто не раздаются). Но даже при таком критерии, в примерах выше в каждой операционной системе есть по два адреса, которые начинаются с двоек — какой именно из них ваш внешний IPv6?

Самый простой вариант — вновь проверить с помощью внешнего сервиса, но нужно понимать, что если сайт, на который вы заходите, чтобы узнать свой IP адрес, не настроен на работу с IPv6, то он покажет только ваш IP, но никак не сможет показать ваш IPv6. Сервис на SuIP.biz имеет поддержку IPv6 и покажет ваш IPv6 адрес, если ваш Интернет-провайдер и ваше оборудование (компьютер и роутер) поддерживают IPv6.

Чтобы узнать, есть ли у вас поддержка и свой IPv6 адрес, перейдите на страницу: https://suip.biz/ru/?act=myip

Если у вас есть IPv6, то он будет показан. Если поддержка IPv6 отсутствует, то будет показан только ваш IP.

Зарезервированные IPv6 адреса

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

У IP также есть зарезервированные диапазоны адресов: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8, 100.64.0.0/10 и ещё несколько, полный список найдёте здесь.

Специальные диапазоны IPv6 адресов также имеются. Рассмотрим таблицу «Специальные блоки адресов IPv6»:

Блок адресов (CIDR) Первый адрес Последний адрес Количество адресов Использование Цель
::/0 :: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 2128 Маршрутизация Маршрут по умолчанию. Смотрите 0.0.0.0 в IPv4.
::/128 ::   1 Программное обеспечение Неопределённый адрес.
::1/128 ::1   1 Хост Петлевой (Loopback) адрес на локальный хост. Смотрите 127.0.0.0/8 в IPv4
::ffff:0:0/96 ::ffff:0.0.0.0 ::ffff:255.255.255.255 2128−96 = 232 = 4294967296 Программное обеспечение IPv4 mapped addresses.встроенный IPv4. Нижние 32 бита это адрес IPv4. Также называется IPv4-совместимым IPv6 адресом. Устарел и больше не используется.
::ffff:0:0:0/96 ::ffff:0:0.0.0.0 ::ffff:0:255.255.255.255 232 Программное обеспечение IPv4 translated addresses.Адрес IPv4, отображённый на IPv6. Нижние 32 бита — это адрес IPv4 для хостов, не поддерживающих IPv6.
64:ff9b::/96 64:ff9b::0.0.0.0 64:ff9b::255.255.255.255 232 Глобальный Интернет IPv4/IPv6 translation. Зарезервирован для доступа из подсети IPv6 к публичной сети IPv4 через механизм трансляции NAT64[13][14]
100::/64 100:: 100::ffff:ffff:ffff:ffff 264 Маршрутизация Discard prefix.
2001::/32 2001:: 2001::ffff:ffff:ffff:ffff:ffff:ffff 296 Глобальный Интернет Зарезервирован для туннелей Teredo в RFC 4380
2001:20::/28 2001:20:: 2001:2f:ffff:ffff:ffff:ffff:ffff:ffff 2100 Программное обеспечение ORCHIDv2.
2001:db8::/32 2001:db8:: 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff 296 Документация Адреса для использования в документации и примерах исходного кода.
2002::/16 2002:: 2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff 2112 Глобальный Интернет Зарезервирован для туннелей 6to4 в RFC 3056 (устарело).
fec0:/10 feff:: fec0:ffff:ffff:ffff:ffff:ffff:ffff:ffff 2118 Site-local (Частные сети)) Помечен как устаревший в RFC 3879 (Аналог внутренних сетей 10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16)
fc00::/7 fc00:: fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 2121 Частные сети Уникальные локальные адреса. Диапазон пришёл на смену Site-Local
fe80::/10 fe80:: febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff 2118 Link Link-local address. Аналог 169.254.0.0/16 в IPv4
ff00::/8 ff00:: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 2120 Глобальный Интернет Многоадресные адреса

Как видно из таблицы, адреса, которые начинаются на нули или на f — являются локальными, либо предназначены для конкретных целей.

Глобальные IPv6

Соответствуют публичным IPv4-адресам. Могут находиться в любом не занятом диапазоне. В настоящее время региональные интернет-регистраторы распределяют блок адресов 2000::/3 (с 2000:: по 3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF).

Это означает, что глобальными сейчас являются только IPv6 адреса, которые начинаются на «2» или на «3».

Как видно на скриншотах выше, сетевым интерфейсам присвоено более чем один IPv6 адрес. Для IPv6 это является нормой, хотя, к примеру, у меня на VPS сервере у сетевого интерфейса только один IPv6 адрес и этого хватает для подключения и функционирования сайта.

У одного сетевого интерфейса может быть много IPv6 адресов, по умолчанию, у меня в Linux это максимум 16:

cat /proc/sys/net/ipv6/conf/default/max_addresses
16

Зачем так много IPv6 одному интерфейсу? Каждый интерфейс IPv6 имеет локальный IP-адрес. Если интерфейс также может обмениваться данными с более крупной сетью (например, через Интернет), он также имеет глобальный адрес. Это как минимум два адреса. И если хост находится за многосетевым подключением к Интернету, он, вероятно, имеет ещё больше адресов.

В общем, IPv6 у одного компьютера может быть много — и это норма. Глобальными являются адреса, которые начинаются на двойку или на тройку.

Как узнать IPv6 адрес сайта

IP адрес сайта храниться в A записях, а IPv6 адрес сайта хранятся в записях AAAA (смотрите Введение в DNS терминологию, компоненты и концепции).

В Windows IPv6 адрес сайта можно узнать командой nslookup:

nslookup АДРЕС-САЙТА

Например:

nslookup yandex.ru

Вывод:

╤хЁтхЁ:  UnKnown
Address:  192.168.1.1

Не заслуживающий доверия ответ:
╚ь :     yandex.ru
Addresses:  2a02:6b8:a::a
          77.88.55.60
          77.88.55.55
          5.255.255.55
          5.255.255.60

Если у сайта есть IPv6 адрес, то он будет выведен вместе с IP адресами.

В Linux также можно использовать команду nslookup:

nslookup yandex.ru

Можно использовать команду host:

host yandex.ru

Команда dig также умеет показывать IPv6 адреса, но по умолчанию выводит данные только для A записи, поэтому нужно указать вид записи явно:

dig +short yandex.ru AAAA

Либо настроить вывод всех DNS записей данного домена:

dig yandex.ru ANY

Если вам не хочется возиться с утилитами командной строки, то можете воспользоваться онлайн сервисов, который покажет вам все IP и IPv6 адреса любого сайта: https://suip.biz/ru/?act=dig

Теперь, когда мы научились смотреть и узнавать IPv6 адреса, давайте научимся использовать их в различных приложениях и утилитах.

Продолжение «Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 2)».

Рекомендуется Вам:

Добавить комментарий

Ваш e-mail не будет опубликован.