Отличия протоколов ipv4 и ipv6
В четвертой версии IP-протокола для адресации используется 32 бита, которые принято записывать блоками по 8 бит (диапазон от 0.0.0.0 до 255.255.255.255). Из-за нехватки адресов для выхода в интернет из локальной сети используется один внешний IP-адрес.
В шестой версии IP-протокола адрес состоит из 128 бит. При записи он разбивается на 8 шестнадцатибитных блоков, которые разделяются между собой двоеточием, например, 2dеc:0546:029he:cc76:02b7:cbhf:fa8c:0. В данной версии протокола используется префикс, который записывается через знак слеш «/» после IPv6 адреса. Например, запись «/64» означает что первые 64 бита идентифицируют сеть, а оставшиеся – конкретное устройство в этой сети.
Таким образом, можно задать адрес для 3,4*1038 устройств, этого должно с избытком хватить на достаточно долгое время.
Для упрощения записи адреса применяется режим, в котором несколько нулевых блоков, идущих подряд, можно заменить на два двоеточия. Так, адрес FHEA:0:0:0:0:CB28:1C12:42C4 можно записать так: FHEA::CB28:1C12:42C4.
Кроме этого, в каждой последовательности из четырех шестнадцатеричных цифр можно удалить ведущие (которые идут первыми) нули. Например, 0СB0 заменяем на СB0, а 00ВС на ВС. Если все цифры равны нулю, то его меняют на один нуль.
Как узнать, к какой организации принадлежит IPv6 адрес. WHOIS адресов IPv6
Программа whois поддерживает работу с IPv6 адресом и вы можете использовать её для получения такой информации как:
- организация, к которой приписан IPv6
- диапазон, к которому относится IPv6 адрес
- почтовый адрес организации, которой принадлежит IPv6
- Autonomous system (Автономную Систему) к которой относится IPv6
- контактные данные (телефон и email) владельца IPv6 адреса
Использование whois для получения информации об IPv6 очень простое — достаточно указать адрес (помещение его к квадратные скобки не требуется):
whois 2604:a880:800:c1::2ae:d001
Онлайн сервис whois с поддержкой IPv6: https://suip.biz/ru/?act=whois
Формат адреса
struct sockaddr_in6 { sa_family_t sin6_family; /* AF_INET6 */ in_port_t sin6_port; /* номер порта */ uint32_t sin6_flowinfo; /* информация о потоке IPv6 */ struct in6_addr sin6_addr; /* адрес IPv6 */ uint32_t sin6_scope_id; /* ID области (новое в 2.4) */ }; struct in6_addr { unsigned char s6_addr; /* адрес IPv6 */ };
Значение sin6_family всегда устанавливается в AF_INET6; в sin6_port
указывается порт протокола (смотрите sin_port в ip(7)); в
sin6_flowinfo указывается идентификатор потока IPv6; в sin6_addr
указывается 128-битный адрес IPv6. Значением sin6_scope_id является
идентификатор, зависящий от области адреса. Это новое поле, появившееся в
версии Linux 2.4. Linux поддерживает его только для адресов локальной связи
(link local); в этом случае sin6_scope_id содержит индекс интерфейса
(смотрите netdevice(7)).
IPv6 поддерживает несколько типов адресов: однозначные (unicast) — для
адресации одного узла, многоадресные (multicast) — для адресации группы
узлов, anycast — для адресации ближайшего члена группы узлов (не реализовано
в Linux), IPv4-on-IPv6 — для адресации узла IPv4, и несколько других
зарезервированных типов адресов.
Адрес IPv6 представляет собой группу из 8 4-разрядных шестнадцатеричных
чисел, разделённых двоеточием «:». Два двоеточия «::» обозначают строку 0
бит. Специальные адреса: ::1 (для устройства обратной петли) и
FFFF::<адрес IPv4> — для IPv4-преобразованного-в-IPv6.
RDNSS в RA
Описывается вся эта примудрость в RFC 6106. По сути — у нас есть возможность указать адрес рекурсивного DNS-сервера (то есть «обычного ресолвера») в анонсе, распространяемом маршрутизатором.
По большому счёту это всё, что мы хотим от DHCP, так что DHCP там тут не нужен. Компьютеры сами делают себе адреса непротиворечивым образом (то есть для исключения коллизий), знают адреса DNS-серверов. Интернетом можно пользоваться.
Для этого мы дописываем в конфиг radvd соответствующую опцию:
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 { }; (полный конфиг — см. в конце статьи).
Пробуем подключиться снова — и, ура, всё работает.
ping6 google.com PING google.com(lb-in-x66.1e100.net) 56 data bytes 64 bytes from lb-in-x66.1e100.net: icmp_seq=1 ttl=54 time=25.3 ms ^C — google.com ping statistics — 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 25.312/25.312/25.312/0.000 ms
google.com выбран был не случайно. Сервисы гугля (в немалой степени youtube) — это едва ли не основной источник IPv6 трафика в настоящий момент. Второй источник — торренты, где можно увидеть аж 5-10% пиров в IPv6 варианте.
На этом рассказ можно было закончить, если бы не ещё одна важная деталь — что за третий IPv6-адрес на интерфейсе ноутбука? И что это за temporary dynamic?
Могут ли роутеры и компьютеры одновременно работать с 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 адресов с популярными программами.
Механизм Proxy ARP
Суть механизма Proxy ARP, детально обозначенного в RFC 1027, проста – дать возможность узлу, который в силу каких-то причин (например, у него не указан шлюз по умолчанию) не может понять, куда маршрутизировать трафик для других сетей, всё же сделать это. Притом сделать просто – используя то, что в сегменте с этим узлом присутствует добрый узел, на котором включен Proxy ARP, и который, увидев что узел пытается через ARP-запрос найти получателя трафика, “прикинется” этим получателем и ответит на запрос.
Т.е. вот есть маршрутизатор, на котором включен Proxy ARP. Он получает ARP-запрос на разрешение адреса узла, который находится в другом сегменте относительно спрашивающего и помогает – просто отвечает ему от имени этого узла. Соответственно, этот роутер и будет передавать трафик между данными узлами, а отправитель будет думать, что отправляет трафик напрямую.
Данный механизм включен “по умолчанию” на большинстве систем и нуждается в отключении – т.е. описанная ситуация, в общем-то, по производственной необходимости возникает довольно-таки редко.
Как включить Proxy ARP на оборудовании Cisco
Зайдите на нужный интерфейс и введите там команду:
(config-if)#ip proxy-arp
Выключить глобально – (config)#ip arp proxy disable.
Как выполнить атаку отравления ARP с помощью Kali Linux
Первое, что мы должны сделать в списке приложений, это найти раздел « 9. Обнюхивание и спуфинг «, Поскольку именно там мы найдем необходимые инструменты для проведения компьютерной атаки. Далее мы откроем « Ettercap-графический »И мы увидим окно, подобное следующему.
Теперь нам нужно будет ввести пароль суперпользователя, то есть пароль «root», по умолчанию пароль «kali».
Следующим шагом является выбор основных параметров Ettercap, мы можем оставить его с параметрами по умолчанию, то есть начать сниффинг в начале, мы выберем ту сетевую карту, которую хотим, по умолчанию это eth0. Остальные параметры оставляем без изменений и нажимаем кнопку в правом верхнем углу, чтобы принять изменения.
После того, как мы запустили программу, нам нужно будет нажать на «увеличительное стекло», которое вы видите в верхнем левом углу. Ettercap будет сканировать всю локальную сеть, к которой мы подключены, в поисках различных подключенных устройств. , а значит, некоторая жертва нападения.
Здесь мы должны получить все хосты или устройства, подключенные к нашей сети. Однако, если они не все появляются, мы можем провести полное сканирование сети, просто нажав еще раз на «увеличительное стекло», которое есть в верхней левой части. Через несколько секунд список из предыдущего должен быть обновлен, показывая все устройства с их соответствующими IP-адресами и MAC-адресами, подключенными к нашей сети.
В случае, если вы хотите провести атаку, направленную против одного хоста, например, подменить идентификацию шлюза для отслеживания соединений жертвы, которая появляется в списке устройств, перед началом атаки мы должны установить обе цели.
Для этого под списком хостов мы можем увидеть три кнопки, хотя обратим внимание на последние две:
- Целевая 1 — Мы выбираем IP-адрес устройства для мониторинга, в данном случае устройства-жертвы, и нажимаем на эту кнопку.
- Целевая 2 — Мы нажимаем на IP-адрес, который хотим выдать, в данном случае — на шлюз.
Все готово. Теперь осталось выбрать » MITM «Вверху меню и в нем выберите» ARP Отравление «.
Появится небольшое окно конфигурации, в котором мы должны обязательно отметить « Отслеживание удаленных подключений «. Мы также должны оставить опцию «только одноразовое ядро» неотмеченной, эта опция не будет выполнять отравление ARP в обоих направлениях, а только в одном, поэтому у нас нет двунаправленной связи
Очень важно не ставить галочку напротив опции «Только отравлять в одну сторону», то есть как по умолчанию
Нажимаем «Ок» и атака состоится. Теперь мы можем контролировать хост, который мы установили как » Целевая 1 ».
Следующее, что мы должны сделать, это, например, запустить Wireshark, чтобы захватить все сетевые пакеты и проанализировать их в поисках интересной информации, или прибегнуть к различным плагинам, которые предлагает нам Ettercap, таким как, например, удаленный веб-браузер, где он загрузит нам все веб-сайты, которые посещает цель. Например, мы сделали типичный пинг в Google, атакующая команда все правильно зафиксировала.
Эти методы предназначены только для частного использования в нашей собственной сети или в сети, в которой у нас есть разрешение, логически эти методы могут применяться в незаконных целях. Если мы используем эти методы для наблюдения за системами других людей, мы совершаем преступление.
Как только мы уже узнали, как легко и быстро провести эту атаку с Kali Linux, давайте посмотрим, как мы можем смягчить эту атаку.
IPv6
Протокол IPv6 был представлен в декабре 1995 года. Он был разработан Инженерным советом интернета (IETF) и является самой последней версией интернет-протокола. IPv6 более продвинутый, чем IPv4, и предоставляет лучшую функциональность.
Как было обозначено выше, каждому устройству в интернете назначается определенный уникальный IP-адрес. Новый протокол может предоставить практически бесконечное количество адресов для устройств и заменяет прошлую версию для обслуживания растущего числа трафика по всему миру и решения проблемы нехватки IP-адресов.
Количество адресов в IPv6 составляет 5 x 10 ^ 28 (около 79 228 162 514 264 337 593 543 950 336 октиллионов). Это означает, что протокол обеспечит возможность использования более 300 млн IP-адресов на каждого жителя Земли.
В отличие от IPv4, типичный адрес IPv6 состоит из 128 бит. Он состоит из восьми групп, каждая из которых включает четыре шестнадцатеричных цифр, разделенных «:». Вот пример: 3005: 0db6: 82a5: 0000: 0000: 7a1e: 1460: 5334.
В 2012 году доля IPv6 в интернет-трафике составляла около 5 %. На 2020 год, согласно данным Google, эта доля составляет около 30 %.
Что ещё может быть сделано
Кроме спуффинга, есть ещё большой диапазон действий, которые могут быть
совершены при помощи манипуляций с ARP-протоколом. DoS (Denial Of Service
— отказ в обслуживании — прим. переводчика) — наиболее очевидное
применение. Наводняя жертву неправильными hw-адресами, можно сделать её
полностью «немой». Возможно даже полностью предотвратить связь этой машины
с любой (или определённой) машиной сети (и размер ARP-кэша обычно
достаточен для заполнения ARP-информацией всех машин LAN). Также очевидной
целью атаки могут быть маршрутизаторы. Удар по ARP-кэшу в этом случае
также должен быть двухсторонним: обе системы — жертва и машина, с которой
Вы хотите отключить связь данной машины, должны быть зафлужены ложными
пакетами. В простейшем случае в пакете должен быть установлен
несуществующий адрес. Но это не очень эффективно, поскольку машина быстро
поймёт, что она говорит с несуществующей машиной и пошлёт обратный
ARP-запрос. Конечно, послав со своей стороны следующий ARP-ответ, вы опять
«обнулите» результат, но необходимо это делать достаточно часто. Более
эффективный путь — наводнить жертву пакетами с hw-адресами машины, которая
«жива» и работает в сети. Опять же, это зависит от определённой ситуации,
но очень часто случается, что жертва посылает обратно пакеты различных
типов, которые достигают неверного места назначения — тогда система,
принимающая пакеты, будет генерировать ICMP-пакеты типа 3 «ICMP Xxxx
Unreachable» для машины-жертвы, таким образом эмулируя соединения
несколько неправильным способом. Подобного рода псевдосоединения могут
легко отсрочить время истечения ARP-кэша. В Linux, например,
псевдосоединения увеличивают время истечения срока кэша (то есть время,
когда будет послан пакет на обновление кэш-таблицы) с обычных 1 мин. до 10
мин. На это время большинство (или все) TCP-соединения оказываются
заблокированными (screw up).
Особый интерес представляет так называемый «даровой (gratuitous) ARP».
Подобная ситуация возникает, если IP-адреса источника и цели в ARP-запросе
равны. Это обычно происходит в случае широковещательного Ethernet-запроса.
Некоторые реализации TCP/IP-cтека определяют подобную ситуацию, как
специальный случай, и система посылает запросы об обновлении информации ко
всем сетевым клиентам, обновляя собственный кэш ARP-ответами. В этом
случае один пакет может привести к компроментации всей сети. Хотелось бы
отметить, что «даровой (gratuitous) ARP» не определён, как часть стандрата
ARP, поэтому большинство производителей ОС не применяют его, что придаёт
ему меньшую популярность.
ARP — достаточно серьёзный инструмент для всякого рода сетевых атак.
Давайте представим, что кто-то установил ретранслятор (релэй), или тоннель
на своей машине и убедил две соседние машины посылать пакеты друг другу
через Ethernet-карту ретранслятора. Если этот ретранслятор просто
пересылает пакеты к их настоящему месту назначения, никто ничего не
заметит. Однако, в данной ситуации машина-ретранслятор способна
модифицировать передаваемые данные, что представляет собой довольно
большую угрозу конфиденциальности (безопасности) передаваемых данных.
Простой программный фильтр может подставлять 2 случайных байта в
произвольные моменты времени. Контрольная сумма большинства пакетов при
этом не будет изменяться, но суммарный приходящий пакет будет искажён.
Протокол SLARP (Serial Line ARP)
Специальный субпротокол, работающий внутри цисковского варианта HDLC (который обычно cHDLC). Используемый код вложения – 0x8035. Протокол простой, но интересный тем, что может делать две штуки – проверять состояние канала, периодически передавая кадры, и назначать IPv4-адреса в случае, если с одной стороны serial link адрес IPv4 есть, а с другой – нет. Адрес назначается по логике “Если у меня последний бит адреса 1, предложить такой же, но с нулём, и наоборот”. Маска предлагается такая же, как у себя.
Формат кадра будет такой:
- Адрес (один байт) – стандартный адрес вида b1111111 из xHDLC/PPP.
- Контроль (один байт) – то же самое, опять LLC3, т.е. b00000011.
- Код протокола вложения (два байта) – личный номер SLARP, 0x8035.
- Код операции (один байт) – вариант или Address request(0x00), или address reply (0x01), или Keep-alive (0x02).
- IPv4-адрес и маска (два раза по 4 байта) – предлагаемый партнёру по serial link адрес.
- Резерв (один байт) – вечно 0xFF.
- FCS в варианте CRC-16 (два байта)
- Флаг (один байт) – стандартный флаг xHDLC вида b0111110.
Белый IPv6-адрес для каждого в домашней сети
Получить IPv6 адрес для компьютера — этого маловато будет. Хочется так, чтобы каждое мобильное устройство сидело не за позорным NAT’ом, а голой задницей с белым адресом в Интернете. Желательно ещё при этом так, чтобы злые NSA/google не могли по хвостику моего адреса (в котором закодирован MAC) отслеживать мои перемещения между разными IPv6-сетями (хотя в условиях установленного play services эта параноидальность выглядит наивной и беззащитной).
Но, в любом случае, у нас задача раздать интернет дальше.
Tiera, выдавая мне ipv6, настроила у себя маршрут: .
Так как fb97 уже является адресом моего компьютера, настройка машрутизации плёвое дело:
sysctl net.ipv6.conf.all.forwarding=1
… и у нас через пол-часика полностью отваливается IPv6 на компьютере? Почему? Кто виноват?
Оказывается, линукс не слушает routing advertisement, если сам является маршрутизатором. Что, в общем случае, правильно, потому что если два маршрутизатора будут объявлять себя маршрутизаторами и слушать маршруты друг друга, то мы быстро получим простейшую петлю из двух зацикленных друг на друга железных болванов.
Однако, в нашем случае мы всё-таки хотим слушать RA. Для этого нам надо включить RA силком.
Это делается так:sysctl net.ipv6.conf.eth2.accept_ra=2
Заметим, важно, что мы слушаем RA не всюду, а только на одном интерфейсе, с которого ожидаем анонсы.
Теперь маршрутизация работает, маршрут получается автоматически, и можно на каждом мобильном устройстве вручную прописать IPv6 адрес и вручную указать IPv6 шлюз, и вручную прописать IPv6 DNS, и вручную… э… слишком много вручную.
Если мне выдали настройки автоматом, то я так же хочу раздавать их дальше автоматом. Благо, dhcpd отлично справляется с аналогичной задачей для IPv4.
Прелесть IPv6 в том, что мы можем решить эту задачу (раздачу сетевых настроек) без каких-либо специальных сервисов и в так называемом stateless режиме. Главная особенность stateless режима состоит в том, что никто не должен напрягаться и что-то сохранять, помнить и т.д. Проблемы с DHCP в IPv4 чаще всего вызывались тем, что один и тот же адрес выдавали двум разным устройствам. А происходило это из-за того, что злой админ стирал/забывал базу данных уже выданных аренд. А ещё, если железок много и они забывают «отдать аренду», то адреса заканчиваются. Другими словами, stateful — это дополнительные требования и проблемы.
Для решения тривиальной задачи «раздать адреса» в IPv6 придумали stateless режим, который основывается на routing advertisement. Клиентскую часть мы уже видели, теперь осталось реализовать серверную, дабы накормить IPv6 планшетик.
Основные отличия протоколов IPv4 и IPv6
Как уже было сказано, ключевым недостатком протокола четвертой версии TCP/IPv4 является ограниченная масштабируемость уникальных адресов, присваиваемых для идентификации в сетях взаимодействия. Для создания ip-адресов на уровне программных записей используется 32-х битная система в формате 0.0.0.0 – 255.255.255.255. При построении локальных подсетей вводится дополнительный атрибут «маска подсети», записываемая после символа «/». В результате даже крупные ЛВС, объединенные в Ethernet, чаще всего имеют один публичный ip-адрес, выдаваемый провайдером и закрепленный на уровне шлюза (маршрутизатора). Самостоятельный обмен данными на уровне отдельных устройств частной подсети с выходом в паблик-интернет требует сложного администрирования. Для решения задач маршрутизации, требующих получения статических IP-адресов, понадобятся дополнительные финансовые затраты.
В интернет-протоколе нового поколения IPv6 для создания адресной маршрутизации используется 128-битная система записи. В IPv6-адресе записи представляют собой восемь 16-битных блоков, разделенных двоеточиями: 2dfc:0:0:0:0217:cbff:fe8c:0. Общее количество ip-адресов, возможных для распределения, может составить в общей сложности 2128 (приблизительно 340 282 366 920 938 000 000 000 000 000 000 000 000). Повсеместное использование данного стандарта позволит полностью решить задачу нехватки сетевых адресов в обозримом будущем.
С целью упрощения записи адреса в протоколе IPv6 используется вариант сжатия кода, когда смежные последовательности нулевых блоков заменяются парами символов двоеточия. Например, адрес групповой рассылки FFEA:0:0:0:0:CA28:1012:4254 в сжатой форме будет представлен в укороченном виде FFEA::CA28:1012:4254. Данный механизм упрощает процесс записи, хранения и обработки кода.
По правилам протокола IPv6 назначение сетевых адресов происходит автоматически и уникализируется за счет идентификации на уровне MAC-адреса конкретной единицы оборудования, для которой необходим выход в публичную сеть. Другими словами, каждый домашний компьютер, смартфон, холодильник или стиральная машина с функцией подключения к внешним устройствам получает собственный «белый» ip-адрес для коннекта с другими хостами через интернет. Доступна также произвольная генерация кодов путем администрирования с использованием маршрутизаторов.
Впечатляет минимальный диапазон адресов подсети, получаемых пользователем при подключении по протоколу IPv6. Например, при использовании маски подсети «/128» получаем более 256 адресов.
Спорным является вопрос отличия в скорости передачи трафика по каждому из протоколов. По умолчанию технология протокола IPv6 обеспечивает большую скорость обработки трафика на уровне отдельного оборудования сети в целом. Использование NAT в протоколе IPv4, который обеспечивает трансляцию адресов абонентов и хранение в памяти информации об установленных соединениях, приводит к большой загрузке оборудования. Поэтому в моменты пиковой нагрузки каждый пользователь отмечает резкое падение скорости соединения.
В протоколе IPv6 не применяется обязательная обработка пакетов и отслеживание уже открытых соединений при маршрутизации доступа к хостам. Отсутствие необходимости трансляции значительно снижает ресурсную нагрузку на сетевые устройства. Для пользователя это означает выравнивание скорости интернет-соединения. Провайдеры в такой ситуации могут использовать менее ресурсоемкое, а значит, более дешевое оборудование.
Уникальные адреса хостов в IPv6
Стандартный размер сети для одного сегмента канального уровня в IPv6 —
/64. Это очень много — 2^64 адресов! Казалось бы, глупая идея, но для нее есть основания. В 64 бита можно поместить существующий глобально уникальный идентификатор или сгенерировать случайный с очень низкой вероятностью конфликтов.
Каждый заводской MAC-адрес гарантированно уникален, поэтому вы можете избежать потенциальных конфликтов адресов навсегда, просто использовав MAC-адрес сетевой карты как часть ее адреса IPv6. Данный механизм называется EUI-64 (Extended Unique Identifier). В деталях про него можете прочитать в приложении к RFC 2373.
Размер MAC-адреса — 48 бит (шесть байт), а нам нужно 64, поэтому он делится на две части по три байта и в середину вставляется магическое число 0xFFFE. Кроме того, инвертируется седьмой бит MAC-адреса — у глобально уникальных он по умолчанию установлен в ноль.
Поскольку адреса типа link-local не маршрутизируются, никаких проблем с приватностью такой подход не создает. Для присвоения публичных адресов он, очевидно, проблематичен — злоумышленник с доступом к дампам трафика или логам сервера легко может отождествить адреса из разных сетей — например, из дома, с работы или публичной точки доступа WiFi в гостинице — с одним устройством и отследить местоположение пользователя.
В сегодняшнем мире это далеко не самая большая угроза приватности, так что мы не будем рассматривать механизмы борьбы с ней в деталях, но они существуют. Один вариант, IPv6 privacy extensions, описан в RFC 3041. Важнее то, что в IPv6, вернее в NDP — эквивалент ARP, встроен механизм выявления коллизий адресов. Узлы сначала присваивают адресу состояние tentative и ждут, не придет ли пакет NDP с этим адресом в источнике. Если такой пакет приходит, адрес не активируется.
Таким образом, идея автоматически сгенерированных адресов применима и к локальным адресам, и к публичным. Для потребуется только адрес сети.
Маршрутизаторы при настройке сетевых карт нередко позволяют указать вручную только адрес сети, но оставить систему генерировать идентификатор хоста самостоятельно: например,
interfaceGi0;ipv6 address2001db8/64eui-64 в Cisco IOS,
set interfaces ethernet eth0 ipv6 address eui642001db8/64 в VyOS. Хосты адрес своей сети обычно не знают, поэтому его нужно получить из внешнего источника. В такой ситуации и вступает в действие SLAAC (StateLess Address AutoConfiguration) через router advertisement.
Итоги по протоколу IPv6
В статье рассмотрели протокол IPv6 это протокол используется на сетевом уровне для передачи данных, и он предназначен для замены протокола IPv4. Протокол IPv6 позволяет решить проблему нехватки адресов IPv4, также он позволяет ускорить работу маршрутизаторов, и обеспечить безопасность передачи данных на сетевом уровне. Для того чтобы это обеспечить, длина IP адресов IPv6 увлечена до 16 байт, отказались от расчета контрольных сумм и фрагментации на маршрутизаторах, а для защиты данных в единой технологии аутентификации и шифрования.
Однако существует проблема с внедрением протокола IPv6 вызванная с несовместимостью IPv4. Для того чтобы перейти на протокол IPv6, необходимо полностью перенастроить существующие сетевое оборудование, на что пользователи и администраторы сетей идут неохотно.