NetLab Academy

Сетевые лаборатории в браузере

Войти Начать бесплатно

Теория: IPv6: маршрутизация

Что меняется, когда маршрутизируешь IPv6: форвардинг, который надо включить, next-hop через link-local, OSPFv3 на интерфейсах вместо network-команд и MP-BGP, где соседа надо активировать отдельно. Прочитайте материал, а затем пройдите тест — следующий пункт курса откроется после верных ответов.

Что меняется в маршрутизации, а что нет

Хорошая новость: принципы не меняются вообще. Таблица маршрутизации, самый длинный совпавший префикс, административная дистанция, метрики, области, автономные системы — всё ровно то же, что вы уже знаете. Переучиваться не придётся.

Меняются три вещи, и все три — механические:
• адреса длиннее, а префиксы короче в записи;
next-hop внутри линка почти всегда link-local, а не глобальный адрес;
• у каждого протокола появилась отдельная «половина» под IPv6, и её надо включить явно — сама она не включается.

Последний пункт и есть источник большинства ошибок. Роутер, у которого прекрасно работает IPv4, по IPv6 может не пересылать вообще ничего — и выглядеть при этом абсолютно исправным.

Форвардинг и статические маршруты

Первое, что делают на роутере, — включают пересылку. По умолчанию стоит no ipv6 forwarding: роутер отвечает на свои адреса, пингуется, показывает соседей — и молча выбрасывает чужие пакеты.

ipv6 forwarding
Статический маршрут пишется как обычно:
ipv6 route 2001:db8:20::/64 2001:db8:12::2
А вот с link-local next-hop появляется особенность. Адрес fe80::… сам по себе не уникален — он может быть у соседей на разных интерфейсах одновременно. Поэтому указывать интерфейс обязательно:
ipv6 route 2001:db8:20::/64 eth1 fe80::a8c1:abff:fe67:d751
Практический смысл этого не косметический. Маршрут через глобальный адрес соседа сломается, если сосед сменит адресацию. Маршрут через link-local переживёт и смену префикса, и переезд сети в другой диапазон: link-local у интерфейса не меняется. Поэтому протоколы маршрутизации между собой пользуются именно им.

OSPFv3: что осталось от OSPFv2 и что изменилось

OSPFv3 — это не «OSPF с поддержкой IPv6», а отдельный протокол, хотя логика в нём та же. Осталось без изменений: состояния соседства от Down до Full, выборы DR и BDR, области и правило прилегания к нулевой, расчёт SPF, cost как метрика.

Изменилось следующее:
Включается на интерфейсе, а не командой network. Никаких network … area … — вместо этого ipv6 ospf6 area 0 прямо на порту. Проще и однозначнее: видно, какой порт в какой области, не сопоставляя подсети глазами.
Соседства идут по link-local. Пакеты OSPFv3 отправляются с fe80::… на ff02::5 и ff02::6. Глобальные адреса для соседства не нужны вовсе — протокол поднимется на линке, где вообще нет ни одного глобального адреса.
Router-ID остался 32-битным и записывается в формате IPv4. Это не адрес, а имя: в сети без единого IPv4-адреса его придётся задать руками, иначе протокол не запустится — брать номер будет неоткуда.
Топология отделена от адресов. В OSPFv2 префиксы лежали внутри Router-LSA. В OSPFv3 они вынесены в отдельные LSA, а Router-LSA описывает только связи. Смена адресации в сегменте теперь не заставляет пересчитывать дерево путей.
Аутентификация вынесена из протокола. Своих полей для пароля в OSPFv3 нет — изначально защита возлагалась на IPsec, позже добавили отдельный механизм. В учебном стенде это некритично, но при проектировании реальной сети об этом надо помнить.

И приятная мелочь: на одном линке может работать несколько экземпляров OSPFv3 с разными Instance ID — они друг друга не видят.

Соседства и next-hop: почему в таблице стоит fe80::

Загляните в таблицу маршрутизации работающего OSPFv3 — и увидите, что next-hop у всех выученных маршрутов выглядит так:

O>* 2001:db8:20::/64 [110/20] via fe80::a8c1:abff:fe67:d751, eth1
Не глобальный адрес соседа, а его link-local плюс имя интерфейса. Это не ошибка и не недонастройка, а как раз задуманное поведение: маршрут привязан к соседу по линку, а не к его адресации.

Отсюда два практических вывода.

Первый: не пытайтесь «починить» такой next-hop. Человек, привыкший видеть в таблице понятные адреса, первым делом лезет их исправлять и ломает работающее.

Второй: отладка идёт по интерфейсам, а не по адресам. Вопрос «через кого идёт трафик» в IPv6 звучит как «через какой интерфейс и какого соседа на нём», и отвечает на него show ipv6 ospf6 neighbor, а не таблица адресов.
Одна и та же строка таблицы в двух протоколах — разница только в next-hop
IPv4 · привычная картина next-hop — глобальный адрес
O>*выучен по OSPF
192.168.20.0/24куда
[110/20]дистанция · метрика
via 10.0.12.2адрес соседа
eth1через какой порт
IPv6 · то же самое, но next-hop выглядит пугающе next-hop — link-local плюс порт
O>*выучен по OSPFv3
2001:db8:20::/64куда
[110/20]дистанция · метрика
via fe80::a8c1:abff:fe67:d751link-local соседа
eth1без него адрес не уникален
Что адресует next-hop в IPv4узел в сети
Что адресует next-hop в IPv6соседа на этом линке
Почему нужен интерфейсfe80:: живёт на каждом порту
Что сломается, если «починить»работающая маршрутизация
Адрес fe80:: в таблице — это не недонастройка, а задуманное поведение: маршрут привязан к соседу по линку, а не к его адресации. Поэтому один и тот же link-local может стоять в разных строках, указывая на разных соседей, — различает их имя интерфейса рядом.
Отсюда два практических вывода. Первый: не пытайтесь это исправить — человек, привыкший видеть в таблице понятные адреса, первым делом лезет их менять и ломает работающее. Второй: отладка идёт по интерфейсам, а не по адресам. Вопрос «через кого идёт трафик» здесь звучит как «через какой порт и какого соседа на нём», и отвечает на него список соседей, а не таблица адресов.

Области и внешние маршруты

Здесь всё узнаваемо: области с теми же правилами, что и в OSPFv2. Нулевая область — магистраль, остальные примыкают к ней, ABR стоит на стыке и пересказывает одной области содержимое другой суммарными анонсами. Разрыв магистрали приводит к тем же последствиям.

Типы LSA переименованы и пронумерованы иначе, но смысл сохранён: Router и Network описывают топологию, Inter-Area Prefix — то, что раньше называлось Summary, AS-External — внешние маршруты. Добавились два новых:
Link-LSA — не выходит за пределы линка и переносит link-local адрес роутера и список префиксов сегмента;
Intra-Area Prefix LSA — те самые префиксы, вынесенные из Router-LSA.

Перераспределение работает так же: redistribute static, redistribute connected, типы E1 и E2 с той же разницей — у E1 к метрике прибавляется внутренняя стоимость до ASBR, у E2 нет.

Тупиковые области тоже на месте, но с оговоркой: в IPv6 они встречаются реже. Смысл stub был в экономии памяти и процессора на слабых железках, а сети, которые доросли до IPv6, обычно строятся не на них.

BGP для IPv6: одно семейство адресов, а не второй протокол

Отдельного «BGPv6» не существует. Тот же BGP переносит маршруты любых семейств через расширение MP-BGP (multiprotocol BGP), а IPv6-маршруты живут в семействе ipv6 unicast.

Отсюда главная ловушка, на которой спотыкаются все без исключения: объявить соседа мало, его надо активировать в нужном семействе. По умолчанию сосед активируется только в ipv4 unicast, и IPv6-префиксы через него не поедут:

router bgp 65001
 neighbor 2001:db8:12::2 remote-as 65002
 address-family ipv6 unicast
  neighbor 2001:db8:12::2 activate     # без этой строки маршрутов не будет
  network 2001:db8:11::/64
 exit-address-family
Сессия при этом поднимется и будет числиться в Established — сосед «работает», а префиксов нет. Диагноз ставится по show bgp ipv6 unicast summary: строки соседа там просто нет.

Второе, что стоит знать: сессию можно поднимать поверх любого протокола. Соседство по IPv4 прекрасно переносит IPv6-маршруты и наоборот — важно лишь, чтобы next-hop оказался достижимым. И router-id в BGP тоже остался 32-битным: в сети без IPv4 его задают руками.

Что здесь ломается

Не включён форвардинг. Роутер пингуется, соседства поднимаются, маршруты в таблице есть — а транзитный трафик не идёт. Первое, что стоит проверить, когда «всё настроено, но не работает».

Не задан router-id. В сети без IPv4-адресов OSPFv3 и BGP не запустятся: тридцатидвухбитный идентификатор брать неоткуда.

Сосед BGP не активирован в семействе ipv6 unicast. Сессия Established, префиксов ноль.

OSPFv3 включили только на одном конце линка. Команда интерфейсная, и забыть её на второй стороне легче, чем при network-подходе — там хотя бы подсеть видно целиком.

Заблокирован ICMPv6. Соседства не поднимутся вовсе: OSPFv3 сначала находит соседа средствами NDP, а тот работает поверх ICMPv6.

Разные MTU на концах линка. Как и в OSPFv2, соседство застревает на стадии обмена базами. В IPv6 это вероятнее: заголовок больше, и туннели, где MTU занижен, встречаются чаще.

Правили link-local next-hop. Не ошибка протокола, а попытка исправить нормальное поведение — и почти всегда с потерей работающего маршрута.

Как проверять

show ipv6 ospf6 neighbor — состояние соседств. Как и в OSPFv2: не Full — маршрутов от этого соседа не будет.

show ipv6 ospf6 interface eth1 — область, тип сети, стоимость, роль DR/BDR и — что важно — включён ли протокол на этом порту вообще.

show ipv6 ospf6 database — что знает роутер. По разделам видны типы LSA, включая Link-LSA, которых не было в OSPFv2.

show ipv6 route ospf6 — итог. Next-hop fe80::… — это норма.

show bgp ipv6 unicast summary — соседи именно этого семейства. Нет строки — сосед не активирован, сколько бы он ни числился Established в общем выводе.

show bgp ipv6 unicast — таблица префиксов IPv6 с атрибутами.

И общая привычка: в dual-stack проверяют оба стека по отдельности. «Пинг проходит» без уточнения, каким протоколом, в IPv6-сети не значит ничего.

Команды — шпаргалка

# базовое
ipv6 forwarding                           # разрешить пересылку IPv6-пакетов
ipv6 route 2001:db8:20::/64 2001:db8:12::2
                                          # два аргумента: сеть назначения
                                          #   и адрес соседа
ipv6 route 2001:db8:20::/64 eth1 fe80::1  # если сосед указан по link-local, между
                                          #   сетью и адресом добавляется имя порта:
                                          #   иначе непонятно, в каком он сегменте

# OSPFv3
router ospf6                              # отдельный процесс: OSPFv2 для IPv4 и
                                          #   OSPFv3 для IPv6 живут независимо
 ospf6 router-id 10.10.10.1               # 32 бита в виде адреса. В сети без IPv4
                                          #   взять его неоткуда — задают руками
 redistribute static
exit
interface eth1
 ipv6 ospf6 area 0                        # номер зоны. В OSPFv3 протокол включают
                                          #   на самом порту, а не через network
 ipv6 ospf6 cost 100                      # метрика линка: меньше — привлекательнее
 ipv6 ospf6 network point-to-point        # тип сети: без выборов DR/BDR
 ipv6 ospf6 passive                       # не слать Hello в сторону хостов

# BGP для IPv6
router bgp 65001                          # номер своей AS
 bgp router-id 10.10.10.1                 # идентификатор роутера, 32 бита
 no bgp ebgp-requires-policy              # no снимает требование политики,
                                          #   иначе соседу не уйдёт ни один маршрут
 neighbor 2001:db8:12::2 remote-as 65002  # адрес соседа и номер ЕГО AS
 address-family ipv6 unicast              # семейство адресов: дальше всё про IPv6
  neighbor 2001:db8:12::2 activate        # без активации в этом семействе
                                          #   префиксы не поедут
  network 2001:db8:11::/64                # своя сеть в анонс
 exit-address-family

# проверка
show ipv6 ospf6 neighbor
show ipv6 ospf6 interface eth1            # имя порта сужает вывод до него
show ipv6 ospf6 database
show ipv6 route ospf6                     # только маршруты от OSPFv3
show bgp ipv6 unicast summary             # состояние сессий в этом семействе
show bgp ipv6 unicast                     # сама таблица префиксов IPv6
Контрольные вопросы

Дальше — лабораторная работа «OSPFv3 в кольце»

Для неё нужен аккаунт: стенд поднимается персонально под вас — свои роутеры, свои конфиги, никто в них не мешает. Регистрация — почта и пароль.

Теория прочитана. Дальше — руками.

Личный стенд из настоящих роутеров разворачивается за секунды. Платформа проверяет не ответы на тесты, а состояние вашей сети: поднялись ли соседства, сошлись ли маршруты, ходит ли ping. Рядом — AI-наставник, который видит ваши конфиги и ведёт к решению, не выдавая готовое.

Начать бесплатно → бета открыта, доступ бесплатный