# PPPoE - Point-to-Point Protocol over Ethernet

> Настройка PPPoE интерфейсов в VyOS для подключения к ISP провайдерам - аутентификация PAP/CHAP, маршрутизация, IPv6 dual-stack и DSL-соединения

Source: https://opennix.org/docs/vyos/interfaces/vyos-pppoe/


PPPoE (Point-to-Point Protocol over Ethernet) - это сетевой протокол для инкапсуляции PPP фреймов внутри Ethernet фреймов. PPPoE широко используется DSL провайдерами и интернет-провайдерами для предоставления услуг широкополосного доступа с аутентификацией, шифрованием и управлением соединением.

## Введение в PPPoE

### Что такое PPPoE?

PPPoE - это протокол, который:
- Инкапсулирует PPP фреймы в Ethernet фреймы
- Обеспечивает аутентификацию пользователя (PAP, CHAP, MS-CHAP, MS-CHAPv2)
- Управляет установкой и разрывом соединения
- Поддерживает динамическое назначение IP адресов
- Используется для DSL, FTTH, кабельных модемов

### Архитектура PPPoE

**Компоненты:**
- PPPoE Client - инициирует соединение (VyOS router)
- PPPoE Server - принимает соединение (ISP equipment)
- Access Concentrator (AC) - сервер провайдера
- DSL/Ethernet Modem - физическое устройство

**Этапы установки соединения:**
1. Discovery Stage - поиск Access Concentrator
   - PADI (Active Discovery Initiation)
   - PADO (Active Discovery Offer)
   - PADR (Active Discovery Request)
   - PADS (Active Discovery Session-confirmation)
2. PPP Session Stage - установка PPP сессии
   - LCP (Link Control Protocol)
   - Authentication (PAP/CHAP)
   - NCP (Network Control Protocol)
   - IP configuration

### Режимы работы

**Режим 1: Домашние пользователи (Transparent Mode)**
```
[Computer] ---- [DSL Modem with PPPoE] ---- [ISP]
                     (auto-connect)
```
- Модем автоматически устанавливает PPPoE соединение
- Получает приватный IP адрес (RFC 1918)
- Возможен double NAT

**Режим 2: Роутер VyOS (Bridge Mode)**
```
[LAN] ---- [VyOS Router] ---- [DSL Modem Bridge] ---- [ISP]
                PPPoE Client
```
- VyOS инициирует PPPoE соединение
- Модем работает в режиме моста
- Полный контроль над сетевой конфигурацией
- Один уровень NAT

### Когда использовать PPPoE?

**Рекомендуется для:**
- Подключение к DSL провайдеру
- FTTH (Fiber to the Home) соединения
- Кабельные модемы с PPPoE
- Любое подключение требующее ISP аутентификацию
- Соединения с динамическим IP от провайдера

**Применение:**
- Домашний интернет через DSL/FTTH
- Офисное подключение к провайдеру
- Резервное подключение через DSL
- Тестирование PPPoE инфраструктуры

## Конфигурация PPPoE

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

```bash
configure

# Создать PPPoE интерфейс
set interfaces pppoe pppoe0 source-interface eth0
set interfaces pppoe pppoe0 authentication username 'myuser@isp.ru'
set interfaces pppoe pppoe0 authentication password 'SecretPassword123'

# Использовать default route от ISP
set interfaces pppoe pppoe0 default-route auto

commit
save
```

**Результат:**
- PPPoE соединение через eth0
- Автоматическое получение IP адреса от ISP
- Default route указывает на PPPoE интерфейс

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

#### Source Interface

```bash
# Физический интерфейс для PPPoE
set interfaces pppoe pppoe0 source-interface eth0

# PPPoE через VLAN интерфейс
set interfaces ethernet eth0 vif 100
set interfaces pppoe pppoe0 source-interface eth0.100
```

**Важно:** Source interface должен быть:
- Физическим Ethernet интерфейсом
- VLAN sub-interface
- Bond интерфейсом
- В состоянии UP

#### Authentication

```bash
# Username и password от ISP
set interfaces pppoe pppoe0 authentication username 'user@provider.com'
set interfaces pppoe pppoe0 authentication password 'MyPassword'

# Plaintext password (не рекомендуется в production)
set interfaces pppoe pppoe0 authentication plaintext-password 'MyPassword'
```

**Типы аутентификации:**
- PAP (Password Authentication Protocol) - пароль в открытом виде
- CHAP (Challenge Handshake Authentication Protocol) - хеш пароля
- MS-CHAP, MS-CHAPv2 - Microsoft variants

VyOS автоматически согласует метод аутентификации с ISP.

#### IP Address Configuration

```bash
# Автоматическое получение IP от ISP (default)
set interfaces pppoe pppoe0

# Статический IP (если ISP предоставляет)
set interfaces pppoe pppoe0 address 203.0.113.10/32

# IPv6 через DHCPv6
set interfaces pppoe pppoe0 ipv6 address autoconf
set interfaces pppoe pppoe0 dhcpv6-options pd 0 interface eth1 address 1
set interfaces pppoe pppoe0 dhcpv6-options pd 0 length 56
```

#### Default Route

```bash
# Автоматически добавить default route через PPPoE
set interfaces pppoe pppoe0 default-route auto

# Явно указать default route
set interfaces pppoe pppoe0 default-route force

# Не добавлять default route
set interfaces pppoe pppoe0 default-route none

# Default route с метрикой
set interfaces pppoe pppoe0 default-route-distance 10
```

**Опции:**
- `auto` - добавить route если PPPoE - единственное подключение
- `force` - всегда добавлять route
- `none` - не добавлять route

#### MTU и MRU

```bash
# MTU (Maximum Transmission Unit)
set interfaces pppoe pppoe0 mtu 1492

# MRU (Maximum Receive Unit)
set interfaces pppoe pppoe0 mru 1492
```

**Рекомендации MTU:**
- Ethernet MTU: 1500 bytes
- PPPoE overhead: 8 bytes (PPPoE header + PPP header)
- Рекомендуемый MTU: 1492 bytes
- Некоторые ISP требуют MTU 1480-1490

**Автоматический TCP MSS clamping:**

```bash
# Установить TCP MSS для предотвращения фрагментации
set interfaces pppoe pppoe0 ip adjust-mss 1452
set interfaces pppoe pppoe0 ipv6 adjust-mss 1432
```

#### Connect on Demand

```bash
# Устанавливать соединение по требованию (при трафике)
set interfaces pppoe pppoe0 connect-on-demand

# Idle timeout - разорвать соединение после N секунд простоя
set interfaces pppoe pppoe0 idle-timeout 300

# Holdoff time - пауза перед повторным подключением
set interfaces pppoe pppoe0 holdoff 30
```

**Use case:** Экономия трафика, платные соединения

#### Service Name

```bash
# Указать конкретный service name (если ISP требует)
set interfaces pppoe pppoe0 service-name 'MY-SERVICE'

# Использовать любой доступный service
# (default behavior - не указывать service-name)
```

#### Access Concentrator

```bash
# Подключаться к конкретному AC (если несколько доступно)
set interfaces pppoe pppoe0 access-concentrator 'BRAS-01'
```

#### Interface Description

```bash
# Добавить описание
set interfaces pppoe pppoe0 description 'ISP Connection - Main Link'
```

#### Host-uniq Tag

```bash
# Уникальный тег для сессии (hex)
set interfaces pppoe pppoe0 host-uniq '0x12345678'
```

**Назначение:** Идентификация сессии на стороне клиента

#### Local and Remote IP

```bash
# Локальный IP адрес (обычно получается автоматически)
set interfaces pppoe pppoe0 local-address 192.168.100.1

# IP адрес удаленной стороны (ISP gateway)
set interfaces pppoe pppoe0 remote-address 192.168.100.254
```

**Примечание:** Обычно не требуется - IP адреса согласуются автоматически

## Практические сценарии

### Сценарий 1: Базовое DSL подключение

**Топология:**
```
[LAN 192.168.1.0/24] ---- [VyOS eth1] [VyOS eth0] ---- [DSL Modem Bridge] ---- [ISP]
                                           PPPoE
```

**Задача:** Настроить интернет-подключение через DSL провайдера

**Конфигурация:**

```bash
configure

# WAN интерфейс (к DSL модему)
set interfaces ethernet eth0 description 'DSL Modem'

# PPPoE соединение
set interfaces pppoe pppoe0 source-interface eth0
set interfaces pppoe pppoe0 authentication username 'user@dsl-provider.ru'
set interfaces pppoe pppoe0 authentication password 'MySecretPass'
set interfaces pppoe pppoe0 default-route auto
set interfaces pppoe pppoe0 mtu 1492
set interfaces pppoe pppoe0 description 'ISP Connection'

# LAN интерфейс
set interfaces ethernet eth1 address 192.168.1.1/24
set interfaces ethernet eth1 description 'LAN'

# NAT для выхода в интернет
set nat source rule 100 outbound-interface name pppoe0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade

# DHCP сервер для LAN
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 range 0 start 192.168.1.100
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 range 0 stop 192.168.1.200
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 option default-router 192.168.1.1
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 option name-server 8.8.8.8
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 option name-server 8.8.4.4

# DNS forwarding
set service dns forwarding listen-address 192.168.1.1
set service dns forwarding allow-from 192.168.1.0/24

commit
save
```

**Проверка:**

```bash
# Статус PPPoE интерфейса
show interfaces pppoe pppoe0

# Полученный IP адрес
show interfaces pppoe pppoe0 brief

# Default route
show ip route

# Тест connectivity
ping 8.8.8.8 interface pppoe0
```

### Сценарий 2: PPPoE через VLAN

**Топология:**
```
[VyOS] ---- eth0.100 (VLAN 100) ---- [Switch] ---- [ISP with VLAN tagging]
```

**Задача:** ISP требует VLAN 100 для PPPoE соединения

**Конфигурация:**

```bash
configure

# Создать VLAN интерфейс
set interfaces ethernet eth0 vif 100 description 'ISP VLAN'

# PPPoE через VLAN
set interfaces pppoe pppoe0 source-interface eth0.100
set interfaces pppoe pppoe0 authentication username 'customer@fiber-isp.ru'
set interfaces pppoe pppoe0 authentication password 'FiberPass123'
set interfaces pppoe pppoe0 default-route auto
set interfaces pppoe pppoe0 mtu 1492
set interfaces pppoe pppoe0 description 'Fiber ISP Connection'

# Service name если требуется
set interfaces pppoe pppoe0 service-name 'FIBER-100M'

commit
save
```

**Проверка VLAN:**

```bash
# Проверить VLAN интерфейс
show interfaces ethernet eth0 vif 100

# Проверить PPPoE
show interfaces pppoe pppoe0
```

### Сценарий 3: Dual PPPoE (два провайдера)

**Топология:**
```
                  ┌─ eth0 ── PPPoE0 ── [ISP-A Primary]
[VyOS Router] ────┤
                  └─ eth1 ── PPPoE1 ── [ISP-B Backup]
```

**Задача:** Резервирование через два DSL провайдера с failover

**Конфигурация:**

```bash
configure

# Основной ISP (eth0)
set interfaces pppoe pppoe0 source-interface eth0
set interfaces pppoe pppoe0 authentication username 'user@isp-a.ru'
set interfaces pppoe pppoe0 authentication password 'PasswordA'
set interfaces pppoe pppoe0 default-route-distance 10
set interfaces pppoe pppoe0 mtu 1492
set interfaces pppoe pppoe0 description 'ISP-A Primary'

# Резервный ISP (eth1)
set interfaces pppoe pppoe1 source-interface eth1
set interfaces pppoe pppoe1 authentication username 'user@isp-b.ru'
set interfaces pppoe pppoe1 authentication password 'PasswordB'
set interfaces pppoe pppoe1 default-route-distance 20
set interfaces pppoe pppoe1 mtu 1492
set interfaces pppoe pppoe1 description 'ISP-B Backup'

# NAT через оба интерфейса
set nat source rule 100 outbound-interface name pppoe0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade

set nat source rule 110 outbound-interface name pppoe1
set nat source rule 110 source address 192.168.1.0/24
set nat source rule 110 translation address masquerade

commit
save
```

**Логика failover:**
- Primary route через pppoe0 (distance 10)
- Backup route через pppoe1 (distance 20)
- При падении pppoe0 автоматический переход на pppoe1

**Проверка:**

```bash
# Routing table - должно быть два default route
show ip route

# Тест failover
# 1. Disconnect pppoe0
disconnect interface pppoe0

# 2. Проверить активный route
show ip route 0.0.0.0/0

# 3. Reconnect
connect interface pppoe0
```

### Сценарий 4: PPPoE с IPv6 и DHCPv6-PD

**Задача:** Получить IPv6 prefix от ISP и раздать в LAN

**Конфигурация:**

```bash
configure

# PPPoE с IPv4 и IPv6
set interfaces pppoe pppoe0 source-interface eth0
set interfaces pppoe pppoe0 authentication username 'user@ipv6-isp.ru'
set interfaces pppoe pppoe0 authentication password 'IPv6Password'
set interfaces pppoe pppoe0 default-route auto
set interfaces pppoe pppoe0 mtu 1492

# IPv6 autoconfig
set interfaces pppoe pppoe0 ipv6 address autoconf

# DHCPv6 Prefix Delegation
set interfaces pppoe pppoe0 dhcpv6-options pd 0 length 56
set interfaces pppoe pppoe0 dhcpv6-options pd 0 interface eth1 address 1
set interfaces pppoe pppoe0 dhcpv6-options pd 0 interface eth1 sla-id 1

# LAN интерфейс с IPv6
set interfaces ethernet eth1 address 192.168.1.1/24

# IPv6 Router Advertisement для LAN
set service router-advert interface eth1 prefix ::/64

commit
save
```

**Объяснение DHCPv6-PD:**
- `pd 0` - prefix delegation ID
- `length 56` - запросить /56 prefix от ISP
- `interface eth1` - назначить subnet на eth1
- `address 1` - использовать ::1 как адрес роутера
- `sla-id 1` - subnet ID из делегированного prefix

**Проверка IPv6:**

```bash
# IPv6 адрес PPPoE
show ipv6 interface pppoe0

# Делегированный prefix
show dhcpv6 client leases

# IPv6 routing
show ipv6 route

# Ping IPv6
ping 2001:4860:4860::8888 interface pppoe0
```

### Сценарий 5: Connect on Demand с Idle Timeout

**Задача:** Платное PPPoE соединение, подключаться только при необходимости

**Конфигурация:**

```bash
configure

# PPPoE с on-demand режимом
set interfaces pppoe pppoe0 source-interface eth0
set interfaces pppoe pppoe0 authentication username 'user@metered-isp.ru'
set interfaces pppoe pppoe0 authentication password 'MeteredPassword'
set interfaces pppoe pppoe0 default-route auto
set interfaces pppoe pppoe0 mtu 1492

# Connect on demand
set interfaces pppoe pppoe0 connect-on-demand

# Idle timeout 5 минут
set interfaces pppoe pppoe0 idle-timeout 300

# Holdoff 30 секунд перед reconnect
set interfaces pppoe pppoe0 holdoff 30

commit
save
```

**Поведение:**
1. Соединение устанавливается при появлении трафика
2. После 300 секунд без трафика - disconnect
3. Пауза 30 секунд перед следующим connect
4. Повторный connect при новом трафике

**Тестирование:**

```bash
# Проверить статус (должен быть down если idle)
show interfaces pppoe pppoe0

# Инициировать трафик
ping 8.8.8.8

# Проверить соединение (должно установиться)
show interfaces pppoe pppoe0

# Ждать 5 минут без трафика - disconnect
```

### Сценарий 6: PPPoE в VK Cloud

**Задача:** Использовать VyOS в VK Cloud для тестирования PPPoE сервера

**Топология:**
```
[VK Cloud VyOS Client] ---- [Private Network] ---- [VyOS PPPoE Server]
```

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

```bash
configure

# PPPoE client в облаке
set interfaces pppoe pppoe0 source-interface eth1
set interfaces pppoe pppoe0 authentication username 'testuser'
set interfaces pppoe pppoe0 authentication password 'TestPass123'
set interfaces pppoe pppoe0 default-route none
set interfaces pppoe pppoe0 mtu 1450
set interfaces pppoe pppoe0 description 'VK Cloud PPPoE Test'

commit
save
```

**Примечание для VK Cloud:**
- MTU в VK Cloud: 1500, использовать PPPoE MTU 1450
- PPPoE работает в private networks
- Для production используйте VPC peering вместо PPPoE

### Сценарий 7: Российские провайдеры DSL

**Конфигурация для типичного российского DSL провайдера:**

```bash
configure

# Ростелеком / МТС / Билайн DSL
set interfaces pppoe pppoe0 source-interface eth0
set interfaces pppoe pppoe0 authentication username 'login@provider'
set interfaces pppoe pppoe0 authentication password 'password'
set interfaces pppoe pppoe0 default-route auto
set interfaces pppoe pppoe0 mtu 1492

# Некоторые провайдеры требуют service-name
# set interfaces pppoe pppoe0 service-name 'Internet'

# LAN сеть
set interfaces ethernet eth1 address 192.168.0.1/24

# NAT
set nat source rule 100 outbound-interface name pppoe0
set nat source rule 100 source address 192.168.0.0/24
set nat source rule 100 translation address masquerade

# DNS от провайдера (автоматически через PPPoE)
set system name-server pppoe0

# DHCP для LAN
set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 range 0 start 192.168.0.100
set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 range 0 stop 192.168.0.200
set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 option default-router 192.168.0.1

commit
save
```

**Особенности российских провайдеров:**
- Часто используется MTU 1492
- Username формат: `login@provider` или `login`
- Некоторые требуют VLAN tagging
- IPTV может требовать отдельный VLAN

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

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

```bash
# Общая информация
show interfaces pppoe

# Детальная информация конкретного интерфейса
show interfaces pppoe pppoe0

# Brief вывод
show interfaces pppoe pppoe0 brief

# Статистика
show interfaces pppoe pppoe0 statistics
```

**Пример вывода:**

```
pppoe0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492
    inet 203.0.113.45 peer 203.0.113.1/32
    RX: bytes    packets  errors  dropped  overrun       mcast
        10485760    8192       0        0        0           0
    TX: bytes    packets  errors  dropped carrier collisions
         5242880    4096       0        0       0           0
```

### Operational Commands

```bash
# Disconnect PPPoE соединение
disconnect interface pppoe0

# Connect PPPoE соединение
connect interface pppoe0

# Проверить log сообщения PPPoE
show log | match pppoe

# Проверить authentication log
show log auth | match pppoe
```

### Debugging PPPoE

```bash
# Включить debug для PPPoE
debug pppoe interface pppoe0

# Просмотр debug вывода
show log tail

# Выключить debug
no debug pppoe interface pppoe0
```

**Debug информация включает:**
- Discovery packets (PADI, PADO, PADR, PADS)
- LCP negotiation
- Authentication attempts
- IP address assignment
- Keepalive packets

### Packet Capture

```bash
# Захват PPPoE трафика на source интерфейсе
monitor traffic interface eth0 filter "pppoe"

# Захват трафика на PPPoE интерфейсе
monitor traffic interface pppoe0

# Сохранить capture в файл
monitor traffic interface eth0 filter "pppoe" save /tmp/pppoe-capture.pcap
```

**Анализ в Wireshark:**
- PPPoE Discovery packets (0x8863)
- PPPoE Session packets (0x8864)
- LCP/CHAP/PAP frames
- IP packets внутри PPPoE

### Проверка DNS

```bash
# DNS servers полученные от ISP
show interfaces pppoe pppoe0 | grep "name-server"

# Тест DNS resolution
nslookup google.com
```

### Мониторинг производительности

```bash
# Bandwidth monitoring
monitor bandwidth interface pppoe0

# Real-time traffic statistics
show interfaces pppoe pppoe0 statistics

# Connection uptime
show interfaces pppoe pppoe0 | grep "uptime"
```

## Troubleshooting

### Проблема: PPPoE не устанавливает соединение

**Симптомы:**
- Интерфейс в состоянии DOWN
- Нет IP адреса

**Диагностика:**

```bash
# 1. Проверить source interface
show interfaces ethernet eth0

# Должен быть UP
# Если DOWN - проверить физическое подключение

# 2. Проверить PPPoE logs
show log | match pppoe

# 3. Включить debug
debug pppoe interface pppoe0

# 4. Попытка connect
connect interface pppoe0

# 5. Проверить debug вывод
show log tail
```

**Типичные причины:**

1. **Source interface DOWN:**
```bash
# Проверить link
show interfaces ethernet eth0
# Решение: проверить кабель, DSL модем
```

2. **Неверные credentials:**
```bash
# В логах: "authentication failed"
# Решение: проверить username/password
set interfaces pppoe pppoe0 authentication username 'correct-user'
set interfaces pppoe pppoe0 authentication password 'correct-pass'
commit
```

3. **DSL модем не в bridge mode:**
```bash
# Модем сам устанавливает PPPoE
# Решение: перевести модем в bridge mode (router mode -> bridge mode)
```

4. **VLAN требуется:**
```bash
# ISP требует VLAN tagging
# Решение: использовать VLAN интерфейс
set interfaces ethernet eth0 vif 100
set interfaces pppoe pppoe0 source-interface eth0.100
commit
```

### Проблема: Соединение устанавливается, но нет интернета

**Диагностика:**

```bash
# 1. Проверить IP адрес
show interfaces pppoe pppoe0
# Должен быть публичный IP или carrier-grade NAT IP (100.64.0.0/10)

# 2. Проверить default route
show ip route 0.0.0.0/0
# Должен указывать на pppoe0

# 3. Ping gateway ISP
ping 203.0.113.1 interface pppoe0

# 4. Ping public IP
ping 8.8.8.8 interface pppoe0

# 5. Проверить DNS
nslookup google.com

# 6. Проверить NAT
show nat source statistics
```

**Решения:**

1. **Нет default route:**
```bash
set interfaces pppoe pppoe0 default-route force
commit
```

2. **DNS не работает:**
```bash
# Использовать DNS от ISP
set system name-server pppoe0

# Или public DNS
set system name-server 8.8.8.8
set system name-server 8.8.4.4
commit
```

3. **NAT не настроен:**
```bash
set nat source rule 100 outbound-interface name pppoe0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade
commit
```

### Проблема: Частые disconnects/reconnects

**Симптомы:**
- PPPoE постоянно переподключается
- В логах: "LCP terminated"

**Диагностика:**

```bash
# 1. Проверить uptime
show interfaces pppoe pppoe0 | grep uptime

# 2. Проверить logs
show log | match "pppoe0"

# 3. Статистика errors
show interfaces pppoe pppoe0 statistics
```

**Причины и решения:**

1. **Проблемы DSL line:**
```bash
# Плохое качество линии, интерференция
# Решение: проверить DSL модем статистику, SNR, attenuation
# Контакт провайдера для проверки линии
```

2. **MTU problems:**
```bash
# Packets dropping из-за MTU
# Решение: уменьшить MTU
set interfaces pppoe pppoe0 mtu 1480
set interfaces pppoe pppoe0 ip adjust-mss 1440
commit
```

3. **ISP keepalive timeout:**
```bash
# ISP разрывает соединение из-за отсутствия трафика
# Если idle-timeout включен - отключить
delete interfaces pppoe pppoe0 idle-timeout
delete interfaces pppoe pppoe0 connect-on-demand
commit
```

4. **Duplicate MAC addresses:**
```bash
# Проверить нет ли другого устройства с таким же MAC на source interface
show interfaces ethernet eth0
```

### Проблема: Низкая скорость

**Диагностика:**

```bash
# 1. Bandwidth test через iperf3
# На сервере (публичный IP)
iperf3 -s

# На VyOS
iperf3 -c server-ip -i 1 -t 30

# 2. Проверить MTU
ping 8.8.8.8 size 1472 do-not-fragment interface pppoe0

# 3. Проверить CPU usage
show system resources

# 4. Interface statistics
show interfaces pppoe pppoe0 statistics
```

**Решения:**

1. **MTU fragmentation:**
```bash
# Path MTU Discovery
# Уменьшить MTU
set interfaces pppoe pppoe0 mtu 1480
set interfaces pppoe pppoe0 mru 1480
set interfaces pppoe pppoe0 ip adjust-mss 1440
commit
```

2. **Hardware offloading:**
```bash
# Включить offloading на source interface
set interfaces ethernet eth0 offload gso
set interfaces ethernet eth0 offload gro
set interfaces ethernet eth0 offload tso
commit
```

3. **QoS shaping (если ISP throttling):**
```bash
# Traffic shaping по скорости тарифа
set traffic-policy shaper ISP-LIMIT bandwidth 100mbit
set traffic-policy shaper ISP-LIMIT default bandwidth 100%

set interfaces pppoe pppoe0 traffic-policy out ISP-LIMIT
commit
```

### Проблема: IPv6 не работает

**Диагностика:**

```bash
# 1. Проверить IPv6 address
show ipv6 interface pppoe0

# 2. Проверить DHCPv6-PD
show dhcpv6 client leases

# 3. IPv6 routing
show ipv6 route

# 4. Ping IPv6
ping 2001:4860:4860::8888 interface pppoe0
```

**Решения:**

```bash
# Включить IPv6 autoconfig
set interfaces pppoe pppoe0 ipv6 address autoconf

# Настроить DHCPv6-PD
set interfaces pppoe pppoe0 dhcpv6-options pd 0 length 56
set interfaces pppoe pppoe0 dhcpv6-options pd 0 interface eth1 address 1

# Проверить ISP поддерживает IPv6
# Если нет - использовать tunnel broker (6in4, 6rd)
```

## Security Best Practices

### 1. Защита credentials

```bash
# Никогда не использовать plaintext-password в production
# Используйте password (автоматически хешируется)
set interfaces pppoe pppoe0 authentication password 'SecurePassword123!'

# Ограничить доступ к конфигурации
set system login user admin authentication plaintext-password 'AdminPassword'
set system login user admin level admin
```

### 2. Firewall на WAN

```bash
# Создать firewall для PPPoE интерфейса
set firewall name WAN-IN default-action drop
set firewall name WAN-IN rule 10 action accept
set firewall name WAN-IN rule 10 state established enable
set firewall name WAN-IN rule 10 state related enable

set firewall name WAN-IN rule 20 action drop
set firewall name WAN-IN rule 20 state invalid enable

# Применить к PPPoE
set interfaces pppoe pppoe0 firewall in name WAN-IN

commit
```

### 3. Ограничение входящих connections

```bash
# Разрешить только established/related
set firewall name WAN-IN default-action drop
set firewall name WAN-IN enable-default-log

set firewall name WAN-IN rule 10 action accept
set firewall name WAN-IN rule 10 state established enable
set firewall name WAN-IN rule 10 state related enable

set firewall name WAN-IN rule 999 action drop
set firewall name WAN-IN rule 999 log enable

commit
```

### 4. Rate limiting

```bash
# Защита от DDoS
set firewall name WAN-IN rule 5 action drop
set firewall name WAN-IN rule 5 protocol icmp
set firewall name WAN-IN rule 5 limit rate 10/second
set firewall name WAN-IN rule 5 limit burst 20

commit
```

### 5. Мониторинг подключений

```bash
# Логирование PPPoE events
set system syslog global facility all level info

# Отправка логов на syslog сервер
set system syslog host 192.168.1.100 facility all level warning

# Email alerts при disconnect
# (требует настройки mail relay)
```

## Performance Tuning

### 1. MTU Optimization

```bash
# Оптимальный MTU для PPPoE
set interfaces pppoe pppoe0 mtu 1492
set interfaces pppoe pppoe0 mru 1492

# TCP MSS clamping
set interfaces pppoe pppoe0 ip adjust-mss 1452
set interfaces pppoe pppoe0 ipv6 adjust-mss 1432

commit
```

### 2. Hardware Offloading

```bash
# Включить offloading на source interface
set interfaces ethernet eth0 offload gso
set interfaces ethernet eth0 offload gro
set interfaces ethernet eth0 offload sg
set interfaces ethernet eth0 offload tso

commit
```

### 3. Buffer Tuning

```bash
# Увеличить ring buffers (если NIC поддерживает)
# Проверить текущие значения
ethtool -g eth0

# Установить максимальные (через shell)
# ethtool -G eth0 rx 4096 tx 4096
```

### 4. QoS для VoIP/Gaming

```bash
# Priority queueing для низкой latency
set traffic-policy shaper GAMING class 10 match VoIP ip protocol udp
set traffic-policy shaper GAMING class 10 match VoIP ip source port 5060-5090
set traffic-policy shaper GAMING class 10 bandwidth 10%
set traffic-policy shaper GAMING class 10 priority 7

set traffic-policy shaper GAMING class 20 match Gaming ip dscp cs4
set traffic-policy shaper GAMING class 20 bandwidth 30%
set traffic-policy shaper GAMING class 20 priority 5

set traffic-policy shaper GAMING default bandwidth 60%
set traffic-policy shaper GAMING default priority 1

set interfaces pppoe pppoe0 traffic-policy out GAMING
commit
```

## Advanced Configuration

### Load Balancing через два PPPoE (Dual WAN)

```bash
configure

# PPPoE 1
set interfaces pppoe pppoe0 source-interface eth0
set interfaces pppoe pppoe0 authentication username 'user1@isp1.ru'
set interfaces pppoe pppoe0 authentication password 'Pass1'
set interfaces pppoe pppoe0 default-route none

# PPPoE 2
set interfaces pppoe pppoe1 source-interface eth1
set interfaces pppoe pppoe1 authentication username 'user2@isp2.ru'
set interfaces pppoe pppoe1 authentication password 'Pass2'
set interfaces pppoe pppoe1 default-route none

# Load balancing configuration
set load-balancing wan interface-health pppoe0 nexthop pppoe0
set load-balancing wan interface-health pppoe0 test 10 type ping
set load-balancing wan interface-health pppoe0 test 10 target 8.8.8.8

set load-balancing wan interface-health pppoe1 nexthop pppoe1
set load-balancing wan interface-health pppoe1 test 10 type ping
set load-balancing wan interface-health pppoe1 test 10 target 8.8.4.4

set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface pppoe0 weight 1
set load-balancing wan rule 1 interface pppoe1 weight 1

commit
save
```

### PPPoE Server на VyOS

VyOS может работать как PPPoE сервер:

```bash
configure

# PPPoE server
set service pppoe-server interface eth1
set service pppoe-server authentication mode local
set service pppoe-server authentication local-users username client1 password 'ClientPass1'
set service pppoe-server client-ip-pool start 10.255.0.2
set service pppoe-server client-ip-pool stop 10.255.0.254
set service pppoe-server gateway-address 10.255.0.1
set service pppoe-server name-server 8.8.8.8
set service pppoe-server name-server 8.8.4.4

commit
save
```

**Use case:** Предоставление PPPoE доступа клиентам

## Сравнение PPPoE vs DHCP vs Static IP

| Характеристика | PPPoE | DHCP | Static IP |
|---------------|-------|------|-----------|
| **Authentication** | Да (username/password) | Нет | Нет |
| **IP Assignment** | Динамический | Динамический | Статический |
| **Session Management** | Да (connect/disconnect) | Нет | Нет |
| **MTU** | 1492 (overhead 8 bytes) | 1500 | 1500 |
| **Setup Complexity** | Средняя | Низкая | Низкая |
| **Типичное использование** | DSL, FTTH | Home broadband, Cable | Business, Dedicated |
| **Overhead** | 8 bytes PPPoE + 2 bytes PPP | 0 bytes | 0 bytes |
| **ISP Control** | Высокий | Средний | Низкий |

**Когда выбрать PPPoE:**
- ISP требует аутентификацию
- DSL/ADSL подключение
- Нужен session control
- Multiple users sharing physical link

**Когда выбрать DHCP:**
- Cable modem
- Simple home connection
- Нет требований аутентификации

**Когда выбрать Static IP:**
- Business connections
- Нужен постоянный IP
- Server hosting
- VPN endpoints

## Best Practices

### 1. Naming Convention

```bash
# Используйте понятные имена
set interfaces pppoe pppoe0 description 'ISP-Rostelecom-Primary'
set interfaces pppoe pppoe1 description 'ISP-MTS-Backup'
```

### 2. MTU Configuration

```bash
# Всегда настраивайте MTU и MSS
set interfaces pppoe pppoe0 mtu 1492
set interfaces pppoe pppoe0 ip adjust-mss 1452

# Тест оптимального MTU
ping 8.8.8.8 size 1472 do-not-fragment interface pppoe0
```

### 3. Monitoring и Alerting

```bash
# Syslog для tracking events
set system syslog global facility all level info
set system syslog host 192.168.1.100 facility all level warning

# SNMP monitoring
set service snmp community public authorization ro
set service snmp community public network 192.168.1.0/24
```

### 4. Backup Configuration

```bash
# Регулярный backup конфигурации
show configuration commands | save /config/backup-$(date +%Y%m%d).conf

# Или automated backup
# Настроить в cron или external script
```

### 5. Security

```bash
# Firewall на WAN обязателен
set firewall name WAN-IN default-action drop
set firewall name WAN-IN rule 10 action accept
set firewall name WAN-IN rule 10 state established enable
set firewall name WAN-IN rule 10 state related enable

set interfaces pppoe pppoe0 firewall in name WAN-IN
```

### 6. Documentation

```bash
# Документируйте все в description
set interfaces pppoe pppoe0 description 'Main ISP - Contract #12345 - Support 8-800-XXX'
```

## Миграция с VyOS 1.4 на 1.5

PPPoE конфигурация совместима между версиями:

**VyOS 1.4:**
```bash
set interfaces pppoe pppoe0 source-interface eth0
set interfaces pppoe pppoe0 user-id 'username'
set interfaces pppoe pppoe0 password 'password'
```

**VyOS 1.5:**
```bash
set interfaces pppoe pppoe0 source-interface eth0
set interfaces pppoe pppoe0 authentication username 'username'
set interfaces pppoe pppoe0 authentication password 'password'
```

**Migration script:**
```bash
# Старая конфигурация (1.4) автоматически конвертируется
# Рекомендуется использовать новый синтаксис (authentication username/password)
```

## Заключение

PPPoE остается важным протоколом для подключения к интернет-провайдерам:

**Преимущества:**
- Встроенная аутентификация
- Session management
- Широкая поддержка провайдерами
- Поддержка IPv6 и DHCPv6-PD

**Применение:**
- DSL/ADSL подключения
- FTTH (Fiber to the Home)
- Кабельные модемы с PPPoE
- ISP connections с аутентификацией

**Лучшие практики:**
- Правильная настройка MTU (1492) и MSS clamping
- Firewall на WAN интерфейсе
- Monitoring и logging
- Резервирование через dual PPPoE
- Regular backup конфигурации

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

## Дополнительные ресурсы

- [VyOS PPPoE Documentation](https://docs.vyos.io/en/latest/configuration/interfaces/pppoe.html)
- [RFC 2516 - PPPoE Protocol](https://tools.ietf.org/html/rfc2516)
- [PPP Protocol - RFC 1661](https://tools.ietf.org/html/rfc1661)
- [CHAP Authentication - RFC 1994](https://tools.ietf.org/html/rfc1994)
- [DHCPv6 Prefix Delegation - RFC 8415](https://tools.ietf.org/html/rfc8415)

