Настройка PPPoE-соединения с аутентификацией
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:

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