IPv6 theory and practice

На IPv6 давно уже потихоньку переходят, но все никак не перейдут. Полностью перейдут еще в далеком будущем, как мне кажется. Однако сейчас уже есть моменты, когда уже без ipv6 никак не обойтись. В моей работе такой момент всплыл, когда подняли сервер Direct Access от Microsoft, работает он полностью с IPv6 адресами.
IPv6 на первый взгляд страшная штука. Еще бы, давайте сравним адреса

ipv4 192.168.100.1

ipv6 2001:0000:0db8:0000:0000:0000:07b0:767b

Страшно? По крайней мере, непривычно. Но, главное разобраться что к чему и все станет понятно. Одно из главных отличий – адрес ipv6 состоит из 128 бит, в отличие от адресов ipv4, которые состоят из 32 бит.
Что нам это дает? Так как ipv4 адреса заканчиваются и на данный момент RIPE не выдает сетки v4, то на замену им приходят ipv6 адреса. Ipv6 адресов очень много и я даже не знаю как их количество можно будем исчерпать. Судите сами ipv6 адрес состои из 128 бит, значит количество адресов 2 в 128 степени или 3,4^1038.
Это очень много и хватит с запасом, не только на нашу планету=)

Формат адреса. Запись адреса называется точечно-шестнадцатиричная. Выглядит адрес так:

2001:0000:0db8:0000:0000:0000:07b0:767b/64

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

2001:0000:0db8::07b0:767b/64

При этом, это будет тот же самый адрес.

Как и в ipv4 (в бессклассовой марщрутизации) первая часть адреса (64 бит) индентифицирует сеть, а вторые 64 бита идентифицируют хост. Вот еще одно из главный отличий от ipv4 это отсутствие маски подсети. Да, маски больше нет и не будет. Теперь только префиксы. Префиксы для идентификации сети или маршрута обозначаются как в CIDR для ipv4 в виде address/prefix.
Пример
20DA:D3::/48 – будет адрес маршрута, а 20DA:D3::/64 – подсеть

Как теперь использовать адреса в URL, если раньше мы просто набирали в браузере типа http://192.168.1.1:8080 ?
Ну, во-первых теперь не обойтись без DNS никак. Никто не будет использовать ipv6 без DNS, это будет просто ужас.
Во-вторых, если сильно нужно, то берем просто адрес в скобки, вот так

http://[2001:0000:0db8::07b0:767b]:8080

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

Native Ipv6 – означает, что сетка у вас полностью на протоколе ipv6 и ничего больше.
Dual-stack – сеть смешанная, используются протоколы и ipv6 и ipv4.
Interface Identifier – идентификатор интерфейса, то есть префикс или вторые 64 бита адреса.
ZoneID – понятие только для Link-local адресов(ниже расскажу), когда одинаковые адреса стоят на
нескольких интерфейсах маршрутизатора, а они могут стоять и никаких конфликтов не будет, потому что не маршрутизируются они никуда, то их надо различать с помощью zoneid
ICMPv6 – новый icmp протокол, попинговать адреса и пр.
SLAAC – целая технология для автоконфигурация адресов в ipv6. Stateless Address Autoconfiguration.
Выглядит это так. Маршрутизатор с ipv6 адресом рассылает
запросы на мультикаст адрес FF02::1 раз в 200 секунд. Клиет увидел запрос и получил адрес, например, по технологии EUI-64(на основе mac-адреса).
Но остальные настройки,типа DNS и прочие, он не получит без DHCP сервера.
DHCPv6 Stateless – если мы получили адрес на клиенте с помощью SLAAC, то нам нужны остальные настройки и дать нам их может DHCP сервер. Потому используем
Stateless только для получения DNS и NTP, ведь адрес и маршрут у нас уже есть.
DHCPv6 Stateful – а с этого сервер можно получить уже все настройки по dhcp, включая адрес с префиксом и все остальное. (в следующем посте покажу пример на CISCO).

Типы адресов IPv6. Здесь мы видим все теже типы адресов:

Unicast
Multicast
Anycast

Исключение составляет Broadcast. Его в IPv6 нет. Все широковещательные адресные рассылки проходят только через Multicast.
В кратце разберем типы.
Unicast – когда хост отправляет пакеты другому хосту.
Multicast – когда хост отправляет пакеты нескольким хостам, для этого есть специально зарезервированные адреса IPv6.
Anycast – отличить от unicast сложно, это скорее методология. Используется, например, для корневых DNS. Есть определенный адрес, отправляя пакеты на который, можно попасть на несколько адресов, но по очереди. То есть попадаем вначале на один хост, если он не отвечает, то следующий и так далее.

На данном этапе пока разберем Unicast, так как больше всего будем встречаться именно с ним.
Unicast делится на такие типы адресов.

  • Global Unicast addresses
  • Link-local addresses
  • Unique Local addresses
  • Special addresses
  • Transition addresses

В кратце о этих типах. Global – глобальный тип, выдает эти адреса RIPE, по сути, это аналог белых ipv4 адресов.

Special address – это специально зарезервированные адреса, например, для групповых рассылок. Еще есть такая сеть 2001:db8::/32 которая используется для тестов и примеров. Так же сюда можно отнести адреса
:1/128 – это loopback, аналог 127.0.0.1
::/128 – адрес нулевой, используется только в программном обеспечении.

И Link-local адреса. Это адреса, которые автоматически присваиваются интерфейсу, если на нем включен ipv6, но эти адреса не маршрутизируются! То есть, адрес этот не выходит за пределы линка. На практике выглядит так.
Возьмем GNS3 и два роутера Cisco

link-local

На интерйфейсах включим ipv6

R1(config)#int fa0/0
R1(config-if)#ipv6 enable

R2(config)#int fa0/0
R2(config-if)#ipv6 enable

И посмотрим на интерфейс

R1#sh run int fa 0/0
Building configuration…

Current configuration : 74 bytes
!
interface FastEthernet0/0
no ip address
duplex half
ipv6 enable
end

Адреса у нас никакого нет, но если посмотреть

R1#sh ipv6 int br
FastEthernet0/0 [up/up]
FE80::C801:1DFF:FE28:0

То видим какой-то IPv6 адрес – это и есть link-local адрес. За пределы маршрутизатора он не уходит.

Подробнее об Unique local. Это аналог частных ipv4 адресов, как раньше мы ставили приватные адреса типа 10.10.10.10/16
fc00::/7 – сеть приватных адресов. Первые 8 бит в этом адресе FD00:: это глобальны префикс, по которому все понимают, что это частный адрес. Затем идут 40 бит – это Global ID, который идентифицирует организацию, он выдается псевдослучайным образом, что
исключает совпадения в адресации, которые могут быть, при объединении организаций (в ipv4 такая проблема была, когда нужно объединить две сети, а адресация совпадает). Следующие 16 бит – это подсеть. И оставшиеся 64 бита, это идентификатор интерфейса.
Если вы хотите взять себе какой-то диапазон для частных адресов, то можно воспользоваться любым генератором ipv6 адресов, в гуглу так и пишем “Local IPv6 Range Generator”. Частные адреса описаны в RFC-4193.
Пример частной подсети fdba:32d4:d10e:bf56::/64

Ну вот по теории наверно пока все. Тема конечно очень большая, отдельно стоит описать технологию EUI-64, а так же мультикаст и DHCPV6. Кстати, по DCHP сделаю отдельную тему и лабораторку на cisco. А пока немного практики, возьмем GNS3, три маршрутизатора и настроим Ipv6 адресацию и статическую маршрутизацию.
Берем такую топологию.

ipv6-static-route

У нас будут здесь и адреса link-local и частные адреса.

Первым делом включаем на каждом роутере ipv6 командой

ipv6 unicast-routing

Далее на R1 настроим интерфейсы. На Fa0/0 мы просто включаем ipv6 и будем использовать link-local адрес.

interface Loopback0
no ip address
ipv6 address 2001::1/128
!
interface FastEthernet0/0
no ip address
duplex auto
speed auto
ipv6 enable

Делаем настройки на R2. Тут у нас уже будут частные специальные адреса, потому что через r2 мы будем настраивать статические маршруты.

interface Loopback0
no ip address
ipv6 address 2001::2/128
!
interface FastEthernet0/0
no ip address
duplex auto
speed auto
ipv6 address 2001:12::2/64
ipv6 enable
!
interface FastEthernet1/0
no ip address
duplex auto
speed auto
ipv6 address 2001:8::2/64
ipv6 enable

И настроим R3. Здесть у нас только лупбэк и link-local

interface Loopback0
no ip address
ipv6 address 2001::3/128
!
interface FastEthernet0/0
no ip address
duplex auto
speed auto
ipv6 enable

Задача такая: нужно с R1 увидеть адрес 2001::3 /128. Для этого нужно настроить маршрутизацию. Я покажу на примере статической маршрутизации.

Добавляем маршруты на R1. Тут все понятно. Адрес 2001:12::2 стоит на интерфейсе рутер R2.

ipv6 route 2001::2/128 FastEthernet0/0 2001:12::2
ipv6 route 2001::3/128 FastEthernet0/0 2001:12::2

 

На R2 добавляем. Тут уже пошли адреса link-local. FE80::CE01:14FF:FE48:0 на рутере R1 и на R2 FE80::CE03:16FF:FE98:0

 

ipv6 route 2001::1/128 FastEthernet0/0 FE80::CE01:14FF:FE48:0
ipv6 route 2001::3/128 FastEthernet1/0 FE80::CE03:16FF:FE98:0

 

Как выше я писал, можно эти адреса увидеть командой sh ipv6 int br

И добавляем маршруты на R3

 

ipv6 route 2001::1/128 FastEthernet0/0 2001:8::2
ipv6 route 2001::2/128 FastEthernet0/0 2001:8::2

 

Теперь пробуем пинговать с R1

R1#ping 2001::3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001::3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/59/144 ms

Все работает.
Итак, сегодня мы убедились, что ipv6 на так уж и страшно. Продолжение следует.

Comments

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *