IPv6 в Cisco или будущее уже рядом (Часть 1)

    image

    Введение



    Протокол IPv6 является наследником повсеместно используемого сегодня протокола IP четвёртой версии, IPv4, и естественно, наследует большую часть логики работы этого протокола. Так, например, заголовки пакетов в IPv4 и IPv6 очень похожи, используется та же логика пересылки пакетов – маршрутизация на основе адреса получателя, контроль времени нахождения пакета в сети с помощью TTL и так далее. Однако, есть и существенные отличия: кроме изменения длины самого IP-адреса произошёл отказ от использования широковещания в любой форме, включая направленное (Broadcast, Directed broadcast). Вместо него теперь используются групповые рассылки (multicast). Также исчез ARP-протокол, функции которого возложены на ICMP, что заставит отделы информационной безопасности внимательнее относиться к данному протоколу, так как простое его запрещение уже стало невозможным. Мы не станем описывать все изменения, произошедшие с протоколом, так как читатель сможет с лёгкостью найти их на большинстве IT-ресурсов. Вместо этого покажем практические примеры настройки устройств на базе Cisco IOS для работы с IPv6.
    Многие начинающие сетевые специалисты задаются вопросом: «Нужно ли сейчас начинать изучать IPv6?» На наш взгляд, сегодня уже нельзя подходить к IPv6 как к отдельной главе или технологии, вместо этого все изучаемые техники и методики следует отрабатывать сразу на обоих версиях протокола IP. Так, например, при изучении работы протокола динамической маршрутизации EIGRP стоит проводить настройку тестовых сетей в лаборатории как для IPv4, так и для IPv6 одновременно. Перейдём от слов к делу!



    Адресация в IPv6

    Длина адреса протокола IPv6 составляет 128 бит, что в четыре раза больше той, которая была в IPv4. Количество адресов IPv6 огромно и составляет 2128≈3,4⋅1038. Сам адрес протокола IPv6 можно разделить на две части: префикс и адрес хоста, которую ещё называют идентификатором интерфейса. Такое деление очень похоже на то, что использовалось в IPv4 при бесклассовой маршрутизации.

    Адреса в IPv6 записываются в шестнадцатеричной форме, каждая группа из четырёх цифр отделяется двоеточием. Например, 2001:1111:2222:3333:4444:5555:6666:7777.

    Маска указывается через слеш, то есть, например, /64.

    В адресе протокола IPv6 могут встречаться длинные последовательности нулей, поэтому предусмотрена сокращённая запись адреса. Во-первых, могут не записываться начальные нули каждой группы цифр, то есть вместо адреса 2001:0001:0002:0003:0004:0005:0006:7000 можно записать 2001:1:2:3:4:5:6:7000. Конечные нули при этом не удаляются. В случае, когда группа цифр в адресе (или несколько групп подряд) содержит только нули, она может быть заменена на двойное двоеточие. Например, вместо адреса 2001:1:0:0:0:0:0:1 может использоваться сокращённая запись вида 2001:1::1. Стоит отметить, что сократить адрес таким образом можно только один раз.

    Ниже приводятся правильные и неправильные формы записи IPv6 адресов.
    Правильная запись.
    2001:0000:0db8:0000:0000:0000:07a0:765d
    2001:0:db8:0:0:0:7a0:765d
    2001:0:db8::7a0:765d

    Ошибочная форма.
    2001::db8::7a0:765d
    2001:0:db8::7a:765d

    Забавные сокращения.
    ::/0 – шлюз по умолчанию
    ::1 – loopback
    2001:2345:6789::/64 – адрес какой-то сети

    Однако не все адреса протокола IPv6 могут быть назначены узлам в глобальной сети. Существует несколько зарезервированных диапазонов и типов адресов. Адрес IPv6 может относиться к одному из трёх следующих типов.
    • Unicast
    • Multicast
    • Anycast

    Адреса Unicast очень похожи на аналогичные адреса протокола IPv4, они могут назначаться интерфейсам сетевых устройств, серверам и хостам конечных пользователей. Групповые или Multicast адреса предназначены для доставки пакетов сразу нескольким получателям, входящим в группу. При использовании Anycast адресов данные будут получены ближайшим узлом, которому назначен такой адрес. Стоит обратить особое внимание на то, что в списке поддерживаемых протоколом IPv6 адресов отсутствуют широковещательные адреса. Даже среди Unicast адресов существует более мелкое дробление на типы.
    • Link local
    • Global unicast
    • Unique local
    Адреса, относящиеся к группе Unique local, описаны в RFC 4193 и по своему назначению очень похожи на приватные адреса протокола IPv4, описанные в RFC 1918. Адреса группы Link local предназначены для передачи информации между устройствами, подключёнными к одной L2-сети. Большинство адресов из диапазона Global unicast могут быть назначены интерфейсам конкретных сетевых узлов. Список зарезервированных адресов представлен ниже.

    Адрес
    Маска
    Описание
    Заметки
    ::
    128
    Аналог 0.0.0.0 в IPv4
    ::1
    128
    Loopback
    Аналог 127.0.0.1 в IPv4
    ::xx.xx.xx.xx
    96
    Встроенный IPv4
    IPv4 совместимый. Устарел, не используется
    ::ffff:xx.xx.xx.xx
    96
    IPv4, отображённый на IPv6
    Для хостов, не поддерживающих IPv6
    2001:db8::
    32
    Документирование
    Зарезервирован для примеров. RFC 3849
    fe80:: — febf::
    10
    Link-local
    Аналог 169.254.0.0/16 в IPv4
    fc00::
    7
    Unique Local Unicast
    Пришёл на смену Site-Local. RFC 4193
    ffxx::
    8
    Multicast


    Базовая настройка интерфейсов


    Включение маршрутизации IPv6 производится с помощью команды ipv6 unicast-routing. В принципе, поддержка маршрутизатором протокола IPv6 будет производиться и без введения указанной команды, однако без неё устройство будет выполнять функции хоста для IPv6. Многие команды, к которым вы привыкли в IPv4, присутствуют также и в IPv6, однако для них вместо опции ip нужно будет указывать слово ipv6.
    Настройка адреса на интерфейсе возможна несколькими способами. При одном лишь включении поддержки IPv6 на интерфейсе автоматически назначается link-local адрес.

    R1#conf t
    Enter configuration commands, one per line.  End with CNTL/Z.
    R1(config)#int gi0/0
    R1(config-if)#ipv6 enable
    R1(config-if)#^Z
    R1#show ipv6 int bri
    Ethernet0/0                [administratively down/down]
        unassigned
    GigabitEthernet0/0         [up/up]
        FE80::C800:3FFF:FED0:A008
    


    Вычисление части адреса link-local производится с помощью алгоритма EUI-64 на основе MAC-адреса интерфейса. Для этого в середину 48 байтного МАС-адреса автоматически дописывается два байта, которые в шестнадцатеричной записи имеют вид FFFE, а также производится инвертирование седьмого бита первого байта MAC-адреса. На рисунках ниже схематично показана работа обсуждаемого алгоритма.

    image
    image

    Сравните указанные выше link-local адрес с физическим адресом интерфейса Gi0/0 маршрутизатора (несущественная часть вывода команды sho int Gi0/0 удалена).

    R1#show int gi0/0
    GigabitEthernet0/0 is up, line protocol is up
      Hardware is i82543 (Livengood), address is ca00.3fd0.a008 (bia ca00.3fd0.a008)
    EUI-64 часть IPv6 адреса: CA00:3FFF:FED0:A008.
    


    Назначение адреса на интерфейс вручную производится с помощью команды ipv6 address, например, ipv6 address 2001:db8::1/64. Возможно лишь указывать адрес сегмента сети, оставшаяся часть будет назначаться автоматически с использованием преобразованного с помощью EUI-64 физического адреса интерфейса, для чего используйте команду с ключевым словом eui-64.

    R2#conf t
    R2(config)#int gi0/0
    R2(config-if)#ipv ad 2001:db8::/64 eui-64
    R2(config-if)#^Z
    R2#show ipv6 int bri
    Ethernet0/0                [administratively down/down]
        unassigned
    GigabitEthernet0/0         [up/up]
        FE80::C801:42FF:FEA4:8
        2001:DB8::C801:42FF:FEA4:8
    


    Обмен сообщениями внутри одного L2-сегмента только с помощью адресов link-local возможен и в некоторых случаях используется, однако в большинстве ситуаций интерфейсу должен быть назначен обычный маршрутизируемый IPv6-адрес. Так, например, соседство по протоколам OSPF или EIGRP устанавливается с использованием link-local адресов. Автоматический поиск соседа и другие служебные протоколы также работают по link-local адресам

    R1#sho ipv6 int brief
    Ethernet0/0                [administratively down/down]
        unassigned
    GigabitEthernet0/0         [up/up]
        FE80::C800:42FF:FEA4:8
        2001:DB8::1
    R1#sho ipv ei ne
    IPv6-EIGRP neighbors for process 1
    H   Address                 Interface       Hold Uptime   SRTT   RTO  Q  Seq
                                                (sec)         (ms)       Cnt Num
    0   Link-local address:     Gi0/0             12 00:01:03   39   234  0  3
        FE80::C801:42FF:FEA4:8
    
    R1#ping FE80::C801:42FF:FEA4:8
    
    Output Interface: GigabitEthernet0/0
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to FE80::C801:42FF:FEA4:8, timeout is 2 seconds:
    Packet sent with a source address of FE80::C800:42FF:FEA4:8
    !!!!!
    Success rate is 100 percent (5/5), round-trip min/avg/max = 4/20/48 ms
    


    Естественно, сохранилась и возможность автоматического назначения адреса в IPv6 с помощью протокола DHCP. Стоит, правда, отметить, что в IPv6 существует два различных типа DHCP: stateless и stateful, настройка которых производится с помощью команд ipv6 address autoconfig и ipv6 address dhcp соответственно.

    Как уже было отмечено ранее, в IPv6 протокол ARP более не используется. Определение соседей производится с помощью протокола NDP (Neighbor Discovery Protocol) путём обмена сообщениями ICMP, отправляя их на групповой адрес FF02::1.

    R1#show ipv6 neighbors
    IPv6 Address                              Age Link-layer Addr State Interface
    FE80::C801:42FF:FEA4:8                     25 ca01.42a4.0008  STALE Gi0/0
    


    В операционных системах семейства Windows также присутствует возможность просмотра списка соседей (аналог команды arp –a), правда, теперь придётся использовать более длинный системный вызов.

    C:\>netsh interface ipv6 show neighbors
    Interface 1: Loopback Pseudo-Interface 1
    Internet Address                              Physical Address   Type
    --------------------------------------------  -----------------  -----------
    ff02::c                                                          Permanent
    ff02::16                                                         Permanent
    ff02::1:2                                                        Permanent
    ff02::1:3                                                        Permanent
    ff02::1:ff1e:f939                                                Permanent
    Interface 24: Подключение по локальной сети 4
    Internet Address                              Physical Address   Type
    --------------------------------------------  -----------------  -----------
    2001:db8:0: 5::1                            00-11-5c-1b-3d-49  Reachable (Router)
    fe80::ffff:ffff:fffe                          Unreachable        Unreachable
    fe80::211:5cff:fe1b:3d49                      00-11-5c-1b-3d-49  Stale (Router)
    fe80::218:f3ff:fe73:33d7                      Unreachable        Unreachable
    fe80::a541:1a9:3b2d:7734                      Unreachable        Unreachable
    ff02::1                                       33-33-00-00-00-01  Permanent
    ff02::2                                       33-33-00-00-00-02  Permanent
    ff02::c                                       33-33-00-00-00-0c  Permanent
    ff02::16                                      33-33-00-00-00-16  Permanent
    ff02::1:2                                     33-33-00-01-00-02  Permanent
    ff02::1:3                                     33-33-00-01-00-03  Permanent
    ff02::1:ff00:0                                33-33-ff-00-00-00  Permanent
    ff02::1:ff00:1                                33-33-ff-00-00-01  Permanent
    


    Похожим образом осуществляется поиск маршрутизаторов в локальном сегменте, правда, в этом случае отправка пакетов производится на адрес FF02::2. Заинтересованный узел отправляет сообщение RS (Router Solicitation), на которое получает ответ RA (Router Advertisement) от маршрутизатора. Указанный ответ содержит параметры работы IP-протокола в данной сети. Описанный процесс представлен на рисунке ниже.

    image

    Обнаружение маршрутизатора, подключённого к сегменту локальной сети, используется для получения узлом адреса IPv6 с помощью процедуры stateless address autoconfiguration (SLAAC), которую ещё называют Stateless DHCP.

    ______________
    UPD 5/05/14: Как верно заметил коллега в комментарии, следует различать SLAAC и Stateless DHCP. В нашем с Максимом тексте пропущено важно е слово «ОШИБОЧНО». Помните, как в учебнике по философии говорилось, что нельзя выдирать цитату из контекста, а то получится «Было бы ошибкой думать, что (цитата)» :)

    Итого, верно было бы написать: «stateless address autoconfiguration (SLAAC), которую в некоторой литературе ОШИБОЧНО называют Stateless DHCP.»

    Приношу свои извинения за недосмотр и введение в заблуждение
    ______________

    (продолжение в виде маршрутизации, туннелирования и VRF — здесь).

    Статья написана Максимом Климановым (foxnetwork.ru, я — соавтор), который попросил меня опубликовать ее для широкого круга читателей.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 14

      +5
      stateless address autoconfiguration (SLAAC), которую ещё называют Stateless DHCP
      Кто это так называет? Это беспросветная чушь. Основной задачей процедуры SLAAC является согласование адреса на интерфейсе. В RA-сообщении есть специальный, т.н. O-флаг. Он может быть выставлен в 0, в этом случае информация о том же RDNSS как правило передаётся в соответствующем атрибуте RA, и никакой Stateless или Stateful DHCP не используется в принципе, хост не инициирует поиск DHCPv6-сервера. Если же этот бит выставлен в 1, то это сигнал для хоста, означающий, что надо запросить дополнительную конфигурацию (пресловутый RDNSS) посредством Stateless DHCPv6. Строго говоря, для полной совместимости со всеми ОС, RDNSS может передаваться в RA и с выставленным в 1 O-флагом. Это связано с тем, что есть ОС, не умеющие RDNSS внутри RA, а есть ОС, не умеющие Stateless DHCP в принципе. Посему прошу не путать эти два протокола, с вашим послужным списком это удивительный ляп.
        +2
        Спасибо за отзыв — проверю.
          +5
          Был один эксперимент, проведенный CBT Nuggets, по поводу реакции разных ОС на разные сочетания m- и o-флагов. Вкратце: «разброд и шатание».
          image
          +2
          Ваша информация верна, спасибо за поправку! Здорово, когда есть внимательные и грамотные читатели.

          Мы проверили — действительно в некоторой литературе эти понятия смешивали, но корректно их разделять.

          Еще раз спасибо за внимательность и экспертизу.
            0
            Вот и хорошо:) Вам спасибо за труды.
          0
          А чего в блог IPv6 не добавили?
            0
            Вы правы — я давно (несколько лет ) не был на Хабре. Пользуюсь старыми привычками — тогда не было блога IPv6. Сейчас увидел. Добавлю. Спасибо за подсказку.
            0
            Я можем быть и предираюсь +)
            В названии статьи конечно есть слово Cisco, но для людей просто проходивших мимо, было бы понятней хотя бы так:
            R2(config-if)#ipv6 addr 2001:db8::/64 eui-64
            нежели уж совсем поцисковски
            R2(config-if)#ipv ad 2001:db8::/64 eui-64

            Спасибо!
              +1
              Из «прикольных» адресов в IPv6 применяется и такое:
              2001:db8:dead:beef::

              Поскольку не у всех есть Циски, то приведу бюджетный вариант для Vyatta. У нас построена целая лаба для маршрутизации на базе этого бесплатного решения.
              Привожу «выжимку» для IPv6, остальное можно додумать и дочитать через хелп:

              set interfaces ethernet eth1 address '2001:db8:1:1::1/64'

              set protocols bgp 65550 address-family ipv6-unicast network '2001:db8:1:2::/64'
              set protocols bgp 65550 neighbor 2001:db8:1:1::2 address-family 'ipv6-unicast'
              set protocols bgp 65550 neighbor 2001:db8:1:1::2 remote-as '65550'
              set protocols bgp 65550 neighbor 2001:db8:1:1::2 'route-reflector-client'

              Отдельно хочу отметить вот это:
              ::ffff:xx.xx.xx.xx IPv4, отображённый на IPv6 Для хостов, не поддерживающих IPv6

              Это не совсем корректно.

              Эта форма записи позволяет приложению использовать только один сокет tcp/udp для обработки одновременно и IPv4 и IPv6 соединений.
              Вместо того, чтобы открывать раздельно сокеты под IPv4 и IPv6, приложение открывает сокет IPv6, делает «bind ::».
              Входящие IPv4 соединения могут быть обработаны через IPv6 структуры с сохранением смыслового значения.

              При необходимости установить исходящее соединение, банально "::ffff:" + IP передается для заполнения sockaddr_in6 и подается в connect.

              Этот диапазон как раз и нужен хостам, ПОДДЕРЖИВАЮЩИМ IPv6, чтобы упростить переход под работу одновременно с IPv4 и IPv6 соединениями без удваивания кода приложения для работы с сокетами.
                +1
                Поскольку не у всех есть Циски

                Сейчас большинство цискиных ОС прекрасно виртуализируется штатными средствами в VMWare.
                  0
                  У циски есть отличный бесплатный виртуальный маршрутизатор CSR. Не требователен для аппаратуры.

                  Рекомендую. Мы на нем делали битву на CiscoConnect2013. 12 маршрутизаторов поднимается на 16 (кажется) Г оперативки и прекрасно трудятся.
                    0
                    Спасибо за инфу.
                    Вы упомянули Cisco Cloud Services Router 1000V? Который дается как бесплатная триалка на 60 дней?

                    В сторону Vyatta Core могу сказать только два плюса:
                    виртуалки 512М хватает чтобы прожевать полную таблицу BGP.
                    А для лабы — там 256М и много-много виртуалок под топологии разной сложности.

                    PS Я работаю в проекте, который является «добавочными мозгами» для протокола BGP и на бесплатных рутерах мы крутим нашу лабу с полной таблицей — чтобы не грузить Route Processor кучей BGP сессий, которые рвутся когда нам будет удобно.
                      0
                      Ну СSR1k вроде хочет из коробки 2,5гб, но наверняка его можно подрезать по этой части, даже когда виртуалка одна, а если их много — будет много места экономиться.

                      Благодаря selective route download можно принять и отдать full view, и при этом не программировать его в RIB/FIB, что тоже экономит место, а заодно время на переваривание.

                      Добавление второго и дальнейших full view от соседей поднимет потребление памяти не в разы, а на проценты.

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

                      Что до «60 дней» — там лицензирование RTU, т.е. оно не енфорсится.

                      И вообще, если отлаживаете нечто связанное с BGP, то тестировать взаимодействие этого дела с продукцией Главного Вендора Всея Мира было бы очень правильной идеей :)
                    0
                    Из «прикольных» адресов в IPv6 применяется и такое
                    В фэйсбуке тоже шутники сидят — 2a03:2880:2110:df07:face:b00c::1

                  Only users with full accounts can post comments. Log in, please.