IPv6 в Cisco или будущее уже рядом (Часть 1)
Протокол 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-адреса. На рисунках ниже схематично показана работа обсуждаемого алгоритма.
Сравните указанные выше 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-протокола в данной сети. Описанный процесс представлен на рисунке ниже.
Обнаружение маршрутизатора, подключённого к сегменту локальной сети, используется для получения узлом адреса IPv6 с помощью процедуры stateless address autoconfiguration (SLAAC), которую ещё называют Stateless DHCP.
______________
UPD 5/05/14: Как верно заметил коллега в комментарии, следует различать SLAAC и Stateless DHCP. В нашем с Максимом тексте пропущено важно е слово «ОШИБОЧНО». Помните, как в учебнике по философии говорилось, что нельзя выдирать цитату из контекста, а то получится «Было бы ошибкой думать, что (цитата)» 🙂
Итого, верно было бы написать: «stateless address autoconfiguration (SLAAC), которую в некоторой литературе ОШИБОЧНО называют Stateless DHCP.»
Приношу свои извинения за недосмотр и введение в заблуждение
______________
(продолжение в виде маршрутизации, туннелирования и VRF — здесь).
Статья написана Максимом Климановым (foxnetwork.ru, я — соавтор), который попросил меня опубликовать ее для широкого круга читателей.