PPPoE Server

PPPoE (Point-to-Point Protocol over Ethernet) сервер на VyOS использует accel-ppp для предоставления широкополосного доступа в Интернет. Решение идеально подходит для ISP (интернет-провайдеров), WISP и корпоративных сетей.

Обзор

PPPoE сервер VyOS предоставляет:

  • Централизованную аутентификацию абонентов (локальную и RADIUS)
  • Управление IP-адресами через пулы
  • Контроль полосы пропускания (bandwidth shaping)
  • Поддержку IPv6 и Prefix Delegation
  • VLAN per client (автоматическое создание VLAN)
  • Сессионный контроль и мониторинг
  • Интеграцию с биллинговыми системами через RADIUS

PPPoE широко используется российскими провайдерами для предоставления услуг xDSL, FTTB (Fiber to the Building) и GPON.

Базовая конфигурация

Минимальная настройка

Простейшая конфигурация PPPoE сервера:

# Имя концентратора доступа
set service pppoe-server access-concentrator 'ISP-AC-01'

# Интерфейс для приема PPPoE запросов
set service pppoe-server interface eth1

# Gateway адрес (выдается клиентам как default route)
set service pppoe-server gateway-address '10.1.1.1'

# Пул IP-адресов для клиентов
set service pppoe-server client-ip-pool CLIENTS range '10.1.1.100-10.1.1.254'
set service pppoe-server default-pool 'CLIENTS'

# Локальная аутентификация
set service pppoe-server authentication mode 'local'
set service pppoe-server authentication local-users username 'client1' password 'password123'

commit

Структура конфигурации

service pppoe-server
  ├── access-concentrator <name>
  ├── interface <interface>
  ├── gateway-address <ip>
  ├── authentication
  │   ├── mode [local|radius]
  │   ├── local-users
  │   │   └── username <name>
  │   │       ├── password <password>
  │   │       ├── static-ip <ip>
  │   │       ├── rate-limit <download>/<upload>
  │   │       └── disable
  │   └── radius
  │       ├── server <ip>
  │       │   ├── key <secret>
  │       │   ├── port <port>
  │       │   └── acct-port <port>
  │       └── nas-identifier <id>
  ├── client-ip-pool <name>
  │   └── range <start-stop>
  ├── default-pool <pool-name>
  ├── client-ipv6-pool <name>
  │   ├── prefix <prefix>
  │   └── mask <bits>
  ├── name-server <dns-ip>
  ├── ppp-options
  │   ├── mtu <size>
  │   ├── mru <size>
  │   ├── lcp-echo-interval <seconds>
  │   ├── lcp-echo-failure <count>
  │   ├── ipv4 <mode>
  │   └── ipv6 [allow|deny|require]
  └── limits
      ├── burst <count>
      └── timeout <seconds>

Аутентификация

Локальная аутентификация

Создание пользователей непосредственно в конфигурации VyOS.

Базовый пользователь

set service pppoe-server authentication mode 'local'
set service pppoe-server authentication local-users username 'user1' password 'SecurePass123'

Пользователь со статическим IP

set service pppoe-server authentication local-users username 'server1' password 'Pass456'
set service pppoe-server authentication local-users username 'server1' static-ip '10.1.1.50'

Пользователь с ограничением скорости

set service pppoe-server authentication local-users username 'user2' password 'Pass789'
set service pppoe-server authentication local-users username 'user2' rate-limit download '100000'
set service pppoe-server authentication local-users username 'user2' rate-limit upload '50000'

Скорость указывается в Kbps (килобитах в секунду).

Отключение пользователя

Временное отключение без удаления:

set service pppoe-server authentication local-users username 'user1' disable

RADIUS аутентификация

Интеграция с внешними RADIUS серверами для централизованного управления абонентами.

Базовая настройка RADIUS

# Режим аутентификации
set service pppoe-server authentication mode 'radius'

# Первичный RADIUS сервер
set service pppoe-server authentication radius server 192.168.10.10 key 'RadiusSecret123'

# Вторичный RADIUS сервер (резервный)
set service pppoe-server authentication radius server 192.168.10.11 key 'RadiusSecret123'

# NAS Identifier (для идентификации сервера в RADIUS)
set service pppoe-server authentication radius nas-identifier 'PPPoE-Server-01'

Нестандартные порты RADIUS

set service pppoe-server authentication radius server 192.168.10.10 key 'Secret'
set service pppoe-server authentication radius server 192.168.10.10 port 1812
set service pppoe-server authentication radius server 192.168.10.10 acct-port 1813

Порты по умолчанию:

  • Authentication: 1812
  • Accounting: 1813

RADIUS источник

NAS IP-адрес для RADIUS запросов:

set service pppoe-server authentication radius source-address '192.168.10.1'

RADIUS атрибуты

RADIUS сервер может возвращать атрибуты для управления сессией:

Vendor-Specific Attributes (VSA):

  • Filter-Id - имя профиля bandwidth shaping
  • Framed-IP-Address - статический IP для клиента
  • Framed-Route - статический маршрут
  • Rate-Limit - ограничение скорости (формат: download/upload)
  • Session-Timeout - максимальное время сессии

Пример RADIUS ответа:

Framed-IP-Address = 10.1.1.100
Framed-Route = "192.168.50.0/24 10.1.1.100"
Filter-Id = "100M"
Session-Timeout = 86400

Протоколы аутентификации

PPPoE поддерживает несколько протоколов аутентификации.

PAP (Password Authentication Protocol)

Простейший протокол, пароль передается в открытом виде (не рекомендуется):

set service pppoe-server authentication protocols pap

CHAP (Challenge Handshake Authentication Protocol)

Более безопасный challenge-response протокол:

set service pppoe-server authentication protocols chap

MS-CHAP и MS-CHAPv2

Microsoft варианты CHAP:

set service pppoe-server authentication protocols mschap
set service pppoe-server authentication protocols mschap-v2

Рекомендуемая конфигурация

# Разрешить CHAP и MS-CHAPv2, запретить PAP
set service pppoe-server authentication protocols chap
set service pppoe-server authentication protocols mschap-v2

Управление IP-адресами

IPv4 пулы

Один пул

set service pppoe-server client-ip-pool POOL1 range '10.1.1.100-10.1.1.254'
set service pppoe-server default-pool 'POOL1'

Множественные пулы

Для разных групп абонентов или тарифов:

# Базовый тариф
set service pppoe-server client-ip-pool BASIC range '10.1.1.0-10.1.1.127'

# Премиум тариф
set service pppoe-server client-ip-pool PREMIUM range '10.1.2.0-10.1.2.255'

# Корпоративные клиенты
set service pppoe-server client-ip-pool CORPORATE range '10.1.10.0-10.1.10.127'

# Пул по умолчанию
set service pppoe-server default-pool 'BASIC'

RADIUS может назначить конкретный пул через атрибут Framed-Pool.

Статические IP-адреса

Через локальную аутентификацию:

set service pppoe-server authentication local-users username 'static-user' static-ip '10.1.1.50'

Через RADIUS (атрибут в ответе):

Framed-IP-Address = 10.1.1.50

IPv6 конфигурация

Включение IPv6

set service pppoe-server ppp-options ipv6 'allow'

Режимы IPv6:

  • allow - разрешить IPv6 если клиент запрашивает
  • deny - запретить IPv6
  • require - требовать IPv6 (обязательно)

IPv6 пул адресов

Выдача индивидуальных IPv6 адресов:

set service pppoe-server client-ipv6-pool IPv6-POOL prefix '2001:db8:1000::/48'
set service pppoe-server client-ipv6-pool IPv6-POOL mask '64'

Каждому клиенту будет выдан /64 префикс из указанного пула.

IPv6 Prefix Delegation

Делегирование префиксов клиентам (для маршрутизаторов):

set service pppoe-server client-ipv6-pool IPv6-POOL-PD prefix '2001:db8:2000::/40'
set service pppoe-server client-ipv6-pool IPv6-POOL-PD delegate '2001:db8:2000::/48'

Клиент получит /48 префикс для использования в своей сети.

DNS серверы

Указание DNS серверов для клиентов:

set service pppoe-server name-server '8.8.8.8'
set service pppoe-server name-server '8.8.4.4'

Для IPv6:

set service pppoe-server name-server '2001:4860:4860::8888'
set service pppoe-server name-server '2001:4860:4860::8844'

VLAN конфигурация

VLAN per client

Автоматическое создание VLAN интерфейсов для каждого клиента.

Базовая VLAN конфигурация

# Разрешить прием на VLAN интерфейсах
set service pppoe-server interface eth1 vlan '100-200'

PPPoE сервер будет принимать запросы на eth1.100, eth1.101, … eth1.200.

Конкретные VLAN

set service pppoe-server interface eth1 vlan '10'
set service pppoe-server interface eth1 vlan '20'
set service pppoe-server interface eth1 vlan '30'

Множественные интерфейсы с VLAN

# DSL агрегация на eth1
set service pppoe-server interface eth1 vlan '100-200'

# Ethernet абоненты на eth2
set service pppoe-server interface eth2 vlan '500-600'

Динамическое создание VLAN

PPPoE сервер автоматически создает VLAN интерфейсы при подключении клиентов:

set service pppoe-server interface eth1 vlan '1-4094'

Важно: Убедитесь, что коммутатор настроен на передачу соответствующих VLAN тегов (trunk/tagged port).

VLAN + IP pool mapping

Разные пулы для разных VLAN (через внешнюю логику в RADIUS):

RADIUS сервер может анализировать NAS-Port-Id (содержит VLAN ID) и возвращать соответствующий Framed-Pool атрибут.

Bandwidth Shaping (контроль полосы)

Локальное ограничение скорости

Для пользователей с локальной аутентификацией:

set service pppoe-server authentication local-users username 'user1' rate-limit download '50000'
set service pppoe-server authentication local-users username 'user1' rate-limit upload '25000'

Скорость в Kbps:

  • 50000 = 50 Mbps download
  • 25000 = 25 Mbps upload

RADIUS-based shaping

RADIUS может управлять скоростью через атрибуты:

FreeRADIUS пример ответа:

# В файле users
user1 Cleartext-Password := "password"
    Filter-Id := "rate-limit=100000/50000"

Формат: rate-limit=download/upload (в Kbps)

Альтернатива через VSA:

user1 Cleartext-Password := "password"
    WISPr-Bandwidth-Max-Down := 100000000,
    WISPr-Bandwidth-Max-Up := 50000000

Скорость в bps (битах в секунду).

Burst конфигурация

Разрешение кратковременного превышения лимита:

set service pppoe-server shaper fwmark '10'

Для более сложного shaping используйте встроенные возможности accel-ppp через extended scripting.

PPP параметры

MTU и MRU

Максимальный размер пакета:

set service pppoe-server ppp-options mtu '1492'
set service pppoe-server ppp-options mru '1492'

Стандартные значения:

  • PPPoE MTU: 1492 (1500 - 8 bytes PPPoE header)
  • Для туннелей (PPPoE + L2TP): 1460 или меньше

LCP Echo

Keep-alive механизм для обнаружения отключенных сессий:

set service pppoe-server ppp-options lcp-echo-interval '30'
set service pppoe-server ppp-options lcp-echo-failure '3'
  • lcp-echo-interval - интервал отправки LCP Echo-Request (секунды)
  • lcp-echo-failure - количество неудачных попыток до разрыва соединения

Пример: Интервал 30 секунд, 3 попытки = сессия будет разорвана через 90 секунд без ответа.

IPv4 режимы

set service pppoe-server ppp-options ipv4 'allow'

Режимы:

  • allow - разрешить IPv4
  • deny - запретить IPv4
  • require - требовать IPv4

MPPE шифрование

Microsoft Point-to-Point Encryption:

set service pppoe-server ppp-options mppe 'prefer'

Режимы:

  • require - требовать MPPE
  • prefer - предпочитать MPPE
  • deny - запретить MPPE

Примечание: MPPE требует MS-CHAPv2 аутентификацию.

IPCP параметры

IP Control Protocol настройки:

set service pppoe-server ppp-options ipv4-peer-dns

Отправлять DNS серверы клиенту через IPCP.

Сессионный контроль

Максимальное количество сессий

Лимит одновременных подключений одного пользователя:

set service pppoe-server session-control max-sessions '1'

Предотвращает множественные подключения с одного аккаунта.

Таймауты

Session timeout

Максимальное время сессии (после истечения - автоотключение):

set service pppoe-server limits timeout '86400'

Значение в секундах (86400 = 24 часа).

Может также управляться через RADIUS атрибут Session-Timeout.

Idle timeout

Отключение при отсутствии трафика:

set service pppoe-server limits idle-timeout '600'

Сессия разрывается если нет трафика 600 секунд (10 минут).

Burst параметры

Лимит одновременных новых подключений (защита от флуда):

set service pppoe-server limits burst '10'

Максимум 10 новых сессий могут устанавливаться одновременно.

Интерфейс переименование

Custom именование PPP интерфейсов:

set service pppoe-server ppp-options interface-name 'pppoe-{username}'

Интерфейсы будут называться pppoe-user1, pppoe-user2 и т.д.

Extended Scripting

Accel-ppp поддерживает выполнение скриптов на различных событиях.

Доступные события

set service pppoe-server extended-scripts on-pre-up '/config/scripts/pppoe-pre-up.sh'
set service pppoe-server extended-scripts on-up '/config/scripts/pppoe-up.sh'
set service pppoe-server extended-scripts on-down '/config/scripts/pppoe-down.sh'
set service pppoe-server extended-scripts on-change '/config/scripts/pppoe-change.sh'

События:

  • on-pre-up - перед установкой сессии
  • on-up - после успешной установки сессии
  • on-down - после разрыва сессии
  • on-change - при изменении параметров сессии

Пример скрипта

Файл /config/scripts/pppoe-up.sh:

#!/bin/bash
# Переменные окружения доступные в скрипте:
# $IFNAME - имя интерфейса (ppp0, ppp1, ...)
# $PEERNAME - имя пользователя
# $CALLING_SID - MAC адрес клиента
# $CALLED_SID - MAC адрес сервера
# $IP - IP адрес клиента
# $IP6 - IPv6 адрес клиента (если есть)

echo "$(date): User $PEERNAME connected on $IFNAME with IP $IP" >> /var/log/pppoe-sessions.log

# Например, отправка уведомления
curl -X POST "https://billing.example.ru/api/session-start" \
  -d "username=$PEERNAME&ip=$IP&interface=$IFNAME"

Сделайте скрипт исполняемым:

sudo chmod +x /config/scripts/pppoe-up.sh

Интеграция с биллингом

Скрипты могут вызывать API биллинговой системы для:

  • Уведомлений о start/stop сессий
  • Обновления статистики
  • Управления балансом
  • Логирования событий

Примеры конфигурации

Домашний ISP (базовая конфигурация)

# Основные параметры
set service pppoe-server access-concentrator 'HomeISP-AC'
set service pppoe-server interface eth1

# Gateway и DNS
set service pppoe-server gateway-address '10.10.1.1'
set service pppoe-server name-server '8.8.8.8'
set service pppoe-server name-server '8.8.4.4'

# IP пул
set service pppoe-server client-ip-pool HOME range '10.10.1.100-10.10.1.254'
set service pppoe-server default-pool 'HOME'

# Локальная аутентификация
set service pppoe-server authentication mode 'local'
set service pppoe-server authentication protocols chap
set service pppoe-server authentication protocols mschap-v2

# Пользователи
set service pppoe-server authentication local-users username 'client1' password 'Pass123'
set service pppoe-server authentication local-users username 'client1' rate-limit download '100000'
set service pppoe-server authentication local-users username 'client1' rate-limit upload '100000'

# PPP параметры
set service pppoe-server ppp-options mtu '1492'
set service pppoe-server ppp-options lcp-echo-interval '30'
set service pppoe-server ppp-options lcp-echo-failure '3'

# Сессионный контроль
set service pppoe-server session-control max-sessions '1'
set service pppoe-server limits burst '5'

commit

Провайдер с RADIUS и VLAN (продвинутая конфигурация)

# Основные параметры
set service pppoe-server access-concentrator 'ISP-Metro-AC-01'

# Интерфейсы с VLAN
set service pppoe-server interface eth1 vlan '100-199'
set service pppoe-server interface eth2 vlan '200-299'

# Gateway
set service pppoe-server gateway-address '10.0.0.1'

# DNS серверы
set service pppoe-server name-server '10.0.0.53'
set service pppoe-server name-server '8.8.8.8'

# IP пулы
set service pppoe-server client-ip-pool RESIDENTIAL range '10.100.0.0-10.100.255.254'
set service pppoe-server client-ip-pool BUSINESS range '10.200.0.0-10.200.127.254'
set service pppoe-server client-ip-pool PREMIUM range '10.250.0.0-10.250.63.254'
set service pppoe-server default-pool 'RESIDENTIAL'

# RADIUS аутентификация
set service pppoe-server authentication mode 'radius'
set service pppoe-server authentication protocols chap
set service pppoe-server authentication protocols mschap-v2

# Первичный RADIUS
set service pppoe-server authentication radius server 10.0.10.10 key 'SuperSecretKey123'
set service pppoe-server authentication radius server 10.0.10.10 port 1812
set service pppoe-server authentication radius server 10.0.10.10 acct-port 1813

# Резервный RADIUS
set service pppoe-server authentication radius server 10.0.10.11 key 'SuperSecretKey123'

# RADIUS настройки
set service pppoe-server authentication radius nas-identifier 'PPPoE-AC-01'
set service pppoe-server authentication radius source-address '10.0.10.1'

# PPP параметры
set service pppoe-server ppp-options mtu '1492'
set service pppoe-server ppp-options mru '1492'
set service pppoe-server ppp-options lcp-echo-interval '30'
set service pppoe-server ppp-options lcp-echo-failure '4'
set service pppoe-server ppp-options ipv4 'allow'

# IPv6
set service pppoe-server ppp-options ipv6 'allow'
set service pppoe-server client-ipv6-pool IPv6-POOL prefix '2001:db8::/32'
set service pppoe-server client-ipv6-pool IPv6-POOL mask '64'

# Сессионный контроль
set service pppoe-server session-control max-sessions '1'
set service pppoe-server limits burst '20'
set service pppoe-server limits timeout '86400'

# Extended scripts
set service pppoe-server extended-scripts on-up '/config/scripts/billing-session-start.sh'
set service pppoe-server extended-scripts on-down '/config/scripts/billing-session-stop.sh'

commit

FTTB провайдер с dual-stack IPv4/IPv6

# Основные параметры
set service pppoe-server access-concentrator 'FTTB-ISP'
set service pppoe-server interface eth1

# Gateway адреса
set service pppoe-server gateway-address '10.20.0.1'

# DNS серверы (dual-stack)
set service pppoe-server name-server '10.20.0.53'
set service pppoe-server name-server '2001:db8:20::53'
set service pppoe-server name-server '8.8.8.8'
set service pppoe-server name-server '2001:4860:4860::8888'

# IPv4 пулы
set service pppoe-server client-ip-pool POOL-v4 range '10.20.1.0-10.20.254.254'
set service pppoe-server default-pool 'POOL-v4'

# IPv6 пулы
set service pppoe-server ppp-options ipv6 'require'
set service pppoe-server client-ipv6-pool POOL-v6 prefix '2001:db8:1000::/36'
set service pppoe-server client-ipv6-pool POOL-v6 mask '56'

# Prefix Delegation для клиентских роутеров
set service pppoe-server client-ipv6-pool POOL-v6-PD prefix '2001:db8:2000::/36'
set service pppoe-server client-ipv6-pool POOL-v6-PD delegate '2001:db8:2000::/48'

# RADIUS
set service pppoe-server authentication mode 'radius'
set service pppoe-server authentication protocols chap
set service pppoe-server authentication protocols mschap-v2
set service pppoe-server authentication radius server 10.20.0.10 key 'RadiusKey'
set service pppoe-server authentication radius nas-identifier 'FTTB-PPPoE'

# PPP параметры
set service pppoe-server ppp-options mtu '1492'
set service pppoe-server ppp-options mru '1492'
set service pppoe-server ppp-options lcp-echo-interval '30'
set service pppoe-server ppp-options lcp-echo-failure '3'
set service pppoe-server ppp-options ipv4 'require'

# Сессионный контроль
set service pppoe-server session-control max-sessions '1'

commit

Российский провайдер с тарифными планами

# Основные параметры
set service pppoe-server access-concentrator 'RU-ISP-Moscow'
set service pppoe-server interface eth1 vlan '10-20'
set service pppoe-server gateway-address '10.77.0.1'

# DNS серверы (Yandex DNS)
set service pppoe-server name-server '77.88.8.8'
set service pppoe-server name-server '77.88.8.1'

# Пулы по тарифам
# Тариф "Базовый" - 50 Мбит/с
set service pppoe-server client-ip-pool BASIC range '10.77.10.0-10.77.10.255'

# Тариф "Оптимальный" - 100 Мбит/с
set service pppoe-server client-ip-pool OPTIMAL range '10.77.20.0-10.77.20.255'

# Тариф "Максимальный" - 200 Мбит/с
set service pppoe-server client-ip-pool MAXIMUM range '10.77.30.0-10.77.30.255'

set service pppoe-server default-pool 'BASIC'

# RADIUS (биллинг)
set service pppoe-server authentication mode 'radius'
set service pppoe-server authentication protocols mschap-v2
set service pppoe-server authentication radius server 10.77.0.100 key 'BillingSecret'
set service pppoe-server authentication radius nas-identifier 'Moscow-PPPoE-1'

# PPP параметры
set service pppoe-server ppp-options mtu '1492'
set service pppoe-server ppp-options lcp-echo-interval '20'
set service pppoe-server ppp-options lcp-echo-failure '3'

# Контроль сессий
set service pppoe-server session-control max-sessions '1'
set service pppoe-server limits idle-timeout '1800'

commit

FreeRADIUS конфигурация для тарифов (users file):

# Базовый тариф - 50 Мбит/с
user-basic Cleartext-Password := "password"
    Framed-Pool := "BASIC",
    Filter-Id := "rate-limit=51200/25600"

# Оптимальный тариф - 100 Мбит/с
user-optimal Cleartext-Password := "password"
    Framed-Pool := "OPTIMAL",
    Filter-Id := "rate-limit=102400/51200"

# Максимальный тариф - 200 Мбит/с
user-maximum Cleartext-Password := "password"
    Framed-Pool := "MAXIMUM",
    Filter-Id := "rate-limit=204800/102400"

# Статический IP для бизнес клиента
business-client Cleartext-Password := "password"
    Framed-IP-Address := "10.77.100.50",
    Filter-Id := "rate-limit=204800/102400"

Операционные команды

Просмотр активных сессий

Все сессии:

show pppoe-server sessions

Вывод:

Interface  Username     IP Address       Calling-SID         Uptime
---------  ------------ ---------------  ------------------  --------
ppp0       client1      10.10.1.100      00:11:22:33:44:55   00:15:32
ppp1       client2      10.10.1.101      aa:bb:cc:dd:ee:ff   01:23:45

Детальная информация по интерфейсу:

show pppoe-server sessions ifname ppp0

По пользователю:

show pppoe-server sessions username client1

Статистика

Статистика сервера:

show pppoe-server statistics

Отключение клиента

Принудительное отключение сессии:

disconnect pppoe-server username client1

По интерфейсу:

disconnect pppoe-server interface ppp0

Перезапуск сервера

restart pppoe-server

Внимание: Перезапуск разорвет все активные сессии!

Логи

Просмотр логов PPPoE:

show log pppoe

Мониторинг в реальном времени:

monitor log | match pppoe

Детальные логи accel-ppp:

tail -f /var/log/accel-ppp/accel-ppp.log

Мониторинг и отладка

Debug режим

Включение детального логирования:

set service pppoe-server log level debug
commit

Уровни логирования:

  • error - только ошибки
  • warn - предупреждения и ошибки
  • info - информационные сообщения (по умолчанию)
  • debug - детальная отладка

SNMP мониторинг

Статистика PPPoE доступна через SNMP (при настроенном SNMP агенте).

OID для accel-ppp:

  • Количество активных сессий: .1.3.6.1.4.1.8072.1.3.2.4.1.2.9.97.99.99.101.108.45.112.112.112.1

Сбор статистики

Скрипт для мониторинга (/config/scripts/pppoe-stats.sh):

#!/bin/bash
SESSIONS=$(run show pppoe-server sessions | grep ppp | wc -l)
echo "Active PPPoE sessions: $SESSIONS"

# Отправка в систему мониторинга
curl -X POST "http://monitoring.example.ru/api/metrics" \
  -d "metric=pppoe.sessions&value=$SESSIONS"

Запуск по расписанию через cron:

set system task-scheduler task pppoe-stats executable path '/config/scripts/pppoe-stats.sh'
set system task-scheduler task pppoe-stats interval '5m'

Packet capture

Перехват PPPoE трафика для отладки:

sudo tcpdump -i eth1 -n pppoe

С детальным выводом:

sudo tcpdump -i eth1 -vvv -n pppoe

Сохранение в файл:

sudo tcpdump -i eth1 -w /tmp/pppoe.pcap pppoe

Устранение неполадок

Клиенты не могут подключиться

Проверка статуса сервера

show service pppoe-server

Сервер должен быть запущен и слушать на правильном интерфейсе.

Проверка интерфейса

show interfaces ethernet eth1

Интерфейс должен быть UP. Для VLAN проверьте trunk конфигурацию на коммутаторе.

Проверка VLAN

Если используются VLAN, убедитесь что теги проходят:

sudo tcpdump -i eth1 -n vlan

Проверка аутентификации

Локальная аутентификация:

show service pppoe-server authentication local-users

RADIUS:

show service pppoe-server authentication radius

Тест RADIUS с помощью radtest:

sudo radtest username password 192.168.10.10 0 secret

Логи

show log pppoe | tail 50

Частые ошибки:

  • Authentication failed - неверный пароль
  • No free IP address - IP пул исчерпан
  • Maximum sessions reached - превышен лимит сессий

IP адреса заканчиваются

Проверьте использование пула:

show pppoe-server sessions | grep ppp | wc -l

Увеличьте диапазон:

set service pppoe-server client-ip-pool POOL range '10.1.1.0-10.1.2.254'
commit

Или очистите зависшие сессии:

restart pppoe-server

RADIUS не отвечает

Проверка доступности:

ping 192.168.10.10

Тест RADIUS:

sudo apt install freeradius-utils
radtest username password 192.168.10.10:1812 0 secret

Проверьте firewall на RADIUS сервере (порты 1812, 1813 UDP).

Проверьте shared secret в конфигурации VyOS и RADIUS.

Скорость ограничена неправильно

Проверьте rate-limit в конфигурации:

show service pppoe-server authentication local-users username user1

Для RADIUS проверьте атрибуты в ответе:

radtest -t pap user1 password 192.168.10.10 0 secret

Убедитесь что RADIUS возвращает Filter-Id с правильным форматом:

Filter-Id = "rate-limit=102400/51200"

Сессии обрываются

Проверьте LCP echo параметры:

show service pppoe-server ppp-options

Увеличьте таймауты:

set service pppoe-server ppp-options lcp-echo-interval '60'
set service pppoe-server ppp-options lcp-echo-failure '5'
commit

Проверьте idle timeout:

set service pppoe-server limits idle-timeout '0'

Значение 0 отключает idle timeout.

MTU проблемы

Клиенты жалуются на проблемы с некоторыми сайтами (обычно HTTPS).

Уменьшите MTU:

set service pppoe-server ppp-options mtu '1480'
set service pppoe-server ppp-options mru '1480'
commit

На клиентской стороне также может потребоваться настройка MSS clamping:

set firewall ipv4 forward filter rule 100 action accept
set firewall ipv4 forward filter rule 100 protocol tcp
set firewall ipv4 forward filter rule 100 tcp flags syn
set firewall ipv4 forward filter rule 100 tcp mss 1400-1460

IPv6 не работает

Проверьте что IPv6 разрешен:

show service pppoe-server ppp-options ipv6

Проверьте IPv6 пулы:

show service pppoe-server client-ipv6-pool

Убедитесь что клиент запрашивает IPv6 (поддержка в PPPoE клиенте).

Интеграция с биллингом

FreeRADIUS интеграция

VyOS конфигурация:

set service pppoe-server authentication mode 'radius'
set service pppoe-server authentication radius server 192.168.1.10 key 'secret123'
set service pppoe-server authentication radius nas-identifier 'PPPoE-Server-1'

FreeRADIUS /etc/freeradius/3.0/clients.conf:

client vyos-pppoe {
    ipaddr = 192.168.1.1
    secret = secret123
    nastype = other
}

FreeRADIUS /etc/freeradius/3.0/mods-config/files/authorize:

# Пользователь с тарифом 100 Мбит/с
user1 Cleartext-Password := "password123"
    Framed-IP-Address := "10.1.1.100",
    Filter-Id := "rate-limit=102400/51200",
    Reply-Message := "Welcome to ISP Network"

UTM/Биллинг системы

Популярные биллинги для российских ISP:

  • UTM5 - интеграция через RADIUS
  • NetUP - RADIUS + API
  • ISPsystem BILLmanager - RADIUS + webhooks
  • Asterisk - RADIUS accounting

Пример интеграции через API (extended scripts):

/config/scripts/billing-session-start.sh:

#!/bin/bash
# Отправка события начала сессии в биллинг
curl -X POST "https://billing.isp.ru/api/v1/session/start" \
  -H "Authorization: Bearer API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{
    \"username\": \"$PEERNAME\",
    \"ip\": \"$IP\",
    \"mac\": \"$CALLING_SID\",
    \"interface\": \"$IFNAME\",
    \"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"
  }"

/config/scripts/billing-session-stop.sh:

#!/bin/bash
# Отправка события завершения сессии
curl -X POST "https://billing.isp.ru/api/v1/session/stop" \
  -H "Authorization: Bearer API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{
    \"username\": \"$PEERNAME\",
    \"interface\": \"$IFNAME\",
    \"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"
  }"

Настройка в VyOS:

set service pppoe-server extended-scripts on-up '/config/scripts/billing-session-start.sh'
set service pppoe-server extended-scripts on-down '/config/scripts/billing-session-stop.sh'

RADIUS Accounting

Для детального учета трафика и времени сессий RADIUS accounting автоматически работает при настроенном RADIUS.

RADIUS атрибуты в Accounting пакетах:

  • Acct-Session-Id - уникальный ID сессии
  • Acct-Input-Octets - входящий трафик (bytes)
  • Acct-Output-Octets - исходящий трафик (bytes)
  • Acct-Session-Time - длительность сессии (seconds)
  • Acct-Terminate-Cause - причина завершения

Accounting Update интервал (промежуточные обновления):

set service pppoe-server authentication radius acct-interim-interval '600'

Биллинг получит обновления каждые 600 секунд (10 минут).

Безопасность и лучшие практики

1. Используйте безопасные протоколы аутентификации

Избегайте PAP, используйте CHAP или MS-CHAPv2:

set service pppoe-server authentication protocols chap
set service pppoe-server authentication protocols mschap-v2

2. Ограничьте количество сессий

Одна сессия на пользователя:

set service pppoe-server session-control max-sessions '1'

3. Защита от DoS

Ограничьте burst подключений:

set service pppoe-server limits burst '10'

4. Используйте RADIUS для масштабирования

Для более 50 пользователей переходите на RADIUS вместо локальной аутентификации.

5. Мониторинг и алерты

Настройте уведомления при исчерпании IP пулов или недоступности RADIUS.

6. Резервирование RADIUS

Всегда настраивайте резервный RADIUS сервер:

set service pppoe-server authentication radius server 10.0.10.10 key 'secret'
set service pppoe-server authentication radius server 10.0.10.11 key 'secret'

7. Логирование

Сохраняйте логи для аудита и расследования инцидентов:

set service pppoe-server log level info

8. Firewall для управления

Ограничьте доступ к VyOS SSH/API только с доверенных сетей:

set firewall ipv4 input filter rule 10 action accept
set firewall ipv4 input filter rule 10 destination port 22
set firewall ipv4 input filter rule 10 protocol tcp
set firewall ipv4 input filter rule 10 source address 192.168.100.0/24

9. Регулярное обновление

Обновляйте VyOS для получения исправлений безопасности.

10. Резервное копирование

Автоматизируйте резервное копирование конфигурации:

save /config/backups/config-$(date +%Y%m%d).boot

Производительность и масштабирование

Оптимизация производительности

Kernel parameters

Для высоконагруженных систем (1000+ сессий) оптимизируйте ядро:

set system sysctl parameter net.core.rmem_max value '134217728'
set system sysctl parameter net.core.wmem_max value '134217728'
set system sysctl parameter net.core.netdev_max_backlog value '5000'
set system sysctl parameter net.ipv4.tcp_rmem value '4096 87380 67108864'
set system sysctl parameter net.ipv4.tcp_wmem value '4096 65536 67108864'

CPU affinity

Для многопроцессорных систем распределите нагрузку:

  • Используйте separate RX/TX queues на сетевой карте
  • Настройте IRQ affinity для сетевых интерфейсов

Масштабирование

До 500 сессий:

  • 2 CPU cores
  • 4 GB RAM
  • 1 Gbps network

До 2000 сессий:

  • 4 CPU cores
  • 8 GB RAM
  • 10 Gbps network

Более 5000 сессий:

  • 8+ CPU cores
  • 16+ GB RAM
  • 10+ Gbps network
  • Рассмотрите кластеризацию (несколько PPPoE серверов)

Load Balancing

Для очень больших инсталляций используйте несколько PPPoE серверов:

Метод 1: PADO Delay

set service pppoe-server pado-delay sessions '100'
set service pppoe-server pado-delay delay '500'

Если сервер имеет более 100 сессий, он добавит задержку 500ms перед отправкой PADO, давая другим серверам шанс ответить первыми.

Метод 2: L2TP LNS pool

Используйте L2TP LAC/LNS архитектуру для централизованного PPPoE терминирования.

Следующие шаги

  • VPN (L2TP, IPsec) - VPN сервисы
  • RADIUS Server - собственный RADIUS сервер на VyOS
  • NAT - NAT для клиентского трафика
  • Firewall - защита сети
  • QoS - управление полосой пропускания