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

    Публикую продолжение вот этой статьи.

    Статические маршруты

    Таблица маршрутизации протокола IPv6 по умолчанию содержит не только непосредственно подключённые сетки, но также и локальные адреса. Кроме того, в ней присутствует маршрут на групповые адреса.

    R1#show ipv6 routing
    IPv6 Routing Table - Default - 3 entries
    Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
           HA - Home Agent, MR - Mobile Router, R - RIP, I1 - ISIS L1
           I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary, D - EIGRP
           EX - EIGRP external
    C   2001:DB8::/64 [0/0]
         via GigabitEthernet0/0, directly connected
    L   2001:DB8::1/128 [0/0]
         via GigabitEthernet0/0, receive
    L   FF00::/8 [0/0]
         via Null0, receive
    


    Привычным способом задаются статические маршруты в IPv6. Единственное, что хотелось бы отметить, что при использовании link-local адресов кроме самого адреса следующего перехода необходимо указать и интерфейс.


    R1#conf t
    R1(config)#ipv6 route ::/0 gi0/0 FE80::C801:42FF:FEA4:8
    R1(config)#^Z
    R1#show ipv6 routing
    IPv6 Routing Table - Default - 4 entries
    Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
           HA - Home Agent, MR - Mobile Router, R - RIP, I1 - ISIS L1
           I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary, D - EIGRP
           EX - EIGRP external
    S   ::/0 [1/0]
         via FE80::C801:42FF:FEA4:8, GigabitEthernet0/0
    C   2001:DB8::/64 [0/0]
         via GigabitEthernet0/0, directly connected
    L   2001:DB8::1/128 [0/0]
         via GigabitEthernet0/0, receive
    L   FF00::/8 [0/0]
         via Null0, receive
    


    Динамическая маршрутизация


    Настройка динамической маршрутизации в IPv6 немногим сложнее. Во-первых, для добавления интерфейса в процесс маршрутизации команда network более не используется. Вместо этого на интерфейсе должна быть дана команда ipv6 eigrp 1 для включения EIGRP 1, либо ipv6 ospf 1 area 0 для добавления интерфейса в магистральную зону процесса OSPF 1. Процесс маршрутизации EIGRP для IPv6 по умолчанию выключен, поэтому его потребуется включить, но самой «приятной» особенностью является необходимость следить за назначением параметра router-id. При IPv4 маршрутизации данный параметр мог быть назначен вручную, либо выбран автоматически на основании IP-адресов, назначенных интерфейсам. Если на устройстве нет IPv4 адресов вовсе, то router-id для процессов динамической маршрутизации IPv6 может быть назначен только вручную.
    Для элементарной сети, представленной на схеме ниже, проведём настройку EIGRP. Маршрутизатор R1 на интерфейсе Gi0/0 имеет адрес 2001:db8::1/64, R2 – 2001:db8::2/64.

    image

    Сначала настроим маршрутизатор R1.

    R1#conf t
    R1(config)#ipv6 router eigrp 1
    R1(config-rtr)#no shut
    R1(config-rtr)#eigrp router-id 1.1.1.1
    R1(config-rtr)#int gi0/0
    R1(config-if)#ipv6 eigrp 1
    R1(config-if)#^Z
    R1#show ipv6 eigrp interfaces
    EIGRP-IPv6 Interfaces for AS(1)
                                  Xmit Queue   PeerQ        Mean   Pacing Time   Multicast    Pending
    Interface              Peers  Un/Reliable  Un/Reliable  SRTT   Un/Reliable   Flow Timer   Routes
    Gi0/0                    0        0/0       0/0           0       0/0            0           0
    R1#show ipv6 eigrp neighbors
    EIGRP-IPv6 Neighbors for AS(1)
    


    Введём аналогичные команды на R2, после это EIGRP-соседство устанавливается между двумя маршрутизаторами.

    R1#
    *Mar 21 12:01:13.763: %DUAL-5-NBRCHANGE: EIGRP-IPv6 1: Neighbor FE80::C80E:21FF:FEE4:8 (GigabitEthernet0/0) is up: new adjacency
    R1#show ipv6 eigrp neighbors
    EIGRP-IPv6 Neighbors for AS(1)
    H   Address                 Interface              Hold Uptime   SRTT   RTO  Q  Seq
                                                       (sec)         (ms)       Cnt Num
    0   Link-local address:     Gi0/0                    11 00:00:15   40   240  0  2
        FE80::C80E:21FF:FEE4:8
    


    На каждом из маршрутизаторов создадим интерфейс Loopback1, который будет эмулировать подключённые сети. На R1 интерфейсу Loopback1 назначим IPv6 адрес 2001:db8:1::1/64, на R2 – 2001:db8:2::1/64. Передать информацию о новых сетях в протокол динамической маршрутизации можно двумя способами: включить новый интерфейс в соответствующий протокол, либо выполнить перераспределение маршрутов (redistribute). Единственное, о чём следует помнить во втором случае, — о необходимости указания метрик. Метрика может быть указана либо в явном виде для каждого перераспределения, либо при помощи команды default-metric. Данное действие полностью аналогично IPv4, поэтому подробно останавливаться не будем.
    Вывод с маршрутизатора R1.

    R1#show ipv6 route
    IPv6 Routing Table - default - 6 entries
    Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
           B - BGP, R - RIP, H - NHRP, I1 - ISIS L1
           I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary, D - EIGRP
           EX - EIGRP external, ND - ND Default, NDp - ND Prefix, DCE - Destination
           NDr - Redirect, O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1
           OE2 - OSPF ext 2, ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2, l - LISP
    C   2001:DB8::/64 [0/0]
         via GigabitEthernet0/0, directly connected
    L   2001:DB8::1/128 [0/0]
         via GigabitEthernet0/0, receive
    C   2001:DB8:1::/64 [0/0]
         via Loopback1, directly connected
    L   2001:DB8:1::1/128 [0/0]
         via Loopback1, receive
    EX  2001:DB8:2::/64 [170/2560512]
         via FE80::C80E:21FF:FEE4:8, GigabitEthernet0/0
    L   FF00::/8 [0/0]
         via Null0, receive
    R1#show run int loop 1
    !
    interface Loopback1
     ipv6 address 2001:DB8:1::1/64
     ipv6 eigrp 1
    end
    R1#show run | sec router
    ipv6 router eigrp 1
     eigrp router-id 1.1.1.1
    


    Вывод с маршрутизатора R2.

    R2#show ipv6 route
    IPv6 Routing Table - default - 6 entries
    Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
           B - BGP, R - RIP, H - NHRP, I1 - ISIS L1
           I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary, D - EIGRP
           EX - EIGRP external, ND - ND Default, NDp - ND Prefix, DCE - Destination
           NDr - Redirect, O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1
           OE2 - OSPF ext 2, ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2, l - LISP
    C   2001:DB8::/64 [0/0]
         via GigabitEthernet0/0, directly connected
    L   2001:DB8::2/128 [0/0]
         via GigabitEthernet0/0, receive
    D   2001:DB8:1::/64 [90/130816]
         via FE80::C80D:1EFF:FE28:8, GigabitEthernet0/0
    C   2001:DB8:2::/64 [0/0]
         via Loopback1, directly connected
    L   2001:DB8:2::1/128 [0/0]
         via Loopback1, receive
    L   FF00::/8 [0/0]
         via Null0, receive
    R2#sho run int loop 1
    interface Loopback1
     ipv6 address 2001:DB8:2::1/64
    end
    
    R2#show run | sec router
    ipv6 router eigrp 1
     eigrp router-id 2.2.2.2
     redistribute connected
     default-metric 1000 1 100 100 1500
    


    Если в сети используется протокол BGP, то для управления им придётся воспользоваться несколько иным подходом: в BGP не создаются различные процессы для IPv4 и IPv6. Вместо этого внутри одного «родительского» процесса деление на версии протокола IP производится с помощью команды address-family. Ниже приводится вывод с маршрутизатора R1. Настройка R2 выполнена аналогично.

    R1#show run | sec router bgp
    router bgp 65001
     bgp router-id 1.1.1.1
     bgp log-neighbor-changes
     neighbor 2001:DB8::2 remote-as 65002
     !
     address-family ipv4
      no neighbor 2001:DB8::2 activate
     exit-address-family
     !
     address-family ipv6
      network 2001:DB8:1::/64
      neighbor 2001:DB8::2 activate
     exit-address-family
    !
    R1#show bgp ipv6 unicast summary
    BGP router identifier 1.1.1.1, local AS number 65001
    BGP table version is 3, main routing table version 3
    2 network entries using 336 bytes of memory
    2 path entries using 208 bytes of memory
    2/2 BGP path/bestpath attribute entries using 272 bytes of memory
    1 BGP AS-PATH entries using 24 bytes of memory
    0 BGP route-map cache entries using 0 bytes of memory
    0 BGP filter-list cache entries using 0 bytes of memory
    BGP using 840 total bytes of memory
    BGP activity 2/0 prefixes, 2/0 paths, scan interval 60 secs
    Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
    2001:DB8::2     4        65002      12      12        3    0    0 00:07:34        1
    !
    !
    R1#show bgp ipv6 unicast
    BGP table version is 3, local router ID is 1.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                  r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
                  x best-external, a additional-path, c RIB-compressed,
    Origin codes: i - IGP, e - EGP, ? - incomplete
    RPKI validation codes: V valid, I invalid, N Not found
         Network          Next Hop            Metric LocPrf Weight Path
     *>  2001:DB8:1::/64  ::                       0         32768 i
     *>  2001:DB8:2::/64  2001:DB8::2              0             0 65002 i
    


    На момент написания статьи (конец марта 2014 года) в глобальной таблице маршрутизации (BGP full view или BGP full table) насчитывалось примерно 500000 префиксов для IPv4 и около 17000 записей для IPv6.
    Конфигурирование протокола OSPF для работы в сети IPv6 производится схожим образом. Протокол, который надо включать и настраивать, называется OSPFv3. Он полностью независим от IPv4. Третья версия протокола содержит ряд изменений и дополнений по сравнению с предыдущей реализацией OSPF.

    interface GigabitEthernet0/0
     ipv6 enable
     ipv6 ospf 1 area 0
    router ospfv3 1
     router-id 1.1.1.1
    address-family ipv6 unicast
      redistribute connected
     exit-address-family
    


    Списки доступа

    В списках доступа также есть небольшие изменения. Так, например, установка листа на интерфейс производится командой ipv6 traffic-filter, например, ipv6 traffic-filter TEST in.

    R2#show run | section access
    ipv6 access-list TEST
     deny icmp any any echo-reply
     deny icmp any any echo-request
     permit ipv6 any any
    !
    R2#show ipv6 access-list
    IPv6 access list test
        deny icmp any any  echo-reply sequence 10
        deny icmp any any  echo-request (5 matches) sequence 20
        permit ipv6 any any (28 matches) sequence 30
    interface GigabitEthernet0/0
     ipv6 address 2001:DB8::2/64
     ipv6 eigrp 1
     ipv6 traffic-filter TEST in
    


    После установки листа TEST на интерфейс Gi0/0 в приведённой выше схеме маршрутизатор R2 перестаёт отвечать на эхо-запросы по протоколу ICMP.

    R1#ping 2001:db8::2
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 2001:DB8::2, timeout is 2 seconds:
    AAAAA
    Success rate is 0 percent (0/5)
    
    


    Туннелирование в среде IPv4 и IPv6

    Не менее интересный вопрос связан с работой туннелей, поддерживающих IPv6. Самыми простыми туннелями в среде IPv4 были IPIP (IP-in-IP) и GRE. При использовании GRE с введением IPv6 для администратора практически ничего не меняется, однако поддержки IPv6 в IPIP нет. Вместо IPIP можно использовать IPv6IP. Приятной возможностью GRE является его универсальность, благодаря которой можно переносить протоколы IPv4 и IPv6 как поверх транспортной сети с IPv4, так и поверх сети IPv6. За выбор протокола транспортной сети отвечают ключевые слова ip или ipv6 после команды tunnel mode gre.
    Вернёмся к нашей схеме и настроим между двумя маршрутизаторами туннель GRE так, чтобы поверх него работал протокол IPv4, а сам туннель существовал в существующей сети IPv6. Листинг ниже представляет настройку туннельного интерфейса маршрутизатора R1. Устройство R2 конфигурируется аналогично.

    R1#show run int tunnel 1
    interface Tunnel1
     ip address 192.168.0.1 255.255.255.252
     tunnel source GigabitEthernet0/0
     tunnel mode gre ipv6
     tunnel destination 2001:DB8::2
     tunnel path-mtu-discovery
    end
    R1#ping 192.168.0.2
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
    !!!!!
    Success rate is 100 percent (5/5), round-trip min/avg/max = 48/87/120 ms
    


    На сегодняшний день, скорее всего, администратор столкнётся с противоположной ситуацией: потребуется передавать IPv6 трафик поверх сети IPv4. Конфигурация в этом случае симметрична: настройки IPv4 и IPv6 меняются местами.
    Кроме перечисленных туннелей существует ещё несколько распространённых типов: 6to4, 6in4, 6rd, Teredo, ISATAP, однако их рассмотрение выходит далеко за рамки данного материала. Сосуществование сетей IPv4 и IPv6 может происходить по одному из трёх сценариев: использование разнообразных туннелей, о которых упоминалось выше, в режиме dual stack, при котором всеми устройствами одновременно поддерживаются обе версии протокола IP, либо при помощи трансляций, например, NAT-PT.
    Виртуальные процессы маршрутизации (VRF)
    Ещё одна тема, которой хотелось бы коснуться в рамках беглого рассмотрения IPv6 – VRF. Конфигурирование VRF в многопротокольной среде производится немного иначе – без указания ключевого ip в начале. Здесь также используется подход с address-family, который мы видели при настройки BGP. При создании VRF используется ключевое слово definition.

    R1#conf t
    R1(config)#vrf definition test
    R1(config-vrf)#rd 1:1
    R1(config-vrf)#address-family ?
      ipv4  Address family
      ipv6  Address family
    R1(config-vrf)#address-family ipv6
    R1(config-vrf-af)#?
    R1(config-vrf-af)#int loop 2
    R1(config-if)#vrf forwarding test
    R1(config-if)#^Z
    R1#show vrf
      Name                             Default RD          Protocols   Interfaces
      test                             1:1                 ipv6        Lo2
    


    Добавление протокола маршрутизации в VRF производится также с использованием опции address-family. Добавить в VRF можно не только поименованные процессы, но и пронумерованные.

    R1#show run | sec router
    router eigrp test
    address-family ipv6 unicast vrf test autonomous-system 1
      topology base
      exit-af-topology
      eigrp router-id 1.1.1.1
     exit-address-family
    !
    R1#show run int gi0/0
    interface GigabitEthernet0/0
     vrf forwarding test
     ipv6 address 2001:DB8::1/64
    end
    !
    R1#sho ipv route vrf test
    IPv6 Routing Table - test - 4 entries
    Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
           B - BGP, R - RIP, H - NHRP, I1 - ISIS L1
           I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary, D - EIGRP
           EX - EIGRP external, ND - ND Default, NDp - ND Prefix, DCE - Destination
           NDr - Redirect, O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1
           OE2 - OSPF ext 2, ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2, l - LISP
    C   2001:DB8::/64 [0/0]
         via GigabitEthernet0/0, directly connected
    L   2001:DB8::1/128 [0/0]
         via GigabitEthernet0/0, receive
    D   2001:DB8:2::/64 [90/2570240]
         via FE80::C80E:21FF:FEE4:8, GigabitEthernet0/0
    L   FF00::/8 [0/0]
         via Null0, receive
    !
    R1#show eigrp address-family ipv6 vrf test neighbors
    EIGRP-IPv6 VR(test) Address-Family Neighbors for AS(1)
               VRF()
    H   Address                 Interface              Hold Uptime   SRTT   RTO  Q  Seq
                                                       (sec)         (ms)       Cnt Num
    0   Link-local address:     Gi0/0                    10 00:01:53   56   336  0  3
        FE80::C80E:21FF:FEE4:8
    


    Завершая этот вводный кусочек хочется отметить следующее.

    1. Администраторам стало сложнее запоминать адресацию своих сетей.
    2. Требуется освоиться с длиннющей записью сетей/хостов в IPv6.
    3. Нужно привыкнуть и освоить автоматический поиск и исследование соседей (маршрутизаторов и конечных станций), смириться с отсутствием широковещания.
    4. Наличие канальной информации об узле сразу в IP-адресе. Протокол ARP (или иные) в большинстве случаев более не требуются – вполне достаточно использования EUI-64 для определения хоста.
    5. Не так страшен черт, как его малюют: IP и есть IP – идеологически все очень близко, замена транспорта не существенно влияет на идеологию современных сетей передачи данных.
    6. Использование в IPv6 трансляции сетевых адресов NAT/PAT, довольно ресурсоёмкой операции, в большинстве ситуаций более не требуется.
    7. В сети могут существовать несколько хостов с абсолютно идентичными валидными маршрутизируемыми IPv6 адресами. Это так называемый anycast. Также стоит привыкнуть к наличию на разных интерфейсах маршрутизаторов адресов из одной и той же подсети не маршрутизируемых link-local адресов.
    8. Можно постепенно мигрировать от IPv4 к IPv6, либо поддерживать оба протокола в течение времени, необходимого на глобальный переход к IPv6.
    9. Компания Cisco и другие производители сетевого оборудования уже давно готовы к переходу на IPv6. Дело за администраторами.

    PS Получилось немного громоздко — хотел уложиться в две публикации.

    Еще раз поблагодарю Максима Климанова (www.foxnetwork.ru) за альфа-авторство статьи и совместное развития наших ресурсов — foxnetwork и www.anticisco.ru!

    PPS Кстати, как нынче инвайты выдают? Максим просил, а у меня — нет уже, все раздал…

    Similar posts

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

    More
    Ads

    Comments 7

      +2
      Если в сети используется протокол BGP, то для управления им придётся воспользоваться несколько иным подходом: в BGP не создаются различные процессы для IPv4 и IPv6. Вместо этого внутри одного «родительского» процесса деление на версии протокола IP производится с помощью команды address-family

      Вообще-то сейчас у EIGRP (в named mode) ситуация идентичная. И я не вижу ни единой причины задействовать legacy режим. Более того — есть автоконвертация «на живую», без потери соседств и маршрутной информации.
      После установки листа TEST на интерфейс Gi0/0 в приведённой выше схеме маршрутизатор R2 перестаёт отвечать на эхо-запросы по протоколу ICMP.

      Надо добавить, что в ipv6 ACLях в конце стоит невидимый permit для NS и NA пакетов. Если сделать запись вида «deny icmp any any» в направлении in без исключений выше уровнем, то для IPv4 это в худшем случае сломает PMTUD (ну и до кучи убьет пинги, трассировку и т.д., но это уже мелочи), а вот в IPv6 это полностью сломает связь, причем очень подло — не сразу, чуть позже. Отличный способ прострелить себе ногу для тех, кто привык, что в IPv4 критически важный протокол arp по умолчанию не обрабатывается ACLями.
      Конфигурирование VRF в многопротокольной среде производится немного иначе – без указания ключевого ip в начале.

      Да и для IPv4 это уже давно legacy метод.
      7. В сети могут существовать несколько хостов с абсолютно идентичными валидными маршрутизируемыми IPv6 адресами. Это так называемый anycast.

      А в IPv4 нельзя что ли? Вон DNS издавна так и работает в глобальном масштабе. Яндекс относительно недавно решился сделать такое и для короткоживущих TCP сессий.
      Компания Cisco и другие производители сетевого оборудования уже давно готовы к переходу на IPv6.

      Да вот хрена лысого. Ну-ка поднимите мне LDP на IPv4. Куча другого функционала тоже отсутствует. В общем, на данный момент IPv6 не умеет слишком многое из того, что умеет IPv4.

      Ну и обязательный п.10. Игнорировать существование IPv6 нельзя. Если не пользуетесь — отключайте принудительно в клиентских и серверных ОС. Блокируйте RA и прочее на сетевом оборудовании. Один метко пущенный RA способен положить всю сеть, если администраторы не задумывались о существовании IPv6 и ничего связанное с ним нигде не трогали.
        0
        Полезный и эмоциональный ответ :)

        Да, Вы правы, кое-что в IPv6 еще не реализовано — гладкая склейка с MPLS и некоторые другие технологии. Я так понял Вы это имели ввиду вот тут: «Ну-ка поднимите мне LDP на IPv4» с опечаткой?

        Вот это: «Надо добавить, что в ipv6 ACLях в конце стоит невидимый permit для NS и NA пакетов. Если сделать запись вида «deny icmp any any» в направлении in без исключений выше уровнем» — очень верно, спасибо за дополнение.

        Видно, что Вы сталкиваетесь в работе с тонкостями IPv6. Спасибо, что делитесь!
          0
          Я так понял Вы это имели ввиду вот тут: «Ну-ка поднимите мне LDP на IPv4» с опечаткой?

          Да, конечно, оговорился.
          Видно, что Вы сталкиваетесь в работе с тонкостями IPv6

          Никогда с ним не работал. Разве что в лабе года три назад, когда к CCIE RS готовился, да и то чуть-чуть.
            0
            Если мне не изменяет память, то это не Циска не реализовала LDPv6, а его пока ещё в принципе нету. Но, как говорится, не LDP единым.
            Да, согласен, что всё ещё, возможно, не до конца гладко, но уже многое реализовано и можно использовать. IPv6 поверх MPLS можно с помощью 6PE.
              0
              Так претензия и не к самой циске была. И был где-то хороший список отсутствующих в IPv6 фич. Так что backbone на нем особо не построишь.
          0
          Да что же это такое, тоже промазал.
            0
            о. сдул пыль с хабра? :)

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