Конфигурирование 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.

Стратегия выделения адресов:

На момент написания статьи используемая на 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 сервером:

IA_NA_PD

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 в рамках интернет-провайдера:

NDRA_PD

Внимание: По правилам использования 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

Tags: juniper bras ipv6 dual-stack ndra-pd ipoe