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' disableRADIUS аутентификация
Интеграция с внешними 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 shapingFramed-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 papCHAP (Challenge Handshake Authentication Protocol)
Более безопасный challenge-response протокол:
set service pppoe-server authentication protocols chapMS-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.50IPv6 конфигурация
Включение IPv6
set service pppoe-server ppp-options ipv6 'allow'Режимы IPv6:
allow- разрешить IPv6 если клиент запрашиваетdeny- запретить IPv6require- требовать 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 download25000= 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- разрешить IPv4deny- запретить IPv4require- требовать IPv4
MPPE шифрование
Microsoft Point-to-Point Encryption:
set service pppoe-server ppp-options mppe 'prefer'Режимы:
require- требовать MPPEprefer- предпочитать MPPEdeny- запретить 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'
commitFTTB провайдер с 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'
commitFreeRADIUS конфигурация для тарифов (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-usersRADIUS:
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-serverRADIUS не отвечает
Проверка доступности:
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-1460IPv6 не работает
Проверьте что 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-v22. Ограничьте количество сессий
Одна сессия на пользователя:
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 info8. 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/249. Регулярное обновление
Обновляйте 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 - управление полосой пропускания