# SSTP Client - Secure Socket Tunneling Protocol

> SSTP Client в VyOS - безопасный VPN через SSL/TLS на порту 443 для обхода файрволов, аутентификация и интеграция с Windows SSTP-серверами

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


SSTP (Secure Socket Tunneling Protocol) - это VPN протокол, который транспортирует PPP трафик через SSL/TLS канал. SSTP использует TCP порт 443 по умолчанию, что позволяет ему проходить через большинство файрволов и прокси-серверов, которые обычно блокируют другие VPN протоколы.

## Введение в SSTP

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

SSTP - это проприетарный протокол Microsoft, который:
- Инкапсулирует PPP трафик внутри SSL/TLS соединения
- Использует TCP порт 443 (стандартный HTTPS порт)
- Обеспечивает transport-level безопасность
- Поддерживает key negotiation и шифрование
- Проверяет целостность трафика
- Легко проходит через файрволы и NAT

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

**Компоненты:**
- SSTP Client - инициирует соединение (VyOS router)
- SSTP Server - принимает соединение (Windows Server, VyOS, другие)
- SSL/TLS layer - обеспечивает шифрование
- PPP layer - транспортный протокол
- HTTP/HTTPS - базовый транспорт

**Этапы установки соединения:**
1. TCP handshake на порт 443
2. TLS handshake - установка SSL сессии
3. HTTP negotiation - SSTP protocol negotiation
4. PPP session - установка PPP соединения
5. Authentication - PAP/CHAP/MS-CHAP
6. IP configuration - получение IP адреса

### Преимущества SSTP

**Обход ограничений:**
- Использует порт 443 (HTTPS) - не блокируется файрволами
- Проходит через HTTP прокси
- Работает через NAT без дополнительной настройки
- Выглядит как обычный HTTPS трафик

**Безопасность:**
- SSL/TLS шифрование (AES-256)
- Certificate-based authentication
- Защита от MITM атак
- Проверка целостности данных

**Применение:**
- Удаленный доступ через ограничивающие файрволы
- Корпоративные сети с жесткими политиками
- Публичные Wi-Fi сети с блокировкой VPN
- Backup VPN канал (всегда доступный)

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

**Рекомендуется для:**
- Подключение из сетей с ограничивающими файрволами
- Публичные Wi-Fi с блокировкой VPN портов
- Корпоративные сети с белым списком портов
- Backup канал когда IPsec/OpenVPN/WireGuard заблокированы
- Совместимость с Windows Server SSTP

**Применение:**
- Remote access VPN для сотрудников
- Site-to-Site VPN через ограничивающие ISP
- Bypass censorship и DPI (Deep Packet Inspection)
- Резервный VPN канал

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

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

```bash
configure

# Создать SSTP интерфейс
set interfaces sstpc sstpc0 server 'vpn.example.com'
set interfaces sstpc sstpc0 authentication username 'myuser'
set interfaces sstpc sstpc0 authentication password 'SecretPassword123'

# SSL certificate verification (если self-signed - отключить)
set interfaces sstpc sstpc0 ssl ca-certificate 'VPN-CA'

# Автоматический default route
set interfaces sstpc sstpc0 default-route auto

commit
save
```

**Результат:**
- SSTP соединение к vpn.example.com:443
- Автоматическое получение IP адреса от сервера
- Default route через SSTP туннель
- SSL/TLS шифрование

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

#### Server

```bash
# FQDN сервера
set interfaces sstpc sstpc0 server 'vpn.company.com'

# IP адрес сервера
set interfaces sstpc sstpc0 server '203.0.113.10'

# Сервер с нестандартным портом (если не 443)
# SSTP всегда использует порт 443, изменение не поддерживается
```

**Важно:** Сервер должен быть доступен по FQDN или IP на порту 443/TCP.

#### Authentication

```bash
# Username и password
set interfaces sstpc sstpc0 authentication username 'user@domain.com'
set interfaces sstpc sstpc0 authentication password 'MyPassword'
```

**Типы аутентификации:**
- PAP (Password Authentication Protocol) - не рекомендуется
- CHAP (Challenge Handshake Authentication Protocol)
- MS-CHAP v2 (Microsoft CHAP) - рекомендуется для Windows Server

VyOS автоматически согласует метод с сервером.

#### SSL Certificate

```bash
# CA certificate для проверки сервера
set interfaces sstpc sstpc0 ssl ca-certificate 'VPN-CA'

# Если self-signed сертификат - можно пропустить проверку
# (не рекомендуется в production)
# Просто не указывать ca-certificate
```

**Импорт CA certificate:**

```bash
# Загрузить CA cert на VyOS
configure
set pki ca VPN-CA certificate 'MIIDXTCCAkWgAwIBAgIJ...'
commit
```

Или загрузить файл:

```bash
# Скопировать файл на VyOS
scp ca.crt vyos@router:/tmp/

# Импортировать
vyos@router# configure
vyos@router# load /config/auth/ca.crt
```

#### Default Route

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

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

# Не добавлять default route (split-tunnel)
set interfaces sstpc sstpc0 no-default-route

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

**Опции:**
- `auto` - добавить route если SSTP единственное подключение
- `force` - всегда добавлять route
- `no-default-route` - не добавлять route (split-tunnel)

#### MTU

```bash
# MTU (Maximum Transmission Unit)
set interfaces sstpc sstpc0 mtu 1452
```

**Рекомендации MTU:**
- Ethernet MTU: 1500 bytes
- SSTP overhead: ~48 bytes (PPP + SSL/TLS + TCP + IP headers)
- Рекомендуемый MTU: 1452 bytes
- Для низкоскоростных каналов: 1400 bytes

**TCP MSS clamping:**

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

#### DNS Configuration

```bash
# Получать DNS от SSTP сервера (default)
# (автоматически через PPP negotiation)

# Не использовать DNS от сервера
set interfaces sstpc sstpc0 no-peer-dns
```

#### VRF Support

```bash
# Поместить SSTP интерфейс в VRF
set interfaces sstpc sstpc0 vrf MANAGEMENT
```

**Use case:** Изоляция management трафика через отдельный VPN.

#### Interface Description

```bash
# Добавить описание
set interfaces sstpc sstpc0 description 'Corporate VPN - Main Link'
```

#### IP Configuration

```bash
# Автоматическое получение IP от сервера (default)
# (через PPP negotiation)

# Статический IP (если сервер требует)
# SSTP обычно использует dynamic IP assignment
```

#### Disable Interface

```bash
# Временно отключить интерфейс
set interfaces sstpc sstpc0 disable

# Включить обратно
delete interfaces sstpc sstpc0 disable
commit
```

#### Source Validation

```bash
# Настроить source validation
set interfaces sstpc sstpc0 ip disable-forwarding
set interfaces sstpc sstpc0 ip source-validation strict
set interfaces sstpc sstpc0 ip source-validation loose
set interfaces sstpc sstpc0 ip source-validation disable
```

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

### Сценарий 1: Remote Access VPN через ограничивающий файрвол

**Топология:**
```
[User Laptop] ---- [Restrictive Firewall] ---- [Internet] ---- [SSTP Server]
                    (only port 443 allowed)
```

**Задача:** Подключиться к корпоративной сети из публичного Wi-Fi, который блокирует все порты кроме 80/443.

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

```bash
configure

# SSTP интерфейс
set interfaces sstpc sstpc0 server 'vpn.company.com'
set interfaces sstpc sstpc0 authentication username 'employee@company.com'
set interfaces sstpc sstpc0 authentication password 'StrongPassword!23'
set interfaces sstpc sstpc0 ssl ca-certificate 'COMPANY-CA'
set interfaces sstpc sstpc0 default-route auto
set interfaces sstpc sstpc0 mtu 1452
set interfaces sstpc sstpc0 description 'Corporate VPN'

# LAN интерфейс (для клиентов за VyOS)
set interfaces ethernet eth1 address 192.168.1.1/24

# NAT для LAN через SSTP
set nat source rule 100 outbound-interface name sstpc0
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

commit
save
```

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

```bash
# Статус SSTP интерфейса
show interfaces sstpc sstpc0

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

# Default route
show ip route

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

### Сценарий 2: Site-to-Site VPN через SSTP

**Топология:**
```
[Branch Office VyOS] ---- SSTP ---- [HQ SSTP Server]
 192.168.2.0/24                      192.168.1.0/24
```

**Задача:** Соединить филиал с головным офисом через SSTP (ISP блокирует IPsec).

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

```bash
configure

# WAN интерфейс
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 description 'WAN - ISP'

# SSTP к головному офису
set interfaces sstpc sstpc0 server 'hq-vpn.company.com'
set interfaces sstpc sstpc0 authentication username 'branch-office-1'
set interfaces sstpc sstpc0 authentication password 'BranchPass123!'
set interfaces sstpc sstpc0 ssl ca-certificate 'HQ-VPN-CA'
set interfaces sstpc sstpc0 no-default-route
set interfaces sstpc sstpc0 mtu 1452
set interfaces sstpc sstpc0 description 'VPN to HQ'

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

# Статический маршрут к HQ сети через SSTP
# (предполагая что SSTP server выдает 10.10.0.x адреса)
set protocols static route 192.168.1.0/24 interface sstpc0

# NAT для интернета через WAN
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 192.168.2.0/24
set nat source rule 100 translation address masquerade

# DHCP для LAN
set service dhcp-server shared-network-name LAN subnet 192.168.2.0/24 range 0 start 192.168.2.100
set service dhcp-server shared-network-name LAN subnet 192.168.2.0/24 range 0 stop 192.168.2.200
set service dhcp-server shared-network-name LAN subnet 192.168.2.0/24 option default-router 192.168.2.1

# DNS forwarding
set service dns forwarding listen-address 192.168.2.1
set service dns forwarding allow-from 192.168.2.0/24

commit
save
```

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

```bash
# SSTP соединение
show interfaces sstpc sstpc0

# Routing table
show ip route

# Ping HQ сети
ping 192.168.1.1 source-address 192.168.2.1
```

### Сценарий 3: Dual VPN (SSTP + WireGuard Failover)

**Топология:**
```
                 ┌─ WireGuard (Primary, fast)
[VyOS Router] ───┤
                 └─ SSTP (Backup, always works)
```

**Задача:** Основной канал через WireGuard для производительности, SSTP как резервный на случай блокировки.

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

```bash
configure

# Primary VPN: WireGuard
set interfaces wireguard wg0 address 10.10.0.1/30
set interfaces wireguard wg0 port 51820
set interfaces wireguard wg0 private-key 'WIREGUARD_PRIVATE_KEY'
set interfaces wireguard wg0 peer hq public-key 'HQ_PUBLIC_KEY'
set interfaces wireguard wg0 peer hq allowed-ips '10.10.0.2/32'
set interfaces wireguard wg0 peer hq allowed-ips '192.168.1.0/24'
set interfaces wireguard wg0 peer hq address 'vpn.company.com'
set interfaces wireguard wg0 peer hq port 51820
set interfaces wireguard wg0 description 'Primary VPN - WireGuard'

# Backup VPN: SSTP
set interfaces sstpc sstpc0 server 'vpn.company.com'
set interfaces sstpc sstpc0 authentication username 'backup-vpn@company.com'
set interfaces sstpc sstpc0 authentication password 'BackupVPN!Pass'
set interfaces sstpc sstpc0 ssl ca-certificate 'COMPANY-CA'
set interfaces sstpc sstpc0 no-default-route
set interfaces sstpc sstpc0 mtu 1452
set interfaces sstpc sstpc0 description 'Backup VPN - SSTP'

# Статические маршруты с метриками
# WireGuard - lower distance (preferred)
set protocols static route 192.168.1.0/24 interface wg0
set protocols static route 192.168.1.0/24 interface wg0 distance 10

# SSTP - higher distance (backup)
set protocols static route 192.168.1.0/24 interface sstpc0
set protocols static route 192.168.1.0/24 interface sstpc0 distance 20

commit
save
```

**Логика failover:**
- WireGuard используется по умолчанию (distance 10)
- При падении WireGuard трафик автоматически переключается на SSTP (distance 20)
- SSTP всегда работает т.к. использует порт 443

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

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

# Проверить активный маршрут
show ip route

# Симуляция failover
disconnect interface wg0

# Проверить переключение на SSTP
show ip route 192.168.1.0/24
```

### Сценарий 4: SSTP через HTTP Proxy

**Задача:** Подключиться к VPN через корпоративный HTTP прокси.

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

```bash
configure

# SSTP поддерживает HTTP CONNECT proxy
# Конфигурация proxy в VyOS 1.4/1.5 может потребовать дополнительных настроек

# Базовый SSTP
set interfaces sstpc sstpc0 server 'vpn.company.com'
set interfaces sstpc sstpc0 authentication username 'user@company.com'
set interfaces sstpc sstpc0 authentication password 'Password123'
set interfaces sstpc sstpc0 ssl ca-certificate 'COMPANY-CA'

commit
save
```

**Примечание:** VyOS SSTP client может не поддерживать HTTP proxy напрямую. В этом случае используйте:
- Прямое подключение (если доступно)
- SSH tunnel через прокси + SSTP поверх
- Другой VPN протокол (OpenVPN с http-proxy)

### Сценарий 5: SSTP в Yandex Cloud

**Задача:** Подключить VyOS в Yandex Cloud к корпоративному SSTP серверу.

**Топология:**
```
[VyOS in Yandex Cloud] ---- [Internet] ---- [Corporate SSTP Server]
   10.128.0.5/24                              vpn.company.ru
```

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

```bash
configure

# WAN интерфейс (Yandex Cloud external IP)
set interfaces ethernet eth0 address 10.128.0.5/24
set interfaces ethernet eth0 description 'Yandex Cloud Network'

# SSTP к корпоративному серверу
set interfaces sstpc sstpc0 server 'vpn.company.ru'
set interfaces sstpc sstpc0 authentication username 'cloud-vyos@company.ru'
set interfaces sstpc sstpc0 authentication password 'CloudVPN!2024'
set interfaces sstpc sstpc0 ssl ca-certificate 'CORP-CA'
set interfaces sstpc sstpc0 no-default-route
set interfaces sstpc sstpc0 mtu 1420
set interfaces sstpc sstpc0 description 'VPN to Corporate Network'

# Маршруты к корпоративным сетям через SSTP
set protocols static route 192.168.0.0/16 interface sstpc0
set protocols static route 10.0.0.0/8 interface sstpc0

# Default route через Yandex Cloud gateway
set protocols static route 0.0.0.0/0 next-hop 10.128.0.1

# Firewall для исходящего SSTP
set firewall ipv4 name YANDEX-OUT default-action accept
set firewall ipv4 name YANDEX-OUT rule 100 action accept
set firewall ipv4 name YANDEX-OUT rule 100 destination port 443
set firewall ipv4 name YANDEX-OUT rule 100 protocol tcp

commit
save
```

**Особенности Yandex Cloud:**
- MTU в Yandex Cloud: 1500, используйте SSTP MTU 1420-1452
- SSTP работает через Yandex Cloud NAT gateway
- Не требуется дополнительных security group rules для исходящего порта 443

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

```bash
# SSTP статус
show interfaces sstpc sstpc0

# Ping корпоративной сети
ping 192.168.1.1 interface sstpc0

# Traceroute
traceroute 192.168.1.1
```

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

**Задача:** Подключить VyOS в VK Cloud к VPN серверу.

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

```bash
configure

# WAN интерфейс (VK Cloud private network)
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 description 'VK Cloud Network'

# SSTP к VPN серверу
set interfaces sstpc sstpc0 server 'vpn.example.ru'
set interfaces sstpc sstpc0 authentication username 'vkcloud-client'
set interfaces sstpc sstpc0 authentication password 'VKCloudVPN!123'
set interfaces sstpc sstpc0 ssl ca-certificate 'VPN-CA'
set interfaces sstpc sstpc0 default-route auto
set interfaces sstpc sstpc0 mtu 1450
set interfaces sstpc sstpc0 description 'VPN Connection'

# NAT для внутренних сетей через SSTP
set interfaces ethernet eth1 address 192.168.100.1/24

set nat source rule 100 outbound-interface name sstpc0
set nat source rule 100 source address 192.168.100.0/24
set nat source rule 100 translation address masquerade

commit
save
```

**Особенности VK Cloud:**
- MTU в VK Cloud: 1500, используйте SSTP MTU 1450
- SSTP работает через VK Cloud NAT
- Проверьте security groups для порта 443

### Сценарий 7: Split-Tunnel SSTP

**Задача:** Только корпоративный трафик через VPN, интернет напрямую.

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

```bash
configure

# SSTP без default route
set interfaces sstpc sstpc0 server 'vpn.company.com'
set interfaces sstpc sstpc0 authentication username 'user@company.com'
set interfaces sstpc sstpc0 authentication password 'Password123'
set interfaces sstpc sstpc0 ssl ca-certificate 'COMPANY-CA'
set interfaces sstpc sstpc0 no-default-route
set interfaces sstpc sstpc0 mtu 1452
set interfaces sstpc sstpc0 description 'Split-Tunnel VPN'

# Только корпоративные сети через SSTP
set protocols static route 192.168.0.0/16 interface sstpc0
set protocols static route 10.0.0.0/8 interface sstpc0

# Интернет через WAN
set interfaces ethernet eth0 address dhcp

# Default route через WAN
set protocols static route 0.0.0.0/0 dhcp-interface eth0

# NAT для интернета через WAN
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade

commit
save
```

**Преимущества split-tunnel:**
- Интернет трафик не загружает VPN
- Быстрее для пользователей
- Меньше нагрузка на VPN сервер

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

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

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

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

# Brief вывод
show interfaces sstpc sstpc0 brief

# Статистика
show interfaces sstpc sstpc0 statistics
```

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

```
sstpc0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1452
    inet 10.10.0.2 peer 10.10.0.1/32
    RX: bytes    packets  errors  dropped  overrun       mcast
        5242880    4096       0        0        0           0
    TX: bytes    packets  errors  dropped carrier collisions
        2621440    2048       0        0       0           0
```

### Operational Commands

```bash
# Connect SSTP соединение
connect interface sstpc0

# Disconnect SSTP соединение
disconnect interface sstpc0

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

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

### Debugging SSTP

```bash
# Логи SSTP в реальном времени
monitor log | match sstpc

# Системные логи
show log tail

# dmesg для kernel-level проблем
show log kernel tail
```

**Debug информация включает:**
- TCP connection establishment
- TLS handshake
- HTTP negotiation
- PPP LCP negotiation
- Authentication attempts
- IP address assignment

### Packet Capture

```bash
# Захват SSTP трафика (TCP port 443)
monitor traffic interface eth0 filter "tcp port 443 and host vpn.company.com"

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

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

**Анализ в Wireshark:**
- TCP SYN/ACK (3-way handshake)
- TLS Client/Server Hello
- TLS Certificate Exchange
- HTTP SSTP negotiation (после TLS)
- Encrypted PPP frames (после установки SSTP)

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

```bash
# DNS resolution для сервера
nslookup vpn.company.com

# Ping сервера
ping vpn.company.com

# Проверить порт 443
telnet vpn.company.com 443
```

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

```bash
# Bandwidth monitoring
monitor bandwidth interface sstpc0

# Real-time traffic statistics
show interfaces sstpc sstpc0 statistics

# Connection uptime
show interfaces sstpc sstpc0 | grep "uptime"
```

## Troubleshooting

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

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

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

```bash
# 1. Проверить DNS resolution
nslookup vpn.company.com

# 2. Проверить connectivity к серверу
ping vpn.company.com

# 3. Проверить порт 443
telnet vpn.company.com 443

# 4. Проверить SSTP logs
show log | match sstpc

# 5. Попытка connect
connect interface sstpc0

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

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

1. **Сервер недоступен:**
```bash
# В логах: "Connection refused" или "Timeout"
# Решение: проверить DNS, firewall, routing
ping vpn.company.com
traceroute vpn.company.com
```

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

3. **SSL Certificate проблемы:**
```bash
# В логах: "certificate verification failed" или "SSL handshake failed"
# Решение: проверить CA certificate

# Импортировать правильный CA cert
set pki ca VPN-CA certificate 'MIID...'
set interfaces sstpc sstpc0 ssl ca-certificate 'VPN-CA'

# Или отключить проверку (только для тестирования)
delete interfaces sstpc sstpc0 ssl ca-certificate
commit
```

4. **Firewall блокирует порт 443:**
```bash
# Проверить firewall
show firewall

# Разрешить исходящий порт 443
set firewall ipv4 name WAN-OUT rule 100 action accept
set firewall ipv4 name WAN-OUT rule 100 destination port 443
set firewall ipv4 name WAN-OUT rule 100 protocol tcp
commit
```

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

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

```bash
# 1. Проверить IP адрес
show interfaces sstpc sstpc0
# Должен быть IP адрес от сервера

# 2. Проверить default route
show ip route 0.0.0.0/0
# Должен указывать на sstpc0 (для full-tunnel)

# 3. Ping gateway SSTP сервера
ping 10.10.0.1 interface sstpc0

# 4. Ping public IP
ping 8.8.8.8 interface sstpc0

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

# 6. Проверить NAT (если используется)
show nat source statistics
```

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

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

2. **DNS не работает:**
```bash
# Использовать DNS от сервера (default)
delete interfaces sstpc sstpc0 no-peer-dns

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

3. **NAT не настроен (для LAN клиентов):**
```bash
set nat source rule 100 outbound-interface name sstpc0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade
commit
```

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

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

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

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

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

# 3. Статистика errors
show interfaces sstpc sstpc0 statistics
```

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

1. **Нестабильное интернет соединение:**
```bash
# Проверить WAN интерфейс
show interfaces ethernet eth0 statistics

# Проверить packet loss
ping 8.8.8.8 count 100

# Решение: исправить проблемы на WAN
```

2. **MTU problems:**
```bash
# Packets dropping из-за MTU
# Решение: уменьшить MTU
set interfaces sstpc sstpc0 mtu 1400
set interfaces sstpc sstpc0 ip adjust-mss 1360
commit
```

3. **Server timeout:**
```bash
# SSTP server разрывает неактивные соединения
# Решение: отправлять keepalive трафик или проверить настройки сервера
```

4. **SSL session timeout:**
```bash
# TLS session expiring
# Решение: проверить настройки SSL на сервере
```

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

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

```bash
# 1. Bandwidth test через iperf3
# На сервере
iperf3 -s

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

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

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

# 4. Interface statistics
show interfaces sstpc sstpc0 statistics
```

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

1. **MTU fragmentation:**
```bash
# Path MTU Discovery
# Уменьшить MTU
set interfaces sstpc sstpc0 mtu 1400
set interfaces sstpc sstpc0 ip adjust-mss 1360
commit
```

2. **TCP over TCP problem:**
```bash
# SSTP использует TCP (PPP over SSL over TCP)
# TCP-over-TCP может вызывать проблемы производительности
# Решение: использовать UDP-based VPN (WireGuard, OpenVPN UDP) для лучшей производительности
```

3. **Server overload:**
```bash
# Сервер перегружен
# Решение: проверить load на сервере, добавить capacity
```

### Проблема: SSL Certificate errors

**Симптомы:**
- "certificate verification failed"
- "SSL handshake error"

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

```bash
# 1. Проверить сертификат сервера
openssl s_client -connect vpn.company.com:443 -showcerts

# 2. Проверить CA certificate в VyOS
show pki ca VPN-CA

# 3. Проверить logs
show log | match "ssl"
```

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

```bash
# 1. Импортировать правильный CA cert
# Получить CA cert от администратора сервера
set pki ca VPN-CA certificate 'MIIDXTCCAkWgAwIBAgIJ...'
set interfaces sstpc sstpc0 ssl ca-certificate 'VPN-CA'
commit

# 2. Для self-signed сертификата (только testing)
delete interfaces sstpc sstpc0 ssl ca-certificate
commit

# 3. Проверить hostname в сертификате
# FQDN в server должен совпадать с CN в сертификате
set interfaces sstpc sstpc0 server 'vpn.company.com'  # не IP адрес
commit
```

## Security Best Practices

### 1. Использование сертификатов

```bash
# Всегда проверяйте SSL сертификат в production
set interfaces sstpc sstpc0 ssl ca-certificate 'TRUSTED-CA'

# Не отключайте проверку сертификата без веской причины
```

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

```bash
# Используйте сильные пароли
set interfaces sstpc sstpc0 authentication password 'ComplexP@ssw0rd!2024'

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

### 3. Firewall на интерфейсе

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

set firewall ipv4 name SSTP-IN rule 20 action drop
set firewall ipv4 name SSTP-IN rule 20 state invalid

# Применить к SSTP интерфейсу
set interfaces sstpc sstpc0 firewall in name SSTP-IN

commit
```

### 4. Ограничение трафика

```bash
# Rate limiting для защиты от abuse
set firewall ipv4 name SSTP-IN rule 5 action accept
set firewall ipv4 name SSTP-IN rule 5 protocol icmp
set firewall ipv4 name SSTP-IN rule 5 limit rate 10/second

commit
```

### 5. Мониторинг соединений

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

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

commit
```

### 6. Split-tunnel для безопасности

```bash
# Используйте split-tunnel когда возможно
# Только корпоративный трафик через VPN
set interfaces sstpc sstpc0 no-default-route
set protocols static route 192.168.0.0/16 interface sstpc0

# Интернет через локальное соединение
```

## Performance Tuning

### 1. MTU Optimization

```bash
# Оптимальный MTU для SSTP
set interfaces sstpc sstpc0 mtu 1452

# TCP MSS clamping
set interfaces sstpc sstpc0 ip adjust-mss 1412
set interfaces sstpc sstpc0 ipv6 adjust-mss 1392

commit
```

### 2. QoS для критичного трафика

```bash
# Priority queueing для VoIP через SSTP
set traffic-policy shaper SSTP-QOS bandwidth 100mbit
set traffic-policy shaper SSTP-QOS class 10 match VoIP ip protocol udp
set traffic-policy shaper SSTP-QOS class 10 match VoIP ip source port 5060-5090
set traffic-policy shaper SSTP-QOS class 10 bandwidth 10%
set traffic-policy shaper SSTP-QOS class 10 priority 7

set traffic-policy shaper SSTP-QOS default bandwidth 90%
set traffic-policy shaper SSTP-QOS default priority 1

set interfaces sstpc sstpc0 traffic-policy out SSTP-QOS
commit
```

### 3. Connection Optimization

```bash
# Использовать DNS от сервера для быстрого resolution
delete interfaces sstpc sstpc0 no-peer-dns

# Оптимизировать TCP параметры (системный уровень)
# Требует shell access
```

## Сравнение SSTP с другими VPN

| Характеристика | SSTP | IPsec | OpenVPN | WireGuard |
|---------------|------|-------|---------|-----------|
| **Firewall bypass** | Отлично (443) | Плохо (UDP 500/4500) | Хорошо (настраиваемый) | Средне (UDP) |
| **Производительность** | Средне | Хорошо | Удовлетворительно | Отлично |
| **Безопасность** | Отлично (SSL/TLS) | Отлично | Хорошо | Отлично |
| **Совместимость** | Windows native | Отлично | Отлично | Хорошо |
| **NAT traversal** | Отлично | Сложно | Отлично | Отлично |
| **Setup Complexity** | Средняя | Сложно | Средне | Простая |
| **TCP overhead** | Высокий (TCP over TCP) | Низкий | Средний (UDP mode) | Низкий |

**Когда выбрать SSTP:**
- Нужен bypass строгих файрволов (только 443 разрешен)
- Windows Server infrastructure
- Публичные Wi-Fi с блокировкой VPN
- Резервный канал когда другие VPN заблокированы

**Когда НЕ выбирать SSTP:**
- Нужна максимальная производительность (выбрать WireGuard)
- Высокая latency критична (TCP-over-TCP проблема)
- Non-Windows environment (выбрать OpenVPN/WireGuard)

## Best Practices

### 1. Naming Convention

```bash
# Используйте понятные имена
set interfaces sstpc sstpc0 description 'Corporate VPN - Primary'
set interfaces sstpc sstpc1 description 'Backup VPN - Secondary'
```

### 2. MTU Configuration

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

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

### 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

# Script для automated backup
```

### 5. Certificate Management

```bash
# Регулярно обновляйте CA certificates
# Проверяйте expiration dates
show pki ca VPN-CA

# Имейте backup CA certs
```

### 6. Documentation

```bash
# Документируйте все в description
set interfaces sstpc sstpc0 description 'Corporate SSTP - vpn.company.com - Port 443'
```

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

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

**VyOS 1.4:**
```bash
set interfaces sstpc sstpc0 server 'vpn.example.com'
set interfaces sstpc sstpc0 authentication username 'user'
set interfaces sstpc sstpc0 authentication password 'pass'
```

**VyOS 1.5:**
```bash
set interfaces sstpc sstpc0 server 'vpn.example.com'
set interfaces sstpc sstpc0 authentication username 'user'
set interfaces sstpc sstpc0 authentication password 'pass'
```

**Изменения:** Синтаксис остается тем же, миграция прозрачная.

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

SSTP предоставляет надежное VPN решение для сценариев с ограничивающими файрволами:

**Преимущества:**
- Bypass файрволов через порт 443
- SSL/TLS шифрование
- Работа через HTTP прокси
- Windows Server совместимость
- Простая настройка

**Применение:**
- Remote access VPN через ограничивающие сети
- Backup VPN канал (всегда доступный)
- Site-to-Site через ISP с блокировками
- Корпоративные сети с жесткими политиками

**Лучшие практики:**
- Правильная настройка MTU (1452) и MSS clamping
- SSL certificate verification в production
- Firewall rules для защиты
- Monitoring и logging
- Split-tunnel когда возможно
- Резервирование через dual VPN

SSTP в VyOS обеспечивает надежное VPN соединение в самых ограничивающих сетевых средах, являясь отличным дополнением к IPsec, OpenVPN и WireGuard для комплексной VPN стратегии.

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

- [VyOS SSTP Client Documentation](https://docs.vyos.io/en/latest/configuration/interfaces/sstp-client.html)
- [SSTP Protocol Specification - MS-SSTP](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sstp/)
- [SSL/TLS Best Practices](https://ssl-config.mozilla.org/)
- [PPP Protocol - RFC 1661](https://tools.ietf.org/html/rfc1661)
- [WireGuard VPN](/docs/vyos/vpn/vyos-wireguard/) - для сравнения
- [OpenVPN](/docs/vyos/vpn/vyos-openvpn/) - альтернативный VPN
- [IPsec VPN](/docs/vyos/vpn/vyos-ipsec/) - enterprise VPN

