Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 1)
Оглавление: Компьютерные сети
1. Как работают компьютерные сети
3.1 Могут ли роутеры и компьютеры одновременно работать с IP и IPv6
3.3 Как узнать, у меня IPv6 адрес или нет? Как узнать свой IPv6 адрес
3.4 Зарезервированные IPv6 адреса
3.6 Как узнать IPv6 адрес сайта
3.7 Как открыть IPv6 в веб-браузере
3.10 Как узнать, к какой организации принадлежит IPv6 адрес. WHOIS адресов IPv6
3.11 Как в IPv6 посмотреть ARP таблицу. Показ соседей в IPv6
3.12 Как выполнить трассировку IPv6
3.13 Как настроить свою систему на работу с DNS по IPv6
3.14 Как посчитать сколько IPv6 адресов в подсети
3.15 Как сканировать IPv6 и диапазоны IPv6
3.16 В чём разница сканирования IPv6 и IPv4? Нужно ли дополнительно сканировать порты на IPv6?
3.17 Показ IPv6 маршрутов в локальной системе
3.18 Как посмотреть настройки IPv6
3.24 Как настроить SSH для работы только с IPv6
3.25 Для чего нужно ограничивать прослушиваемые адреса только протоколом IPv6?
3.26 Как подключиться к FTP на IPv6 в FileZilla
3.28 Атака человек-посередине на IPv6
3.29 Как получить доступ к IPv6 сети, если мой Интернет-провайдер не поддерживает этот протокол
Онлайн сервисы с поддержкой IPv6
5. Транспортные протоколы TCP и UDP
6. Канальный уровень передачи данных
7. Маршрутизация данных
8. Служебный протокол ICMP
10. Настройка сетевых подключений в командной строке Linux
11. Определение проблем работы сети
12. Туннелизация
Могут ли роутеры и компьютеры одновременно работать с 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 |
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 адреса
Сервис «Есть ли у меня IPv6» поможет вам определить, можете ли вы открывать сайты используя IPv6 или вам доступна только старая версия.
Адрес страницы для проверки: https://suip.biz/ru/?act=ipv6-enabled
Продолжение «Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 2)».
Связанные статьи:
- Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 2) (100%)
- IP адрес (86.5%)
- Контроль доступа к сайту (блокировка по IP, User-Agent) (76%)
- Как проверить открытые порты на своём компьютере. Что означают 0.0.0.0, :*, [::], 127.0.0.1. Как понять вывод NETSTAT (76%)
- Транспортные протоколы TCP и UDP (74.1%)
- Вышла Kali Linux 2022.3: добавлена тестовая лаборатория и новые инструменты (RANDOM - 50%)
Как узнать какое устройство в локальной сети транслирует свой IPv6 адрес в локалку?