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

Лабораторная работа: интеграция BNG в ядро MPLS с изоляцией абонентов в VRF и внедрение CGNAT (Carrier-Grade NAT: адреса по RFC 6598, требования к CGN по RFC 6888). Из-за дефицита публичных IPv4 оператор выдаёт абонентам адреса из Shared Address Space 100.64.0.0/10 (RFC 6598; это не RFC 1918, и его нельзя отдавать клиенту как LAN-подсеть). Сессии PPPoE терминируются на BNG в VRF SUBS, служебная сеть оператора достигается через L3VPN. Интернет-трафик из VRF направляется в NAT444 (NAT на CPE плюс CGN): тысячи абонентов транслируются в небольшой пул публичных адресов, а число портов на абонента ограничено (Port Block Allocation, PBA: блок 512-2048 портов, в лаборатории 1024). Это защищает пул от исчерпания одним клиентом, а PBA логирует только выдачу и освобождение блока вместо каждой сессии (IPFIX/syslog): на этом строится сопоставление «публичный IP:порт и время - абонент», которого требует законодательство многих стран. Пул публичных адресов суммируется и объявляется upstream в глобальной таблице (eBGP), иначе ответы из Интернета не вернутся.

Что собирает лабораторная

Лаборатория замыкает модуль: PE1 (10.255.0.1) работает как BNG, терминирует PPPoE-абонентов в VRF SUBS (RD 65000:300, RT 65000:300), авторизует их по RADIUS (10.255.0.50), делает CGNAT (NAT444) и выпускает трафик в Интернет через глобальную таблицу (uplink 172.16.40.0/30, upstream 172.16.40.2, AS 64496). Служебная сеть оператора 10.90.0.0/24 (OSS: DNS, портал, DHCP) стоит за PE2 (10.255.0.2) в той же VRF SUBS и достигается через L3VPN с RR 10.255.0.100. Поэтому на одном узле сходятся три плоскости: сессии доступа, VPN-сервисы и публичный Интернет.

Адресация и RFC 6598

Для абонентов выбрана подсеть 100.64.0.0/10 (Shared Address Space, RFC 6598): она не должна пересекаться ни с публичными адресами, ни с RFC 1918 у клиентов, и поэтому её нельзя выдавать на CPE как LAN. Лабораторные значения: Loopback10 в VRF SUBS 100.64.0.1/32 (unnumbered-адрес шаблона PPP), пул сессий 100.64.1.2-100.64.1.254, публичный пул NAT 198.51.100.0/28 (адреса .1-.14; документационная подсеть RFC 5737 стоит вместо реального блока). Подсеть пула суммируется (Null0 или discard) и объявляется upstream, иначе ответы из Интернета не вернутся.

NAT444, EIM и отношения с приложениями

NAT444 означает два NAT подряд (IPv4 CPE 192.168/16 -> 100.64/10 -> публичный). RFC 6888 (требования к CGN) и RFC 4787/5382/5508 (поведение UDP/TCP/ICMP) требуют: endpoint-independent mapping (EIM) - один внутренний адрес и порт отображаются в один внешний независимо от направления, необходимо для P2P, игр и WebRTC; endpoint-independent filtering (EIF) по желанию оператора; hairpinning - соединение абонента на публичный адрес другого абонента, возвращаемое внутри CGN; ограничение числа портов на абонента, чтобы один клиент с торрентом не исчерпал пул. ALG (FTP, SIP, PPTP) на CGN усложняют работу и часто отключаются. UDP-таймауты (например, 30-120 с для UDP, 2 ч 4 мин для установленного TCP, 4 мин для half-open) задают нагрузку на таблицу сессий.

Ёмкость и port block allocation

Пригодных портов на один публичный IP около 64 512 (1024-65535). Если блок на абонента равен 1024 портам, на один IP приходится 63 абонента, а на пул из 14 адресов - около 882 абонентов; соотношение 1:10-1:60 типично для операторов. Динамический NAT без блоков создаёт запись логов на каждую сессию: сотни миллионов строк в сутки. Port Block Allocation (PBA) выдаёт абоненту блок (512-2048 портов) и логирует только выдачу и освобождение блока; Deterministic NAT (RFC 7422) вычисляет внешний IP и диапазон портов из внутреннего адреса алгоритмом, поэтому логирование по сути не требуется. Платформы: Junos MX с MS-MPC (secured-port-block-allocation), у Cisco IOS-XE расширенные режимы CGN зависят от платформы, а у RouterOS (src-nat/masquerade) блоков портов нет, поэтому она подходит только для небольшого масштаба.

Логирование и законный перехват

Сопоставление "публичный IP:порт и время - абонент" - юридическое требование во многих странах (хранение месяцы). Механизмы: syslog (на каждое событие, объёмно), NetFlow v9/IPFIX с NAT-полями (postNATSourceIPv4Address 225, postNAPTSourceTransportPort 227, natEvent 230), а для PBA/Deterministic - логирование блоков или отсутствие логов. Время на NAS и логгерах должно быть синхронизировано (NTP), иначе сопоставление ломается. Дополнительно логируется привязка "логин - внутренний адрес" из RADIUS Accounting.

Выход в MPLS и маршрутизация

Абонентская VRF SUBS экспортирует /32 сессий (redistribute connected) и импортирует маршрут служебной сети: OSS 10.90.0.0/24 доступен всем сессиям через L3VPN (метки: транспортная от LDP/SR + VPN-метка). Интернет-путь идёт мимо L3VPN: ip route vrf SUBS 0.0.0.0 ... global (Cisco) или next-hop сервисного интерфейса (Junos) направляет default в NAT, а из NAT пакет с публичным адресом выходит в глобальную таблицу. Транзит публичных адресов через MPLS-ядро нужен только если NAT вынесен на другой PE (централизованный CGN): тогда VRF SUBS должна содержать default на PE2, а возвратный маршрут пула анонсироваться обратно. Размещение NAT на BNG снижает транзит, но привязывает ёмкость NAT к BNG.

IPv6 как способ уменьшить CGNAT

Dual-stack через IPv6CP/SLAAC и DHCPv6-PD (RFC 8415) выводит IPv6-трафик (30-60% у крупных сервисов) в обход CGNAT. Если IPv4 в ядре не нужен, применяют DS-Lite (RFC 6333: IPv4-in-IPv6 туннель до AFTR, где NAT44), 464XLAT (RFC 6877: CLAT на CPE + PLAT на NAT64) или NAT64/DNS64 (RFC 6146/6147). BNG в этом случае терминирует IPv6-сессию, а IPv4-плоскость обслуживает AFTR/PLAT.

Порядок проверки и сбои

Проверяйте цепочку по звеньям: PPPoE поднят и Accept от RADIUS получен, адрес из 100.64.1.0/24 в VRF SUBS, default ведёт в NAT, NAT создаёт трансляцию с публичным адресом из пула, ответ возвращается (пул объявлен upstream), логи выдачи портов доходят до коллектора, служебная сеть 10.90.0.0/24 видна через L3VPN.

  1. Нет ip nat inside/outside или не тот VRF в правиле: трансляций нет.
  2. Нет маршрута пула у upstream: SYN уходит, ответ - нет.
  3. Лимит записей на хост занижен: один абонент блокируется при обычной работе браузера.
  4. Пул исчерпан (14 адресов x 63 блока): новые сессии отклоняются.
  5. Не включено логирование: нарушено требование перехвата.
  6. MTU: PPPoE 1492 + NAT-туннель DS-Lite дают ещё меньше, нужен MSS clamping.

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

text
+----------------------+   Shared Space 100.64.0.0/10  +---------------------+
| Subscriber (VRF SUBS)| ============================> |  BNG + CGNAT        |
| IP: 100.64.1.10      |   PBA: 1024-port block        | Pool: 198.51.100.0/28|
| src port: any        | <============================ | (global table)      |
+----------------------+                               +---------------------+

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

text
Carrier-Grade NAT (CGNAT / NAT444) Translation:
1. Subscriber session in VRF SUBS: 100.64.1.10:51234 (RFC 6598 space).
2. Default route in VRF SUBS sends the packet to the CGN function (service
   blade or inline NAT engine).
3. CGN picks a public IP from 198.51.100.0/28 and allocates a port block
   (e.g. 1024 ports) to this subscriber.
4. Source is translated to 198.51.100.x:<port from the block> and the
   packet leaves through the global table toward the upstream.
5. Only the block allocation/release is logged (IPFIX/syslog) to map
   public IP:port and time back to the subscriber.
6. The public pool is summarized and advertised to the upstream, otherwise
   return traffic never comes back.

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

Режим CGNATМеханизм выделения портовПреимуществаЛогирование (Syslog/IPFIX)
Dynamic NAT44 (пул)Порт из общего пула на каждую сессиюМаксимальная плотность упаковки абонентовЗапись на каждую сессию: сотни миллионов строк в сутки
Port Block Allocation (PBA)Абоненту выдаётся блок 512-2048 портовПредсказуемый лимит на клиента, защита пула от одного торрент-клиентаЛогируются только выдача и освобождение блока: объём логов падает на порядки
Deterministic NAT (RFC 7422)Внешний IP и диапазон портов вычисляются алгоритмом из внутреннего адресаНет динамического учёта блоков, поведение предсказуемоПо сути не требуется: достаточно хранить алгоритм и его параметры с датами изменений

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

В реальных сетях оператора 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
ip nat pool PUB-POOL 198.51.100.1 198.51.100.14 prefix-length 28
ip access-list standard CGN-ACL
 permit 100.64.0.0 0.63.255.255
ip nat inside source list CGN-ACL pool PUB-POOL vrf SUBS overload
ip nat translation max-entries all-host 2048
ip nat log translations syslog
interface Virtual-Template1
 ip nat inside
interface GigabitEthernet4
 description uplink-to-internet-gw
 ip address 172.16.40.1 255.255.255.252
 ip nat outside
ip route vrf SUBS 0.0.0.0 0.0.0.0 172.16.40.2 global
ip route 198.51.100.0 255.255.255.240 Null0
router bgp 65000
 address-family ipv4
  network 198.51.100.0 mask 255.255.255.240