Конфигурирование Juniper BRAS для IPoE клиентов с использованием Dual Stack и NDRA-PD
22 Aug 2020 - kmisak
Share on:Конфигурирование Juniper BRAS для IPoE клиентов с использованием Dual Stack и NDRA-PD
Вместо предисловия
IPv6 продолжает расширять свое присутствие, рано или поздно сетевым инженерам интернет-провайдеров придется озаботиться его конфигурированием на оборудовании. Статья описывает опыт внедрения на большой абонентской базе, подключенной по GPON 1.
Технологии и принятые решения:
Выделение /48 префикса на клиента. Учитывались рекомендации RIPE-690 2, при исопльзовании IPv6 первично должно быть удобство администрирования, а не экономия адресного пространства.
Выделение /32 на один BRAS 3, для начала. Используется Juniper MX480, официально поддерживающий до 256.000 Dual Stack 4 пользователей. Адреса выделяются порциями по /32, это 65.536 пользователей. RIPE NCC 22 по умолчанию выделяет /32 для LIR 23, но можно попросить без особых обоснований и /29, это 16 x /32.
Стратегия выделения адресов:
- Блоки адресов для инфраструктуры резервируются с начала выделенного адресного пространства;
- Блоки адресов для клиентов резервируются с конца выделенного адресного пространства;
-
Если клиенту выделяется блок какого-либо размера, рядом резервируется дополнительный блок такого же размера, если клиенту в будущем понадобятся дополнительные адреса. Это удобно и с точки зрения агрегации, два меньших блока легко можно агрегировать в один, при этом адресация клиента не будет перемещаться по IP plan.
На момент написания статьи используемая на BRAS 3 версия Junos® OS 17.3R3-S3 5.
Внимание: Настоятельно рекомендуется версия с поддержкой dual-stack-group 6 (начиная с Junos® OS 17.3R1 7), иначе IPv4 и IPv6 сессии каждого клиента будут идентифицированы отдельно. Это приведёт к излишним сложностям как на стороне BSS 8, так и с точки зрения использования ресурсов, дополнительное удваивается требуемое количество лицензий.
DHCPv6 IA_NA, DHCPv6 Prefix Delegation
Изначально была выбрана схема доступа DHCPv6 IA_NA and DHCPv6 Prefix Delegation 9, когда адрес WAN 10 интерфейса CPE 11 и выделяемый клиенту префикс раздаются DHCP сервером:
Junos® OS конфигурация
Конфигурация BRAS 3 с использованием DHCPv6 IA_NA and DHCPv6 Prefix Delegation 9. Изменены имена, адреса, пароли замаскированы.
Блок общих настроек
groups {
arp-policer-64k {
# По умолчанию на каждом интерфейсе полисится ARP трафик, при большом
# количестве клиентов количество записей необходимо увеличить
interfaces {
<*> {
unit <*> {
family inet {
policer {
arp arp-64k;
}
}
}
}
}
}
}
system {
configuration-database {
max-db-size 314572800;
}
dynamic-profile-options {
versioning;
}
}
Определена группа для использования ARP полисера на интерфейсе в сторону клиентов, так как полисер по умолчанию слишком строг для даже небольшого количества клиентов. Подробная статья про особенности работы ARP в Junos® OS 12.
В этом же блоке задается размер базы конфигурации и включается версионирование динамических профилей, большое подробностей об этом можно найти в документации Versioning for Dynamic Profiles 13.
Конфигурация сервисов DHCPv4, DHCPv6 и Dual Stack группы 6, конфигурация процесса управления клиентами. Dual Stack группы 6 удобны для выноса общих настроек в отдельный блок, создавая более читаемую конфигурацию:
system {
dhcp-local-server {
dhcpv6 {
group DS_v6 {
overrides {
# Pool делегированных адресов
delegated-pool v6-prefix-delegation;
# Общая часть конфигурации IPv4 и IPv6 в Dual Stack группе
dual-stack DS;
}
interface ae1.106;
}
}
pool-match-order {
ip-address-first;
}
group DHCPv4 {
overrides {
# Общая часть конфигурации IPv4 и IPv6 в Dual Stack группе
dual-stack DS;
}
interface ae1.106;
}
dual-stack-group DS {
authentication {
password xxxxx;
username-include {
# В качестве имени пользователя используется MAC адрес
mac-address;
}
}
dynamic-profile user-profile-ds;
classification-key {
mac-address;
}
# Если клиент не авторизовался для IPv4,
# IPv6 сессия тоже считается неавторизованной
protocol-master inet;
}
}
subscriber-management {
gres-route-flush-delay;
enforce-strict-scale-limit-license;
enable;
}
}
processes {
routing failover other-routing-engine;
dhcp-service {
failover other-routing-engine;
}
}
Динамический профиль:
dynamic-profiles {
user-profile-ds {
routing-instances {
"$junos-routing-instance" {
interface "$junos-interface-name";
}
}
interfaces {
demux0 {
unit "$junos-interface-unit" {
no-traps;
# Proxy ARP для возможности клиентским CPE обнаруживать друг друга,
# OLT по умолчанию изолируют клиентов друг от друга даже в пределах одного VLAN
proxy-arp;
demux-options {
underlying-interface "$junos-underlying-interface";
}
# Если используются агрегированные интерфейсы, это помогает относить каждого клиента
# к одному их интерфейсов агрегата, иначе полисеры буду работать неправильно
targeted-distribution;
family inet {
rpf-check fail-filter RPF-ALLOW-DHCP;
demux-source {
$junos-subscriber-ip-address;
}
unnumbered-address "$junos-loopback-interface";
}
family inet6 {
rpf-check fail-filter RPF-ALLOW-DHCPv6;
demux-source {
"$junos-subscriber-ipv6-address";
}
unnumbered-address "$junos-loopback-interface";
}
}
}
}
protocols {
router-advertisement {
interface "$junos-interface-name" {
# Использование DHCPv6 для получения конфигурации адреса
managed-configuration;
other-stateful-configuration;
}
}
}
}
}
Конфигурация интерфейсов:
interfaces {
ae1 {
description ->AGG;
flexible-vlan-tagging;
mtu 9192;
encapsulation flexible-ethernet-services;
unit 106 {
# См. описание группы
apply-groups arp-policer-64k;
description GPON;
demux-source [ inet inet6 ];
vlan-id 106;
family inet {
# Борьба со спуфингом адресов
rpf-check fail-filter RPF-ALLOW-DHCP;
unnumbered-address lo0.0 preferred-source-address 192.0.2.1;
}
family inet6 {
unnumbered-address lo0.0 preferred-source-address 2001:2:1:a::1;
}
}
}
lo0 {
unit 0 {
apply-groups protect-re-group;
family inet {
address 192.0.2.1/32;
}
family inet6 {
address 2001:2:1:a::1/128;
}
}
}
}
Можно отметить включение RPF Check 14 на интерфейсах в сторону клиентов. Механизм RPF Check 14 рекомендован MANRS 15 как вклад каждого провайдера в борьбу со спуфингом адресов, ботнетами и паразитным трафиком.
Конфигурация фильтров:
firewall {
filter RPF-ALLOW-DHCP {
term ALLOW-DHCP-BOOTP {
from {
destination-port dhcp;
}
then accept;
}
term DISCARD-ALL {
then {
discard;
}
}
}
family inet6 {
filter RPF-ALLOW-DHCPv6 {
term ALLOW-DHCP-INET6 {
from {
next-header udp;
source-port [ 546 547 ];
destination-port [ 546 547 ];
}
then accept;
}
term ALLOW-DHCP-ICMP6 {
from {
next-header icmp6;
icmp-type [ router-solicit neighbor-solicit neighbor-advertisement ];
}
then accept;
}
term DISCARD-ALL {
then discard;
}
}
}
policer arp-64k {
# При каждом назначении на интерфейс создаётся новый экземпляр полисера,
# иначе будет использоваться один полисер на все интерфейсы,
# соответственно и резаться будут все интерфейсы суммарно в 64 Кбит/с
filter-specific;
# Выделяем ARP 64 Кбит/с, разрешаем всплески до 8 КБайт
if-exceeding {
bandwidth-limit 64k;
burst-size-limit 8k;
}
then discard;
}
}
Фильтр позволяет пакетам DHCPv4 и DHCPv6 в качестве исключения обходить этот механизм, в противном случае клиенты не получат адресов. Также описан ARP полисер.
Конфигурация профилей доступа и пулов адресов:
access-profile access;
access {
profile access {
# При неработосопособности RADIUS сервера разрешить клиентам работать без авторизации
authentication-order [ radius none ];
radius {
authentication-server 198.51.100.2;
accounting-server 198.51.100.2;
options {
coa-dynamic-variable-validation;
}
}
radius-server {
198.51.100.2 {
port 1812;
accounting-port 1813;
secret "xxxxxxxxxxxxxxxxxxxx";
retry 3;
}
}
accounting {
order radius;
accounting-stop-on-failure;
accounting-stop-on-access-deny;
immediate-update;
coa-immediate-update;
update-interval 10;
statistics time;
send-acct-status-on-config-change;
}
service {
accounting-order activation-protocol;
}
}
profile auth_none {
authentication-order none;
}
address-assignment {
pool GPON {
# Когда закончатся адреса в пуле GPON,
# начать использовать пул GPON2
link GPON2;
family inet {
network 10.2.0.0/19;
range R1 {
low 10.2.0.10;
high 10.2.31.254;
}
dhcp-attributes {
maximum-lease-time 300;
grace-period 250;
domain-name xxxx;
name-server {
198.51.100.30;
198.51.100.3;
}
router {
10.2.0.1;
}
}
}
}
pool v6-prefix-wan {
family inet6 {
prefix 2001:2:1:a::/64;
range R1 {
low 2001:2:1:a::2/128;
high 2001:2:1:a::ffff:ffff/128;
}
dhcp-attributes {
domain-name xxxx;
dns-server {
2001:2:0:53::30;
2001:2:0:53::31;
}
}
}
}
pool v6-prefix-delegation {
family inet6 {
prefix 2001:db8::/32;
range prefix-range prefix-length 48;
}
}
}
domain {
map default {
aaa-routing-instance default;
access-profile access;
strip-domain;
}
}
}
Описаны два пула IPv6 адресов:
Реализация такой конфигурации имеет некоторые нюансы. Глобально доступные адреса на WAN 10 интерфейсе CPE 11 клиентов: производители CPE 11 мало заботятся о безопасности, оставляя бэкдоры, слабые пароли и лишние сервисы с уязвимостями. Подавляющее большинство участников ботнетов, используемых для разнообразных DDoS 16 атак - домашние маршрутизаторы и CPE 11. Также имплементация DHCP клиента у большинства CPE 11 недостаточно полноценна.
NDRA-PD
В дальнейшем схема доступа была заменена на NDRA-PD 17, в которой CPE 11 получает WAN 10 адрес сразу при Neighbor Discovery 18, а затем по DHCP запрашивается префикс для клиента. Также было принято решение раздавать клиентским CPE 11 на WAN 10 интерфейсы адреса из диапазона ULA fc00::/7 19. Такая адресация маршрутизируется только в пределах организации и этим решается вопрос отсутствия видимости CPE 11 в глобальной таблице маршрутизации без потери возможности управления CPE 11 в рамках интернет-провайдера:
Внимание: По правилам использования ULA адресов из RFC4193 20 следует генерировать уникальный префикс. Для автора важнее удобство запоминания и кодирования структуры сети в адресе, рекомендацией из RFC4193 20 было решено пренебречь.
Junos® OS конфигурация
Конфигурация сервисов DHCPv4/DHCPv6 и Dual Stack групп 6 идентична предыдущей, но указан другой динамический профиль:
system {
services {
dhcp-local-server {
dhcpv6 {
group DS_SLAAC_PD {
overrides {
delegated-pool v6-prefix-delegation;
# Общая часть конфигурации IPv4 и IPv6 в Dual Stack группе
dual-stack DS_NDRA_PD;
}
interface ae1.2005;
}
}
group DHCP-NDRA {
overrides {
# Общая часть конфигурации IPv4 и IPv6 в Dual Stack группе
dual-stack DS_NDRA_PD;
}
interface ae1.2005;
}
dual-stack-group DS_NDRA_PD {
authentication {
password xxxxxx;
username-include {
# В качестве имени пользователя используется MAC адрес
mac-address;
}
}
dynamic-profile user-profile-nrda-pd;
on-demand-address-allocation;
classification-key {
mac-address;
}
# Если клиент не авторизовался для IPv4,
# IPv6 сессия тоже будет считается неавторизованной
protocol-master inet;
}
}
}
}
Динамический профиль:
dynamic-profiles {
user-profile-nrda-pd {
routing-instances {
"$junos-routing-instance" {
interface "$junos-interface-name";
}
}
interfaces {
demux0 {
unit "$junos-interface-unit" {
no-traps;
# Proxy ARP для возможности клиентским CPE обнаруживать друг друга,
# OLT по умолчанию изолируют клиентов друг от друга даже в пределах одного VLAN
proxy-arp;
demux-options {
underlying-interface "$junos-underlying-interface";
}
# Если используются агрегированные интерфейсы, это помогает относить каждого клиента
# к одному из интерфейсов агрегата, иначе полисеры буду работать неправильно
targeted-distribution;
family inet {
rpf-check fail-filter RPF-ALLOW-DHCP;
demux-source {
$junos-subscriber-ip-address;
}
unnumbered-address "$junos-loopback-interface";
}
family inet6 {
rpf-check fail-filter RPF-ALLOW-DHCPv6;
address $junos-ipv6-address;
demux-source {
"$junos-subscriber-ipv6-address";
}
}
}
}
}
protocols {
router-advertisement {
interface "$junos-interface-name" {
max-advertisement-interval 60;
min-advertisement-interval 10;
other-stateful-configuration;
default-lifetime 3600;
prefix $junos-ipv6-ndra-prefix;
}
}
}
}
}
IPv4 часть конфигурации не претерпела никаких изменений, для IPv6 удалена конфигурация с unnumbered-address, так как BRAS 3 на каждый интерфейс клиента должен выделять адрес из специального пула адресов NDRA. Поменялась конфигурация протокола router-advertisement, для раздачи адресов будет использован механизм SLAAC 22 и только делегированные префиксы будут выданы клиентам по DHCP.
Конфигурация интерфейсов:
interfaces {
ae1 {
unit 2005 {
description GPON;
demux-source [ inet inet6 ];
vlan-id 2005;
family inet {
# Борьба со спуфингом адресов
rpf-check fail-filter RPF-ALLOW-DHCP;
unnumbered-address lo0.0 preferred-source-address 192.0.2.1;
}
family inet6 {
# Не требуется указывать адрес
}
}
}
}
И новый пул:
access {
address-assignment {
neighbor-discovery-router-advertisement ndra-prefixes;
pool ndra-prefixes {
family inet6 {
prefix fc00:0001::/48;
range R1 prefix-length 64;
dhcp-attributes {
domain-name domain.tld;
dns-server {
2001:2:0:53::30;
2001:2:0:53::31;
}
}
}
}
}
}
Ссылки
1. Gigabit Passive Optical Network ↩
2. Best Current Operational Practice for Operators: IPv6 prefix assignment for end-users ↩
3. Broadband Remote Access Server ↩
4. Dual Stack ↩
5. Software Release Notification for Junos Software Service Release version 17.3R3-S3 ↩
6. Configuring dual-stack-group (DHCP Local Server)
↩
7. Junos® OS 17.3R1 Release Notes ↩
8. Business Support System ↩
9. DHCPv6 IA_NA and DHCPv6 Prefix Delegation ↩
10. Wide Area Network ↩
11. Customer-premises Equipment ↩
12. Особенности работы ARP протокола в Junos Network Operating System ↩
13. Versioning for Dynamic Profiles ↩
14. Configuring Unicast RPF check ↩
15. Anti-Spoofing – Preventing traffic with spoofed source IP addresses ↩
16. Distributed Denial-of-service Attack ↩
17. NDRA-PD ↩
18. Neighbor Discovery Protocol ↩
19. Unique Local Address ↩
20. RFC4193: Unique Local IPv6 Unicast Addresses ↩
21. Stateless Address Autoconfiguration ↩
22. RIPE NCC (Réseaux IP Européens Network Coordination Centre) ↩
23. Local Internet Registry ↩