Теоретические основы и архитектура

Лабораторная: перенос IPv6 через IPv4 MPLS-ядро с помощью 6PE и 6VPE и проверка того же решения на стыке двух AS. Dual-stack нужен только на PE, P-маршрутизаторы IPv6 не знают: 1. 6PE (RFC 4798) переносит глобальный IPv6. PE по iBGP между IPv4-loopback-ами обмениваются семейством IPv6 labeled unicast (AFI 2 / SAFI 4); next hop - IPv4-mapped адрес ::FFFF:IPv4_PE, метка привязана к префиксу. P коммутируют по внешней транспортной метке. 2. 6VPE (RFC 4659) - то же для VRF: семейство VPNv6 (AFI 2 / SAFI 128), 192-битные префиксы (RD 64 бита + IPv6 128 бит), стек [транспорт | VPN-метка]. 3. Inter-AS: варианты A, B и C работают и для IPv6; в Option B между ASBR идёт VPNv6, в Option C - IPv4 BGP-LU для loopback-ов и VPNv6 между RR.

Задача: IPv6 через ядро, которое знает только IPv4

У оператора AS 65000 ядро (P1 10.255.0.11, RR 10.255.0.100) настроено под IPv4 MPLS: IGP и LDP на IPv4-адресах loopback. Нужно перевозить IPv6 абонентов, не включая IPv6 на P-роутерах. Решение - два механизма, в которых IPv6-пакет едет внутри LSP до IPv4-loopback удалённого PE; dual-stack нужен только на PE.

6PE (RFC 4798): глобальный IPv6 поверх IPv4 LSP

  • Сигнализация: iBGP-сеанс между IPv4-адресами loopback (PE1 10.255.0.1 - RR 10.255.0.100) несёт семейство IPv6 с метками: AFI 2 / SAFI 4 (labeled unicast, RFC 8277). NLRI = IPv6-префикс + метка. На Cisco - address-family ipv6 + neighbor ... send-label, на Huawei - ipv6-family unicast + label-route-capability, на Junos - family inet6 labeled-unicast explicit-null.
  • Next-hop: 16-байтный IPv4-mapped адрес ::FFFF:10.255.0.2, то есть IPv4-адрес loopback удалённого PE, вложенный в IPv6. Его формирует сам BGP из адреса, с которого ведётся IPv4-сеанс (update-source), поэтому сеанс должен быть с Loopback0: адрес next-hop должен совпасть с /32, для которого есть LDP-метка.
  • Пересылка: PE1 ищет 2001:db8:2::/64, находит next-hop ::FFFF:10.255.0.2, разрешает его в IPv4 LSP до 10.255.0.2/32 и ставит стек [транспортная LDP | IPv6-метка | IPv6]. P-роутеры коммутируют по верхней метке и не открывают IPv6-заголовок.
  • Explicit-null: если PE2 анонсировал бы для IPv6-префикса implicit-null, предпоследний узел снял бы последнюю метку и отдал PE2 пакет с EtherType MPLS, но без метки; поэтому используют реальную метку на префикс (Cisco) или IPv6 explicit-null (метка 2; Junos explicit-null) - у PE2 остаётся метка, по которой он понимает, что внутри IPv6.

6VPE (RFC 4659): IPv6 в VRF

6VPE - это L3VPN для IPv6: те же VRF, RD/RT и метки VPN, но семейство VPNv6 (AFI 2 / SAFI 128). NLRI = RD (8 байт) + IPv6-префикс (16 байт); next-hop - 24 байта (RD 0 + ::FFFF:IPv4). Стек [транспортная LDP | VPN-метка | IPv6]. На Cisco VRF получает address-family ipv6 (vrf definition A-V6), на Huawei ipv6-family в ip vpn-instance, на Junos family inet6 на интерфейсе и family inet6-vpn unicast в BGP. Один VRF может нести и IPv4, и IPv6 с общим RD и разными RT на семейство.

6PE6VPE
Назначениеглобальный IPv6 / Internetизолированные клиентские IPv6 L3VPN
Семейство BGPIPv6 labeled unicast (2/4)VPNv6 (2/128)
RD / RTнетесть
Метка из BGPда (IPv6-метка на префикс)да (VPN-метка)
Что нужно на PIPv4 MPLSIPv4 MPLS
Next-hop::FFFF:IPv4::FFFF:IPv4 с RD 0

Inter-AS для IPv6

Три варианта из предыдущих уроков работают и для IPv6:

  • Option A: на ASBR отдельные IPv6-подинтерфейсы и eBGP IPv6 внутри VRF (address-family ipv6 vrf); меток на стыке нет.
  • Option B: ASBR1 10.1.0.1 (AS 65000) и ASBR2 10.1.0.2 (AS 65001) обмениваются VPNv6 по тому же IPv4-eBGP-сеансу, что и VPNv4 (address-family vpnv6, neighbor ... activate); ASBR ставит next-hop-self (IPv4-mapped адрес своего loopback), выделяет метку и делает swap. Для ASBR без VRF нужен тот же механизм удержания чужих RT (no bgp default route-target filter, undo policy vpn-target, Junos keep all).
  • Option C: ASBR обмениваются только IPv4-loopback PE/RR с метками (BGP-LU IPv4), а VPNv6 идёт multihop-сеансом между RR с сохранением next-hop. Так как next-hop - ::FFFF: адрес удалённого PE, он разрешается в тот же межоператорский IPv4 LSP: для IPv6 не нужно отдельной транспортной сигнализации.

Ловушки, специфичные для IPv6

  • ICMPv6 и traceroute: P-роутер без IPv6 не умеет отправлять ICMPv6 Time Exceeded или Packet Too Big; сообщение уезжает по LSP до egress PE и возвращается оттуда. На практике traceroute IPv6 через 6PE показывает звёздочки или большую задержку на P-хопах, а скрыть ядро можно отключением копирования TTL.
  • Path MTU: из-за отсутствия ICMPv6 Packet Too Big от P-роутеров проблема MTU в ядре превращается в чёрную дыру. MTU ядра должен быть не меньше MTU на PE + 4 байта метки на уровень (8 байт в 6PE/6VPE), а минимальный IPv6 MTU 1280 должен проходить без фрагментации.
  • Next-hop: если с RR сеанс ведётся не с loopback, next-hop становится адресом интерфейса; LDP-метки для него нет, 6PE ломается.
  • RR должен поддерживать семейства: на RR нужны ipv6 labeled-unicast и vpnv6 с route-reflector-client; без них PE видят друг друга по IPv4, но не получают IPv6-маршрутов.
  • PE-CE: IPv6 PE-CE - отдельные соседства (eBGP по IPv6 link-local или глобальным адресам, статика); ipv6 enable на интерфейсе и ipv6 unicast-routing обязательны.

Схема архитектуры и топология

text
+---------------------+      IPv4-Only MPLS Core Backbone      +---------------------+
|      6PE / 6VPE     | =====================================> |      6PE / 6VPE     |
| Ingress: IPv6 Native| [Outer: IPv4 LDP | Inner: IPv6 Label]  | Egress: IPv6 Native |
| Encapsulates to IPv4| (No IPv6 required on Core P routers!)  | Decapsulates to IPv6|
+---------------------+                                        +---------------------+

Схема прохождения трафика и стек меток

text
6PE / 6VPE Packet Processing:
1. Ingress PE receives native IPv6 packet (2001:db8:1::1 -> 2001:db8:2::1).
2. Look up BGP Next-Hop (IPv4-mapped IPv6 address ::FFFF:10.255.0.2).
3. Push Inner Label: Allocated by BGP for IPv6 prefix / VRF.
4. Push Outer Label: Standard IPv4 LDP / SR transport label toward 10.255.0.2.
5. Core P routers switch packet using standard IPv4 transport labels. Core knows NOTHING about IPv6!

Таблица состояний и параметров

Архитектура перехода на IPv66PE (IPv6 Provider Edge)6VPE (IPv6 VPN Provider Edge)
Целевая услугаГлобальная IPv6-связностьИзолированные IPv6 L3VPN клиентов
Семейство BGPAFI 2 (IPv6), SAFI 4 (labeled unicast)AFI 2 (IPv6), SAFI 128 (VPNv6)
Требования к P-маршрутизаторамТолько IPv4 MPLS-транспорт (LDP или SR)Только IPv4 MPLS-транспорт (LDP или SR)
Разделение клиентовНет (глобальная таблица)64-битный Route Distinguisher (RD) и RT
Inter-ASМетки на next hop через IPv4 BGP-LUOption A, B (VPNv6 между ASBR) или C (VPNv6 между RR)

Архитектурная модель и принцип работы

В реальных сетях оператора MPLS объединяет оборудование различных производителей. Ниже представлены практические примеры конфигурации и вывода команд Data Plane / Control Plane для четырёх платформ: Cisco IOS-XE/XR, Huawei VRP, Juniper Junos и MikroTik RouterOS v7. Обратите внимание на различия в синтаксисе и механизмах распределения меток.

Практическая конфигурация (Cisco, Huawei, Juniper, MikroTik)

Cisco (IOS-XE/XR)

text
ipv6 unicast-routing
interface GigabitEthernet2
 description CE-global-IPv6
 ipv6 address 2001:DB8:1::1/64
router bgp 65000
 neighbor 10.255.0.100 remote-as 65000
 neighbor 10.255.0.100 update-source Loopback0
 address-family ipv6
  network 2001:DB8:1::/64
  neighbor 10.255.0.100 activate
  neighbor 10.255.0.100 send-label
 exit-address-family

Минимальный 6PE на PE1: ipv6 unicast-routing включает IPv6-маршрутизацию, интерфейс к CE получает глобальный IPv6-адрес. Сеанс iBGP к RR остаётся IPv4 и идёт с Loopback0 - от этого адреса строится next-hop ::FFFF:10.255.0.1. В address-family ipv6 префикс объявляется командой network, а send-label включает IPv6 labeled unicast (AFI 2 / SAFI 4): с каждым IPv6-префиксом передаётся метка. P-маршрутизаторам IPv6 не нужен.

Huawei (VRP)

text
ipv6
interface GigabitEthernet0/0/2
 ipv6 enable
 ipv6 address 2001:DB8:1::1/64
bgp 65000
 peer 10.255.0.100 as-number 65000
 peer 10.255.0.100 connect-interface LoopBack0
 ipv6-family unicast
  network 2001:DB8:1:: 64
  peer 10.255.0.100 enable
  peer 10.255.0.100 label-route-capability