Настройка PPPoE-соединения с аутентификацией

· 40 мин чтения

PPPoE (Point-to-Point Protocol over Ethernet) – это сетевой протокол, инкапсулирующий кадры PPP внутрь кадров Ethernet. Если говорить упрощенно, PPPoE позволяет установить прямое соединение «точка-точка» между двумя узлами, которые физически находятся в общей широковещательной Ethernet-среде. Технология описана в RFC 2516 и стала основой для построения массовых широкополосных сетей доступа.

Главное отличие PPPoE от классического PPP – это среда передачи. Изначально PPP (Point-to-Point Protocol) разрабатывался для работы поверх прямой физической линии, например, последовательного порта или модемного соединения, где два устройства видят только друг друга. В таких условиях не требовалось адресации на канальном уровне: все, что отправлял один конец, гарантированно получал другой.

Ethernet же является средой с множественным доступом, где один порт коммутатора может «слышать» множество устройств. PPPoE добавляет прослойку, которая в этой хаотичной среде находит конкретного партнера (сервер) и создает с ним виртуальный туннель, внутри которого затем работает обычный PPP со всеми его фазами: LCP для установки соединения, аутентификация через PAP/CHAP и NCP для назначения сетевых параметров.

Ключевая задача PPPoE, ради которой провайдеры внедряли и продолжают использовать этот протокол, – это контроль доступа и учет трафика на канальном уровне. В отличие от простой IP-сети, где клиент получает адрес через DHCP и может оставаться анонимным, PPPoE требует прохождения аутентификации до того, как клиенту будет назначен IP-адрес.

Это позволяет биллинговым системам точно связывать абонента с сессией, управлять скоростью, тарифицировать время подключения и оперативно отключать неплательщиков. Кроме того, PPPoE имитирует знакомую провайдерам модель коммутируемого доступа (dial-up), что в начале 2000-х годов облегчило переход на широкополосную передачу без коренной перестройки инфраструктуры.

У протокола есть ряд технических особенностей. Во-первых, MTU автоматически уменьшается на 8 байт (6 байт заголовка PPPoE и 2 байта идентификатора сессии), поэтому для исключения фрагментации на клиентских устройствах обычно выставляют значение MTU 1492. Во-вторых, работа начинается с фазы обнаружения (Discovery), состоящей из обмена пакетами PADI, PADO, PADR и PADS. Клиент широковещательно ищет все доступные серверы (концентраторы доступа), выбирает один и инициирует сессию. Только после этого поднимается PPP-соединение.

На стороне провайдера применение PPPoE выглядит как масштабируемая система терминирования абонентских сессий. Агрегирующий маршрутизатор (BRAS или BNG) настраивается как PPPoE-сервер. Физический интерфейс, смотрящий в сторону клиентов, содержит множество туннелей. При помощи функции PPPoE Intermediate Agent на промежуточных коммутаторах (Option 82) в заголовок Discovery-пакетов добавляется информация о том, с какого порта и с какого оборудования пришел клиент. Так сервер, даже если физически не видит MAC-адрес абонента (например, за цепочкой бриджей), точно идентифицирует его местоположение в сети.

После фазы Discovery абонент отправляет логин и пароль. Сервер через RADIUS обращается к биллингу, получает от него разрешение на подключение и параметры профиля (пул IP-адресов, скоростные лимиты, списки доступа). По завершении PPP-сессии сервер принудительно освобождает IP-адрес и отправляет accounting-запись в биллинг для учета времени сессии или трафика.

PPPoE до сих пор остается гибким инструментом, позволяющим провайдеру централизованно управлять идентификацией, политиками качества услуг и безопасностью в неоднородной Ethernet-сети.

Параметры сетевых устройств

Template Name/prefix CPU RAM (MB) Ethernets
Cisco vIOS Router ISP 1 512 4
Cisco vIOS Router RTR-CLI0 1 512 4
Cisco vIOS Router RTR-CLI1 1 512 4
Cisco vIOS Switch ISP-SW 1 512 8
Cisco vIOS Switch SW-CLI0 1 512 8
Cisco vIOS Switch SW-CLI1 512 8
Virtual PC (VPCS) vPC-1 – – –
Virtual PC (VPCS) vPC-2 – – –
Virtual PC (VPCS) vPC-3 – – –
Virtual PC (VPCS) vPC-4 – – –

Топология сети

Настройка сети

Внутренние сети у меня уже настроены. Слева реализован «роутер на палочке», настроены VLAN на коммутаторе. На RTR-CLI0 реализован DHCP-сервер для каждого VLAN. То же самое сделано и для правой части.

Только после того, как базовая конфигурация выполнена, можно приступать к настройке PPPoE-сервера и PPPoE-клиентов.

На ISP:

Would you like to enter the initial configuration dialog? [yes/no]: no
Router>enable
Router#config terminal
Router(config)#hostname isp
isp(config)#access-list 1 permit any
isp(config)#ip nat inside source list 1 interface gi0/0 overload
isp(config)#interface gi0/0
isp(config-if)#no shutdown
isp(config-if)#ip address dhcp
isp(config-if)#ip nat outside
isp(config-if)#exit
isp(config)#username client1 password 0 P@ssw0rd1
isp(config)#username client2 password 0 P@ssw0rd2
isp(config)#bba-group pppoe SERVER-GROUP
isp(config-bba-group)#virtual-template 1
isp(config-bba-group)#exit
isp(config)#ip local pool PPPOE-CLIENTS 100.100.100.1 100.100.100.100
isp(config)#interface lo0
isp(config-if)#ip address 10.0.0.1 255.255.255.255
isp(config-if)#exit
isp(config)#interface virtual-template1
isp(config-if)#ip unnumbered lo0
isp(config-if)#ip nat inside
isp(config-if)#peer default ip address pool PPPOE-CLIENTS
isp(config-if)#ppp authentication chap pap ms-chap ms-chap-v2
isp(config-if)#exit
isp(config)#interface gi0/1
isp(config-if)#no ip address
isp(config-if)#no shutdown
isp(config-if)#pppoe enable group SERVER-GROUP
isp(config-if)#exit
isp(config)#do write

Команда «username client1 password 0 P@ssw0rd1» создает запись локального пользователя с именем client1 и паролем P@ssw0rd1. Цифра 0 означает, что пароль указан в открытом виде (не зашифрован). Сервер будет сверяться с этой базой при аутентификации клиента по протоколам PAP или CHAP. В реальных сетях провайдера вместо локальной базы практически всегда используют внешний RADIUS-сервер.

Команды

bba-group pppoe SERVER-GROUP
    virtual-template 1

BBA (BroadBand Access) – это контейнер для настроек широкополосного доступа. Ключевое действие здесь – привязка виртуального шаблона Virtual-Template1. Это означает: когда на физическом интерфейсе, который будет ссылаться на группу SERVER-GROUP, появится входящий PPPoE-запрос, система динамически клонирует настройки из Virtual-Template1 и создаст для этого клиента виртуальный интерфейс доступа (Virtual-Access). Фактически это инструкция, какой логический интерфейс использовать для обработки сессии.

Команды

interface Virtual-Template1
    ip unnumbered Loopback0
    peer default ip address pool PPPOE-CLIENTS
    ppp authentication chap pap ms-chap ms-chap-v2

Этот интерфейс не пропускает трафик напрямую, а служит чертежом для клонирования.

ip unnumbered Loopback0 – заимствование IP-адреса у интерфейса Loopback0. Поскольку PPP – протокол «точка-точка», IP-адрес на концах может не принадлежать к общей подсети. Чтобы не тратить зря IP-адреса из пула на интерфейсе сервера, сервер использует адрес своего Loopback-интерфейса. Клиент увидит сервер именно с адресом 10.0.0.1.

peer default ip address pool PPPOE-CLIENTS – указание серверу выдавать IP-адрес клиенту (peer) из пула с именем PPPOE-CLIENTS.

ppp authentication chap pap ms-chap ms-chap-v2 – настройка методов аутентификации в порядке предпочтения. Сервер будет предлагать клиенту пройти проверку сначала по CHAP, затем по PAP, и так далее. При использовании CHAP пароль передается в зашифрованном виде (хэш), при PAP – открытым текстом, поэтому CHAP приоритетнее.

Команда ip local pool PPPOE-CLIENTS 100.100.100.1 100.100.100.100 – определяет диапазон IP-адресов, которые сервер будет динамически назначать подключившимся клиентам.

Команды

interface Loopback0
    ip address 10.0.0.1 255.255.255.255

Создается логический, всегда активный интерфейс. Маска /32 (255.255.255.255) используется, потому что адрес нужен строго для идентификации маршрутизатора как хоста, а не как целой сети. Его IP-адрес будет одолжен виртуальным шаблоном.

Команды

interface GigabitEthernet0/1
    no ip address
    pppoe enable group SERVER-GROUP
    no shutdown

На физическом интерфейсе (L2-уровне) не требуется IP-адрес («no ip address»), он работает как коммутаторный порт на прием кадров Ethernet.

Команда «pppoe enable group SERVER-GROUP», которая заставляет интерфейс слушать входящие PPPoE-кадры (на этапе Discovery) и направлять их на обработку в ранее созданную группу SERVER-GROUP (а через нее – на Virtual-Template).

На RTR-CLI0:

rtr-cli0>enable
rtr-cli0#config terminal
rtr-cli0(config)#interface dialer1
rtr-cli0(config-if)#ip address negotiated
rtr-cli0(config-if)#mtu 1492
rtr-cli0(config-if)#encapsulation ppp
rtr-cli0(config-if)#dialer pool 1
rtr-cli0(config-if)#ppp authentication chap pap callin
rtr-cli0(config-if)#ppp chap hostname client1
rtr-cli0(config-if)#ppp chap password 0 P@ssw0rd1
rtr-cli0(config-if)#ppp pap sent-username client1 password P@ssw0rd1
rtr-cli0(config-if)#ip nat outside
rtr-cli0(config-if)#exit
rtr-cli0(config)#access-list 1 permit any
rtr-cli0(config)#ip nat inside source list 1 interface dialer1 overload
rtr-cli0(config)#interface gi0/1.10
rtr-cli0(config-subif)#ip nat inside
rtr-cli0(config-subif)#exit
rtr-cli0(config)#interface gi0/1.20
rtr-cli0(config-subif)#ip nat inside
rtr-cli0(config-subif)#exit
rtr-cli0(config)#inteface gi0/0
rtr-cli0(config-if)#no ip address
rtr-cli0(config-if)#no shutdown
rtr-cli0(config-if)#pppoe-client dial-pool-number 1
rtr-cli0(config-if)#exit
rtr-cli0(config)#ip route 0.0.0.0 0.0.0.0 dialer1
rtr-cli0(config)#do write

Команды

interface Dialer1
    ip address negotiated
    mtu 1492
    encapsulation ppp
    dialer pool 1
    ppp authentication chap pap callin
    ppp chap hostname client1
    ppp chap password 0 P@ssw0rd1
    ppp pap sent-username client1 password P@ssw0rd1

Dialer-интерфейс – это логический интерфейс на стороне клиента, представляющий установленное соединение.

«ip address negotiated» – запрос на получение IP-адреса динамически от сервера (по протоколу IPCP, входящему в семейство PPP).

«mtu 1492» – принудительное уменьшение максимального размера блока данных. Стандартный Ethernet MTU = 1500 байт. Заголовок PPPoE занимает 8 байт, чтобы избежать фрагментации на пути к серверу, MTU снижается до 1492.

«encapsulation ppp» – указание использовать инкапсуляцию PPP внутри этого логического интерфейса.

«dialer pool 1» – привязка Dialer-интерфейса к пулу набора номер один. Физический интерфейс, добавленный в этот же пул, будет использован для установления соединения.

«ppp authentication chap pap callin» – настройка аутентификации. Ключевое слово callin говорит маршрутизатору: «Требуй аутентификацию только в том случае, если кто-то звонит тебе (что в контексте PPPoE-клиента случается редко), но для исходящих вызовов аутентифицируйся сам, если сервер попросит».

«ppp chap hostname client1» и «ppp chap password 0 P@ssw0rd1» – учетные данные (логин и пароль), которые клиент отправит серверу, если тот запросит аутентификацию по протоколу CHAP.

«ppp pap sent-username client1 password P@ssw0rd1» – учетные данные для отправки серверу, если тот будет использовать протокол PAP. Указаны обе опции (CHAP и PAP) для максимальной совместимости, хотя в реальности сессия пойдет по самому приоритетному методу, поддерживаемому сервером.

Команды

interface GigabitEthernet0/0
    no ip address
    pppoe-client dial-pool-number 1
    no shutdown

Аналогично серверу, на физическом Ethernet-порту не требуется IP-адрес («no ip address»). Команда «pppoe-client dial-pool-number 1» активирует на интерфейсе PPPoE-клиент и помещает его в пул набора номер 1. Теперь любое исходящее соединение через Dialer1 (который ссылается на пул 1) будет пытаться пройти через этот физический порт, инициируя отправку PADI-пакетов для обнаружения сервера.

На RTR-CLI1:

rtr-cli1>enable
rtr-cli1#config terminal
rtr-cli1(config)#interface dialer1
rtr-cli1(config-if)#ip address negotiated
rtr-cli1(config-if)#mtu 1492
rtr-cli1(config-if)#encapsulation ppp
rtr-cli1(config-if)#dialer pool 1
rtr-cli1(config-if)#ppp authentication chap pap callin
rtr-cli1(config-if)#ppp chap hostname client2
rtr-cli1(config-if)#ppp chap password 0 P@ssw0rd2
rtr-cli1(config-if)#ppp pap sent-username client2 password P@ssw0rd2
rtr-cli1(config-if)#ip nat outside
rtr-cli1(config-if)#exit
rtr-cli1(config)#access-list 1 permit any
rtr-cli1(config)#ip nat inside source list 1 interface dialer1 overload
rtr-cli1(config)#interface gi0/1.30
rtr-cli1(config-subif)#ip nat inside
rtr-cli1(config-subif)#exit
rtr-cli1(config)#interface gi0/1.40
rtr-cli1(config-subif)#ip nat inside
rtr-cli1(config-subif)#exit
rtr-cli1(config)#inteface gi0/0
rtr-cli1(config-if)#no ip address
rtr-cli1(config-if)#no shutdown
rtr-cli1(config-if)#pppoe-client dial-pool-number 1
rtr-cli1(config-if)#exit
rtr-cli1(config)#ip route 0.0.0.0 0.0.0.0 dialer1
rtr-cli1(config)#do write

Проверка работоспособности на vPC-1:

Проверка работоспособности на vPC-2:

Проверка работоспособности на vPC-3:

Проверка работоспособности на vPC-4:

На этом настройка завершена.