Теория: 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 и что изменилось
Изменилось следующее:
• Включается на интерфейсе, а не командой 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::
O>* 2001:db8:20::/64 [110/20] via fe80::a8c1:abff:fe67:d751, eth1Не глобальный адрес соседа, а его link-local плюс имя интерфейса. Это не ошибка и не недонастройка, а как раз задуманное поведение: маршрут привязан к соседу по линку, а не к его адресации.
Отсюда два практических вывода.
Первый: не пытайтесь «починить» такой next-hop. Человек, привыкший видеть в таблице понятные адреса, первым делом лезет их исправлять и ломает работающее.
Второй: отладка идёт по интерфейсам, а не по адресам. Вопрос «через кого идёт трафик» в IPv6 звучит как «через какой интерфейс и какого соседа на нём», и отвечает на него
show ipv6 ospf6 neighbor, а не таблица адресов.fe80:: в таблице — это не недонастройка, а задуманное
поведение: маршрут привязан к соседу по линку, а не к его адресации. Поэтому один и
тот же link-local может стоять в разных строках, указывая на разных соседей, — различает их
имя интерфейса рядом.Области и внешние маршруты
Типы 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: одно семейство адресов, а не второй протокол
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-наставник, который видит ваши конфиги и ведёт к решению, не выдавая готовое.