# RSA Keys - RSA ключи для аутентификации VPN

> Подробное руководство по настройке RSA-аутентификации для IPsec VPN в VyOS: генерация ключей, обмен, конфигурация Site-to-Site и Hub-and-Spoke топологий

Source: https://opennix.org/docs/vyos/vpn/vyos-rsa-keys/


## Обзор RSA-аутентификации для VPN

RSA-аутентификация представляет собой криптографический метод проверки подлинности для IPsec VPN туннелей в VyOS. В отличие от Pre-Shared Key (PSK) аутентификации, RSA использует асимметричную криптографию с парой публичного и приватного ключей, что обеспечивает повышенную безопасность и гибкость при настройке VPN-соединений.

### Основные преимущества RSA-аутентификации

**Безопасность:**
- Приватный ключ никогда не передается по сети
- Исключается риск компрометации единого общего ключа (PSK)
- Невозможность подбора ключа методом перебора
- Поддержка криптостойких ключей длиной 2048-4096 бит

**Масштабируемость:**
- Упрощенное управление ключами в больших сетях
- Не требуется изменение конфигурации при добавлении новых узлов (Hub-and-Spoke)
- Централизованное управление публичными ключами
- Легкая ротация ключей без изменения всей инфраструктуры

**Гибкость:**
- Поддержка динамических IP-адресов (Dynamic IP)
- Возможность использования доменных имен для идентификации
- Совместимость с различными топологиями (Site-to-Site, Hub-and-Spoke, Full-Mesh)
- Интеграция с PKI инфраструктурой

### Принцип работы RSA-аутентификации

RSA-аутентификация в IPsec VPN основана на следующих принципах:

1. **Генерация ключевой пары:** Каждый VPN-узел генерирует уникальную пару ключей (публичный и приватный)
2. **Обмен публичными ключами:** Публичные ключи безопасно обмениваются между узлами
3. **IKE Phase 1:** При установлении туннеля происходит взаимная аутентификация с использованием RSA-подписей
4. **Проверка подлинности:** Каждая сторона проверяет подлинность удаленного узла с помощью его публичного ключа
5. **Установление туннеля:** После успешной аутентификации устанавливается защищенный IPsec туннель

### Архитектурные сценарии использования

**Site-to-Site VPN:**
- Соединение двух офисов или дата-центров
- Статические или динамические IP-адреса
- Взаимная аутентификация обоих концов туннеля

**Hub-and-Spoke VPN:**
- Центральный офис (Hub) с несколькими филиалами (Spokes)
- Hub имеет статический IP, Spokes могут иметь динамические IP
- Централизованное управление ключами на Hub

**Full-Mesh VPN:**
- Множественные узлы, каждый соединен с каждым
- Требуется обмен публичными ключами между всеми узлами
- Оптимальная маршрутизация трафика без транзитных узлов

## Генерация ключевой пары RSA

### Базовая генерация ключей

VyOS использует встроенную PKI (Public Key Infrastructure) подсистему для управления ключами. Генерация RSA ключевой пары выполняется командой:

```bash
generate pki key-pair install <key-pair-name>
```

**Параметры генерации:**

- `<key-pair-name>`  - уникальное имя ключевой пары для идентификации в конфигурации
- По умолчанию генерируется RSA ключ длиной 2048 бит
- Система предложит установить пароль для шифрования приватного ключа (опционально)

**Пример генерации ключа:**

```bash
vyos@router1:~$ generate pki key-pair install router1-key
Enter private key passphrase:
Retype private key passphrase:
Private key stored as 'router1-key'
```

### Генерация ключей с расширенными параметрами

**Выбор длины ключа:**

VyOS поддерживает различную длину RSA ключей. Для генерации ключа определенной длины используйте команду:

```bash
generate pki key-pair type rsa length <bit-length> install <key-pair-name>
```

**Рекомендуемые длины ключей:**

- **2048 бит:** Базовый уровень безопасности, быстрая обработка
- **3072 бита:** Повышенная безопасность для корпоративных сетей
- **4096 бит:** Максимальная безопасность для критичных систем

**Пример генерации ключа 4096 бит:**

```bash
vyos@router1:~$ generate pki key-pair type rsa length 4096 install router1-key-4096
Enter private key passphrase:
Retype private key passphrase:
Private key stored as 'router1-key-4096'
```

### Генерация без шифрования приватного ключа

Для автоматизированных систем или тестовых окружений можно сгенерировать ключ без пароля:

```bash
generate pki key-pair install <key-pair-name> no-password
```

**Важно:** Незашифрованные приватные ключи представляют угрозу безопасности. Используйте этот вариант только в изолированных тестовых средах.

### Просмотр сгенерированных ключей

**Просмотр публичного ключа:**

```bash
show pki key-pair <key-pair-name> public
```

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

```
vyos@router1:~$ show pki key-pair router1-key public
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1qHLMXLMbz0Z0X+YoXr
+vRkZJmBYRf3UqL6QgPPExRsG5gN7j8FqXqVLxFZZQ9PVnQ4/BgL1JGsZWx2OcDr
... (остальная часть ключа) ...
-----END PUBLIC KEY-----
```

**Просмотр приватного ключа:**

```bash
show pki key-pair <key-pair-name> private
```

**Внимание:** Приватный ключ должен храниться в секрете. Никогда не передавайте приватный ключ третьим лицам.

### Сохранение ключей в файлы

Для обмена публичными ключами или резервного копирования можно экспортировать ключи в файлы:

```bash
show pki key-pair router1-key public | save /config/router1-public.key
show pki key-pair router1-key private | save /config/router1-private.key
```

## Обмен публичными ключами между маршрутизаторами

### Процесс обмена ключами

Для установления RSA-аутентифицированного VPN туннеля необходимо обменяться публичными ключами между маршрутизаторами:

1. **Экспорт публичного ключа с Router1:**

```bash
vyos@router1:~$ show pki key-pair router1-key public
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1qHLMXLMbz0Z0X+YoXr
+vRkZJmBYRf3UqL6QgPPExRsG5gN7j8FqXqVLxFZZQ9PVnQ4/BgL1JGsZWx2OcDr
K4Hd8XYzLmH5cN3vQ4FGBfQWx2yL8oPxRnE9K5vFmZqL8rN4TpWx6Q8vL2nR5F7K
... (полный публичный ключ) ...
-----END PUBLIC KEY-----
```

2. **Импорт публичного ключа на Router2:**

Скопируйте весь текст публичного ключа и импортируйте его на второй маршрутизатор:

```bash
vyos@router2# set pki key-pair router1-remote public key '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1qHLMXLMbz0Z0X+YoXr
... (весь публичный ключ одной строкой или построчно) ...
-----END PUBLIC KEY-----'
```

3. **Повторите процесс для Router2:**

Аналогично экспортируйте публичный ключ Router2 и импортируйте на Router1.

### Альтернативный метод: Импорт через файл

**На Router1 (экспорт):**

```bash
vyos@router1:~$ show pki key-pair router1-key public | save /config/router1-public.key
```

**Передача файла:**

Скопируйте файл `/config/router1-public.key` на Router2 любым безопасным способом (SCP, USB, безопасный канал).

**На Router2 (импорт):**

```bash
vyos@router2# loadkey pki key-pair router1-remote public /tmp/router1-public.key
```

Или вручную через конфигурацию:

```bash
vyos@router2# set pki key-pair router1-remote
vyos@router2# loadkey pki key-pair router1-remote public /tmp/router1-public.key
vyos@router2# commit
```

### Проверка импортированных ключей

**Просмотр всех ключевых пар:**

```bash
show pki key-pair
```

**Вывод:**

```
Key Pair Name    Type    Comment
---------------  ------  ---------
router1-key      rsa     Local key
router2-remote   rsa     Remote peer key
```

**Просмотр конкретного публичного ключа:**

```bash
show pki key-pair router2-remote public
```

## Управление публичными и приватными ключами

### Структура хранения ключей в VyOS

Ключи в VyOS хранятся в конфигурации под узлом `pki`:

```bash
pki {
    key-pair router1-key {
        private {
            key "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K..."
        }
        public {
            key "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5C..."
        }
    }
    key-pair router2-remote {
        public {
            key "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5C..."
        }
    }
}
```

**Важно:**
- Локальные ключевые пары содержат и public, и private части
- Удаленные ключи содержат только public часть
- Ключи хранятся в Base64 кодировке

### Добавление публичного ключа удаленного узла

**Через командную строку:**

```bash
configure
set pki key-pair <remote-key-name> public key '<публичный ключ>'
commit
save
```

**Пример:**

```bash
vyos@router1# set pki key-pair yc-datacenter-remote public key '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2pL5Hx7vN4Zm...
-----END PUBLIC KEY-----'
vyos@router1# commit
vyos@router1# save
```

### Удаление ключевой пары

**Удаление всей ключевой пары:**

```bash
configure
delete pki key-pair <key-pair-name>
commit
save
```

**Удаление только публичного ключа:**

```bash
configure
delete pki key-pair <key-pair-name> public
commit
save
```

**Внимание:** Перед удалением убедитесь, что ключ не используется в активных VPN туннелях.

### Ротация ключей

Регулярная ротация ключей повышает безопасность. Процесс ротации:

1. **Генерация новой ключевой пары:**

```bash
generate pki key-pair install router1-key-new
```

2. **Обмен новыми публичными ключами:**

Экспортируйте и импортируйте новые публичные ключи на удаленные узлы.

3. **Обновление конфигурации VPN:**

```bash
configure
set vpn ipsec authentication pki local-key router1-key-new
set vpn ipsec authentication pki rsa remote-key router2-key-new
commit
save
```

4. **Удаление старых ключей:**

После проверки работоспособности удалите старые ключи:

```bash
configure
delete pki key-pair router1-key
commit
save
```

### Резервное копирование ключей

**Экспорт конфигурации с ключами:**

```bash
show configuration commands | grep pki | save /config/pki-backup.txt
```

**Полное резервное копирование:**

```bash
save /config/config.boot.backup
```

**Восстановление:**

```bash
load /config/config.boot.backup
commit
```

## Конфигурация IPsec VPN с RSA-аутентификацией

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

IPsec VPN с RSA-аутентификацией в VyOS настраивается в следующих основных разделах:

1. **IKE Group**  - параметры IKE Phase 1 (аутентификация и обмен ключами)
2. **ESP Group**  - параметры IPsec Phase 2 (шифрование данных)
3. **VPN Interface**  - определение VPN интерфейса и параметров туннеля
4. **Authentication**  - настройка RSA-аутентификации
5. **Connection**  - параметры соединения и режимы работы

### Создание IKE Group

IKE Group определяет параметры для IKE Phase 1 (ISAKMP):

```bash
configure

set vpn ipsec ike-group IKE-RSA proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-RSA proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-RSA proposal 1 hash 'sha256'
set vpn ipsec ike-group IKE-RSA lifetime '28800'
set vpn ipsec ike-group IKE-RSA dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE-RSA dead-peer-detection interval '30'
set vpn ipsec ike-group IKE-RSA dead-peer-detection timeout '120'

commit
```

**Параметры:**

- **dh-group:** Diffie-Hellman группа (2, 5, 14, 15, 16, 19, 20)
  - Группа 14: 2048-bit MODP (рекомендуется минимум)
  - Группа 19: 256-bit ECP (современный стандарт)
  - Группа 20: 384-bit ECP (повышенная безопасность)

- **encryption:** Алгоритм шифрования (aes128, aes192, aes256, aes128gcm16, aes256gcm16)
- **hash:** Алгоритм хеширования (sha1, sha256, sha384, sha512)
- **lifetime:** Время жизни IKE SA в секундах (по умолчанию 28800 = 8 часов)
- **dead-peer-detection:** Обнаружение недоступного узла

### Создание ESP Group

ESP Group определяет параметры для IPsec Phase 2:

```bash
set vpn ipsec esp-group ESP-RSA proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-RSA proposal 1 hash 'sha256'
set vpn ipsec esp-group ESP-RSA lifetime '3600'
set vpn ipsec esp-group ESP-RSA pfs 'dh-group14'

commit
```

**Параметры:**

- **encryption:** Алгоритм шифрования данных
- **hash:** Алгоритм HMAC для целостности данных
- **lifetime:** Время жизни IPsec SA (по умолчанию 3600 = 1 час)
- **pfs (Perfect Forward Secrecy):** Генерация новых ключей при каждом переключении SA

### Конфигурация Site-to-Site VPN с RSA

**Сценарий:** Два офиса с статическими IP-адресами

**Топология:**
- Router1 (Офис А): 203.0.113.10, LAN 10.10.1.0/24
- Router2 (Офис Б): 198.51.100.20, LAN 10.10.2.0/24

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

```bash
configure

# IKE и ESP группы (как описано выше)
set vpn ipsec ike-group IKE-RSA proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-RSA proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-RSA proposal 1 hash 'sha256'

set vpn ipsec esp-group ESP-RSA proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-RSA proposal 1 hash 'sha256'

# Настройка site-to-site соединения
set vpn ipsec site-to-site peer office-b authentication mode 'rsa'
set vpn ipsec site-to-site peer office-b authentication rsa local-key 'router1-key'
set vpn ipsec site-to-site peer office-b authentication rsa remote-key 'router2-remote'
set vpn ipsec site-to-site peer office-b authentication local-id '203.0.113.10'
set vpn ipsec site-to-site peer office-b authentication remote-id '198.51.100.20'

set vpn ipsec site-to-site peer office-b connection-type 'initiate'
set vpn ipsec site-to-site peer office-b ike-group 'IKE-RSA'
set vpn ipsec site-to-site peer office-b local-address '203.0.113.10'
set vpn ipsec site-to-site peer office-b remote-address '198.51.100.20'

set vpn ipsec site-to-site peer office-b tunnel 1 esp-group 'ESP-RSA'
set vpn ipsec site-to-site peer office-b tunnel 1 local prefix '10.10.1.0/24'
set vpn ipsec site-to-site peer office-b tunnel 1 remote prefix '10.10.2.0/24'

commit
save
```

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

```bash
configure

# IKE и ESP группы (идентичны Router1)
set vpn ipsec ike-group IKE-RSA proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-RSA proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-RSA proposal 1 hash 'sha256'

set vpn ipsec esp-group ESP-RSA proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-RSA proposal 1 hash 'sha256'

# Настройка site-to-site соединения
set vpn ipsec site-to-site peer office-a authentication mode 'rsa'
set vpn ipsec site-to-site peer office-a authentication rsa local-key 'router2-key'
set vpn ipsec site-to-site peer office-a authentication rsa remote-key 'router1-remote'
set vpn ipsec site-to-site peer office-a authentication local-id '198.51.100.20'
set vpn ipsec site-to-site peer office-a authentication remote-id '203.0.113.10'

set vpn ipsec site-to-site peer office-a connection-type 'respond'
set vpn ipsec site-to-site peer office-a ike-group 'IKE-RSA'
set vpn ipsec site-to-site peer office-a local-address '198.51.100.20'
set vpn ipsec site-to-site peer office-a remote-address '203.0.113.10'

set vpn ipsec site-to-site peer office-a tunnel 1 esp-group 'ESP-RSA'
set vpn ipsec site-to-site peer office-a tunnel 1 local prefix '10.10.2.0/24'
set vpn ipsec site-to-site peer office-a tunnel 1 remote prefix '10.10.1.0/24'

commit
save
```

**Ключевые параметры:**

- `authentication mode 'rsa'`  - использование RSA-аутентификации
- `local-key`  - имя локальной ключевой пары
- `remote-key`  - имя публичного ключа удаленного узла
- `local-id` и `remote-id`  - идентификаторы для IKE (IP-адреса или FQDN)
- `connection-type`  - 'initiate' (инициатор) или 'respond' (ответчик)

## Поддержка динамических IP-адресов

### Конфигурация с local-address "any"

VyOS поддерживает динамические IP-адреса для VPN туннелей, что особенно полезно для подключений из офисов с динамическими IP от провайдера.

**Сценарий:** Router1 имеет динамический IP, Router2 имеет статический IP

**Конфигурация Router1 (динамический IP):**

```bash
configure

set vpn ipsec ike-group IKE-DYNAMIC proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-DYNAMIC proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-DYNAMIC proposal 1 hash 'sha256'

set vpn ipsec esp-group ESP-DYNAMIC proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-DYNAMIC proposal 1 hash 'sha256'

set vpn ipsec site-to-site peer central-office authentication mode 'rsa'
set vpn ipsec site-to-site peer central-office authentication rsa local-key 'branch-key'
set vpn ipsec site-to-site peer central-office authentication rsa remote-key 'central-remote'
set vpn ipsec site-to-site peer central-office authentication local-id 'branch-office@company.local'
set vpn ipsec site-to-site peer central-office authentication remote-id '203.0.113.100'

set vpn ipsec site-to-site peer central-office connection-type 'initiate'
set vpn ipsec site-to-site peer central-office ike-group 'IKE-DYNAMIC'
set vpn ipsec site-to-site peer central-office local-address 'any'
set vpn ipsec site-to-site peer central-office remote-address '203.0.113.100'

set vpn ipsec site-to-site peer central-office tunnel 1 esp-group 'ESP-DYNAMIC'
set vpn ipsec site-to-site peer central-office tunnel 1 local prefix '10.20.1.0/24'
set vpn ipsec site-to-site peer central-office tunnel 1 remote prefix '10.10.0.0/16'

commit
save
```

**Конфигурация Router2 (статический IP - центральный офис):**

```bash
configure

set vpn ipsec ike-group IKE-DYNAMIC proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-DYNAMIC proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-DYNAMIC proposal 1 hash 'sha256'

set vpn ipsec esp-group ESP-DYNAMIC proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-DYNAMIC proposal 1 hash 'sha256'

set vpn ipsec site-to-site peer branch-office authentication mode 'rsa'
set vpn ipsec site-to-site peer branch-office authentication rsa local-key 'central-key'
set vpn ipsec site-to-site peer branch-office authentication rsa remote-key 'branch-remote'
set vpn ipsec site-to-site peer branch-office authentication local-id '203.0.113.100'
set vpn ipsec site-to-site peer branch-office authentication remote-id 'branch-office@company.local'

set vpn ipsec site-to-site peer branch-office connection-type 'respond'
set vpn ipsec site-to-site peer branch-office ike-group 'IKE-DYNAMIC'
set vpn ipsec site-to-site peer branch-office local-address '203.0.113.100'
set vpn ipsec site-to-site peer branch-office remote-address 'any'

set vpn ipsec site-to-site peer branch-office tunnel 1 esp-group 'ESP-DYNAMIC'
set vpn ipsec site-to-site peer branch-office tunnel 1 local prefix '10.10.0.0/16'
set vpn ipsec site-to-site peer branch-office tunnel 1 remote prefix '10.20.1.0/24'

commit
save
```

**Ключевые особенности:**

- `local-address 'any'`  - использовать любой доступный IP-адрес
- `remote-address 'any'`  - принимать подключения с любого IP-адреса
- `local-id` и `remote-id` используют FQDN или email-like идентификаторы для динамических IP
- `connection-type 'initiate'` на стороне с динамическим IP
- `connection-type 'respond'` на стороне со статическим IP

### Использование FQDN в качестве remote-id

Для динамических IP-адресов рекомендуется использовать FQDN или email-like идентификаторы:

```bash
set vpn ipsec site-to-site peer remote-office authentication local-id 'vyos.headquarters.example.com'
set vpn ipsec site-to-site peer remote-office authentication remote-id 'vyos.branch.example.com'
```

**Преимущества FQDN:**

- Идентификация не зависит от IP-адреса
- Поддержка DynDNS для динамических IP
- Упрощенное управление в больших сетях
- Человекочитаемые идентификаторы в логах

### Сценарий с обоими динамическими IP

Если оба узла имеют динамические IP-адреса, требуется третий узел с статическим IP для инициации соединения или использование DynDNS:

```bash
# На обоих узлах
set vpn ipsec site-to-site peer remote-site local-address 'any'
set vpn ipsec site-to-site peer remote-site remote-address '<dyndns-hostname>'
set vpn ipsec site-to-site peer remote-site authentication local-id '<local-fqdn>'
set vpn ipsec site-to-site peer remote-site authentication remote-id '<remote-fqdn>'
```

## Конфигурация remote-id и local-id

### Назначение идентификаторов IKE

IKE идентификаторы (`local-id` и `remote-id`) используются для:

1. **Идентификация узлов** при установлении IPsec туннеля
2. **Сопоставление публичных ключей** с удаленными узлами
3. **Валидация подключений** от правильных источников
4. **Поддержка динамических IP** через неизменяемые идентификаторы

### Типы идентификаторов

**IP-адрес:**

```bash
set vpn ipsec site-to-site peer remote-site authentication local-id '203.0.113.10'
set vpn ipsec site-to-site peer remote-site authentication remote-id '198.51.100.20'
```

Используется для статических IP-адресов, простая идентификация.

**FQDN (Fully Qualified Domain Name):**

```bash
set vpn ipsec site-to-site peer remote-site authentication local-id 'router1.example.com'
set vpn ipsec site-to-site peer remote-site authentication remote-id 'router2.example.com'
```

Рекомендуется для динамических IP, поддержка DNS.

**Email-like идентификатор:**

```bash
set vpn ipsec site-to-site peer remote-site authentication local-id 'office-a@company.local'
set vpn ipsec site-to-site peer remote-site authentication remote-id 'office-b@company.local'
```

Удобно для управления в больших сетях, не требует DNS.

**Distinguished Name (DN):**

```bash
set vpn ipsec site-to-site peer remote-site authentication local-id 'C=RU, O=Company, CN=router1'
set vpn ipsec site-to-site peer remote-site authentication remote-id 'C=RU, O=Company, CN=router2'
```

Используется при интеграции с PKI/CA инфраструктурой.

### Правила сопоставления идентификаторов

**Важно:**
- `local-id` на Router1 должен совпадать с `remote-id` на Router2
- `remote-id` на Router1 должен совпадать с `local-id` на Router2

**Пример правильной конфигурации:**

```bash
# Router1
set vpn ipsec site-to-site peer peer2 authentication local-id 'router1.company.com'
set vpn ipsec site-to-site peer peer2 authentication remote-id 'router2.company.com'

# Router2
set vpn ipsec site-to-site peer peer1 authentication local-id 'router2.company.com'
set vpn ipsec site-to-site peer peer1 authentication remote-id 'router1.company.com'
```

### Идентификаторы в Hub-and-Spoke топологии

**Hub (центральный узел):**

```bash
# Для каждого Spoke отдельный peer с уникальным remote-id
set vpn ipsec site-to-site peer spoke1 authentication local-id 'hub.company.com'
set vpn ipsec site-to-site peer spoke1 authentication remote-id 'spoke1.company.com'

set vpn ipsec site-to-site peer spoke2 authentication local-id 'hub.company.com'
set vpn ipsec site-to-site peer spoke2 authentication remote-id 'spoke2.company.com'
```

**Spoke (филиал):**

```bash
set vpn ipsec site-to-site peer hub authentication local-id 'spoke1.company.com'
set vpn ipsec site-to-site peer hub authentication remote-id 'hub.company.com'
```

## Интеграция с ESP и IKE группами

### Выбор криптографических алгоритмов

**Рекомендуемые комбинации для различных сценариев:**

**Максимальная безопасность (государственные организации, финансовый сектор):**

```bash
# IKE Group
set vpn ipsec ike-group IKE-HIGH-SEC proposal 1 dh-group '20'
set vpn ipsec ike-group IKE-HIGH-SEC proposal 1 encryption 'aes256gcm16'
set vpn ipsec ike-group IKE-HIGH-SEC proposal 1 hash 'sha512'
set vpn ipsec ike-group IKE-HIGH-SEC lifetime '14400'

# ESP Group
set vpn ipsec esp-group ESP-HIGH-SEC proposal 1 encryption 'aes256gcm16'
set vpn ipsec esp-group ESP-HIGH-SEC proposal 1 hash 'sha512'
set vpn ipsec esp-group ESP-HIGH-SEC lifetime '3600'
set vpn ipsec esp-group ESP-HIGH-SEC pfs 'dh-group20'
```

**Баланс безопасности и производительности (корпоративные сети):**

```bash
# IKE Group
set vpn ipsec ike-group IKE-BALANCED proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-BALANCED proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-BALANCED proposal 1 hash 'sha256'
set vpn ipsec ike-group IKE-BALANCED lifetime '28800'

# ESP Group
set vpn ipsec esp-group ESP-BALANCED proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-BALANCED proposal 1 hash 'sha256'
set vpn ipsec esp-group ESP-BALANCED lifetime '3600'
set vpn ipsec esp-group ESP-BALANCED pfs 'dh-group14'
```

**Максимальная производительность (тестовые среды, высокая пропускная способность):**

```bash
# IKE Group
set vpn ipsec ike-group IKE-PERFORMANCE proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-PERFORMANCE proposal 1 encryption 'aes128gcm16'
set vpn ipsec ike-group IKE-PERFORMANCE proposal 1 hash 'sha256'
set vpn ipsec ike-group IKE-PERFORMANCE lifetime '28800'

# ESP Group
set vpn ipsec esp-group ESP-PERFORMANCE proposal 1 encryption 'aes128gcm16'
set vpn ipsec esp-group ESP-PERFORMANCE proposal 1 hash 'sha256'
set vpn ipsec esp-group ESP-PERFORMANCE lifetime '3600'
set vpn ipsec esp-group ESP-PERFORMANCE pfs 'dh-group14'
```

### Множественные proposal для совместимости

Для совместимости с различными VPN-концентраторами можно настроить несколько proposals:

```bash
set vpn ipsec ike-group IKE-MULTI proposal 1 dh-group '20'
set vpn ipsec ike-group IKE-MULTI proposal 1 encryption 'aes256gcm16'
set vpn ipsec ike-group IKE-MULTI proposal 1 hash 'sha512'

set vpn ipsec ike-group IKE-MULTI proposal 2 dh-group '14'
set vpn ipsec ike-group IKE-MULTI proposal 2 encryption 'aes256'
set vpn ipsec ike-group IKE-MULTI proposal 2 hash 'sha256'

set vpn ipsec ike-group IKE-MULTI proposal 3 dh-group '14'
set vpn ipsec ike-group IKE-MULTI proposal 3 encryption 'aes128'
set vpn ipsec ike-group IKE-MULTI proposal 3 hash 'sha256'
```

VyOS будет пытаться согласовать параметры в порядке приоритета (proposal 1, затем 2, затем 3).

### Dead Peer Detection (DPD)

DPD обеспечивает автоматическое восстановление туннеля при потере связи:

```bash
set vpn ipsec ike-group IKE-GROUP dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE-GROUP dead-peer-detection interval '30'
set vpn ipsec ike-group IKE-GROUP dead-peer-detection timeout '120'
```

**Параметры:**

- **action:** 'restart' (пересоздать туннель), 'clear' (удалить SA), 'hold' (оставить без изменений)
- **interval:** Интервал отправки DPD сообщений (секунды)
- **timeout:** Таймаут ожидания ответа (секунды)

**Рекомендации:**

- Для стабильных каналов: interval=60, timeout=300
- Для нестабильных каналов: interval=30, timeout=120
- Для критичных соединений: interval=10, timeout=30

### Настройка lifetime

**IKE lifetime (ISAKMP SA):**

```bash
set vpn ipsec ike-group IKE-GROUP lifetime '28800'  # 8 часов
```

Более длительный lifetime снижает нагрузку на CPU при перезаключении, но увеличивает окно уязвимости.

**ESP lifetime (IPsec SA):**

```bash
set vpn ipsec esp-group ESP-GROUP lifetime '3600'  # 1 час
```

Более короткий lifetime повышает безопасность за счет частой смены ключей.

**Рекомендуемые значения:**

- IKE: 28800 (8 часов) - 86400 (24 часа)
- ESP: 3600 (1 час) - 14400 (4 часа)

## Пример: Site-to-Site VPN между Yandex Cloud и on-premises

### Архитектура решения

**Сценарий:**
- **Yandex Cloud VPC:** VyOS router в облаке с публичным IP 51.250.10.50, внутренняя сеть 10.128.0.0/16
- **On-Premises:** VyOS router в офисе с публичным IP 203.0.113.25, внутренняя сеть 192.168.10.0/24
- **Требования:** Защищенное соединение между облаком и офисом, RSA-аутентификация, поддержка динамического IP на стороне офиса

### Топология сети

```
┌─────────────────────────────────────────────────────────────┐
│ Yandex Cloud VPC (ru-central1-a)                            │
│                                                              │
│  ┌──────────────────────────────────┐                       │
│  │ VyOS Router (yc-router)          │                       │
│  │ Public IP: 51.250.10.50          │                       │
│  │ Private IP: 10.128.0.10          │                       │
│  │ eth0: 51.250.10.50 (WAN)         │                       │
│  │ eth1: 10.128.0.10 (LAN)          │                       │
│  └──────────────┬───────────────────┘                       │
│                 │                                            │
│  ┌──────────────┴───────────────────┐                       │
│  │ Subnet: 10.128.0.0/24            │                       │
│  │ VMs: 10.128.0.11 - 10.128.0.254  │                       │
│  └──────────────────────────────────┘                       │
│                                                              │
└──────────────────────────┬───────────────────────────────────┘
                           │
                           │ Internet
                           │ IPsec VPN Tunnel (RSA Auth)
                           │
┌──────────────────────────┴───────────────────────────────────┐
│ On-Premises Office                                           │
│                                                              │
│  ┌──────────────────────────────────┐                       │
│  │ VyOS Router (office-router)      │                       │
│  │ Public IP: 203.0.113.25 (dynamic)│                       │
│  │ Private IP: 192.168.10.1         │                       │
│  │ eth0: 203.0.113.25 (WAN)         │                       │
│  │ eth1: 192.168.10.1 (LAN)         │                       │
│  └──────────────┬───────────────────┘                       │
│                 │                                            │
│  ┌──────────────┴───────────────────┐                       │
│  │ LAN: 192.168.10.0/24             │                       │
│  │ Hosts: 192.168.10.10 - .254      │                       │
│  └──────────────────────────────────┘                       │
│                                                              │
└──────────────────────────────────────────────────────────────┘
```

### Генерация ключей

**На Yandex Cloud VyOS Router:**

```bash
vyos@yc-router:~$ configure
vyos@yc-router# generate pki key-pair install yc-cloud-key
Enter private key passphrase: ********
Retype private key passphrase: ********
vyos@yc-router# commit
vyos@yc-router# save
```

**На On-Premises VyOS Router:**

```bash
vyos@office-router:~$ configure
vyos@office-router# generate pki key-pair install office-onprem-key
Enter private key passphrase: ********
Retype private key passphrase: ********
vyos@office-router# commit
vyos@office-router# save
```

### Обмен публичными ключами

**Экспорт публичного ключа Yandex Cloud:**

```bash
vyos@yc-router# run show pki key-pair yc-cloud-key public
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1K8Hx5vQ2Lm7pN9wZ...
(копируйте весь ключ)
-----END PUBLIC KEY-----
```

**Импорт на On-Premises Router:**

```bash
vyos@office-router# set pki key-pair yc-remote-key public key '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1K8Hx5vQ2Lm7pN9wZ...
-----END PUBLIC KEY-----'
vyos@office-router# commit
```

**Аналогично для публичного ключа офиса:**

```bash
vyos@office-router# run show pki key-pair office-onprem-key public
# Копируйте ключ и импортируйте на yc-router как office-remote-key
```

### Конфигурация Yandex Cloud Router

```bash
configure

# IKE Group
set vpn ipsec ike-group IKE-YC-OFFICE proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-YC-OFFICE proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-YC-OFFICE proposal 1 hash 'sha256'
set vpn ipsec ike-group IKE-YC-OFFICE lifetime '28800'
set vpn ipsec ike-group IKE-YC-OFFICE dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE-YC-OFFICE dead-peer-detection interval '30'
set vpn ipsec ike-group IKE-YC-OFFICE dead-peer-detection timeout '120'

# ESP Group
set vpn ipsec esp-group ESP-YC-OFFICE proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-YC-OFFICE proposal 1 hash 'sha256'
set vpn ipsec esp-group ESP-YC-OFFICE lifetime '3600'
set vpn ipsec esp-group ESP-YC-OFFICE pfs 'dh-group14'

# Site-to-Site Peer Configuration
set vpn ipsec site-to-site peer office-branch authentication mode 'rsa'
set vpn ipsec site-to-site peer office-branch authentication rsa local-key 'yc-cloud-key'
set vpn ipsec site-to-site peer office-branch authentication rsa remote-key 'office-remote-key'
set vpn ipsec site-to-site peer office-branch authentication local-id 'yc-router@yandex-cloud.local'
set vpn ipsec site-to-site peer office-branch authentication remote-id 'office-router@company.local'

set vpn ipsec site-to-site peer office-branch connection-type 'respond'
set vpn ipsec site-to-site peer office-branch ike-group 'IKE-YC-OFFICE'
set vpn ipsec site-to-site peer office-branch local-address '51.250.10.50'
set vpn ipsec site-to-site peer office-branch remote-address 'any'

# Tunnel Configuration
set vpn ipsec site-to-site peer office-branch tunnel 1 esp-group 'ESP-YC-OFFICE'
set vpn ipsec site-to-site peer office-branch tunnel 1 local prefix '10.128.0.0/16'
set vpn ipsec site-to-site peer office-branch tunnel 1 remote prefix '192.168.10.0/24'

commit
save
```

### Конфигурация On-Premises Router

```bash
configure

# IKE Group (идентичная YC Router)
set vpn ipsec ike-group IKE-YC-OFFICE proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-YC-OFFICE proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-YC-OFFICE proposal 1 hash 'sha256'
set vpn ipsec ike-group IKE-YC-OFFICE lifetime '28800'
set vpn ipsec ike-group IKE-YC-OFFICE dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE-YC-OFFICE dead-peer-detection interval '30'
set vpn ipsec ike-group IKE-YC-OFFICE dead-peer-detection timeout '120'

# ESP Group (идентичная YC Router)
set vpn ipsec esp-group ESP-YC-OFFICE proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-YC-OFFICE proposal 1 hash 'sha256'
set vpn ipsec esp-group ESP-YC-OFFICE lifetime '3600'
set vpn ipsec esp-group ESP-YC-OFFICE pfs 'dh-group14'

# Site-to-Site Peer Configuration
set vpn ipsec site-to-site peer yandex-cloud authentication mode 'rsa'
set vpn ipsec site-to-site peer yandex-cloud authentication rsa local-key 'office-onprem-key'
set vpn ipsec site-to-site peer yandex-cloud authentication rsa remote-key 'yc-remote-key'
set vpn ipsec site-to-site peer yandex-cloud authentication local-id 'office-router@company.local'
set vpn ipsec site-to-site peer yandex-cloud authentication remote-id 'yc-router@yandex-cloud.local'

set vpn ipsec site-to-site peer yandex-cloud connection-type 'initiate'
set vpn ipsec site-to-site peer yandex-cloud ike-group 'IKE-YC-OFFICE'
set vpn ipsec site-to-site peer yandex-cloud local-address 'any'
set vpn ipsec site-to-site peer yandex-cloud remote-address '51.250.10.50'

# Tunnel Configuration
set vpn ipsec site-to-site peer yandex-cloud tunnel 1 esp-group 'ESP-YC-OFFICE'
set vpn ipsec site-to-site peer yandex-cloud tunnel 1 local prefix '192.168.10.0/24'
set vpn ipsec site-to-site peer yandex-cloud tunnel 1 remote prefix '10.128.0.0/16'

commit
save
```

### Настройка маршрутизации

**На Yandex Cloud Router:**

```bash
configure

# Статический маршрут для офисной сети через VPN
set protocols static route 192.168.10.0/24 interface tunnel0

# Или через next-hop (если используется VTI)
# set protocols static route 192.168.10.0/24 next-hop <vti-interface-ip>

commit
save
```

**На On-Premises Router:**

```bash
configure

# Статический маршрут для облачной сети через VPN
set protocols static route 10.128.0.0/16 interface tunnel0

commit
save
```

### Настройка NAT (опционально)

Если требуется NAT для доступа VPN клиентов в интернет через Yandex Cloud:

**На Yandex Cloud Router:**

```bash
configure

# Исключение VPN трафика из NAT
set nat source rule 100 outbound-interface 'eth0'
set nat source rule 100 source address '10.128.0.0/16'
set nat source rule 100 destination address '192.168.10.0/24'
set nat source rule 100 exclude

# NAT для интернет-трафика
set nat source rule 200 outbound-interface 'eth0'
set nat source rule 200 source address '10.128.0.0/16'
set nat source rule 200 translation address 'masquerade'

commit
save
```

## Пример: Hub-and-Spoke VPN с RSA-аутентификацией (VK Cloud)

### Архитектура решения

**Сценарий:**
- **Hub (VK Cloud):** Центральный VyOS router с публичным IP 89.208.220.50, сеть 10.0.0.0/16
- **Spoke 1 (Филиал Москва):** VyOS router, динамический IP, сеть 10.10.1.0/24
- **Spoke 2 (Филиал Санкт-Петербург):** VyOS router, динамический IP, сеть 10.10.2.0/24
- **Spoke 3 (Филиал Екатеринбург):** VyOS router, статический IP 198.51.100.100, сеть 10.10.3.0/24

### Топология сети

```
                          ┌─────────────────────────────┐
                          │ VK Cloud (Moscow Region)    │
                          │                             │
                          │  ┌──────────────────────┐   │
                          │  │ Hub VyOS Router      │   │
                          │  │ 89.208.220.50        │   │
                          │  │ 10.0.0.1 (LAN)       │   │
                          │  └──────────┬───────────┘   │
                          │             │               │
                          │  ┌──────────┴───────────┐   │
                          │  │ VK Cloud Network     │   │
                          │  │ 10.0.0.0/16          │   │
                          │  └──────────────────────┘   │
                          │                             │
                          └──────────────┬──────────────┘
                                         │
                 ┌───────────────────────┼───────────────────────┐
                 │                       │                       │
                 │                       │                       │
     ┌───────────▼───────────┐ ┌────────▼────────────┐ ┌────────▼────────────┐
     │ Spoke 1: Moscow       │ │ Spoke 2: SPb        │ │ Spoke 3: Ekb        │
     │ Dynamic IP            │ │ Dynamic IP          │ │ Static IP           │
     │ 10.10.1.0/24          │ │ 10.10.2.0/24        │ │ 198.51.100.100      │
     │                       │ │                     │ │ 10.10.3.0/24        │
     └───────────────────────┘ └─────────────────────┘ └─────────────────────┘
```

### Генерация ключей на всех узлах

**Hub (VK Cloud):**

```bash
vyos@hub-router:~$ configure
vyos@hub-router# generate pki key-pair install hub-vkcloud-key
vyos@hub-router# commit
vyos@hub-router# save
```

**Spoke 1 (Москва):**

```bash
vyos@spoke1-moscow:~$ configure
vyos@spoke1-moscow# generate pki key-pair install spoke1-moscow-key
vyos@spoke1-moscow# commit
vyos@spoke1-moscow# save
```

**Spoke 2 (Санкт-Петербург):**

```bash
vyos@spoke2-spb:~$ configure
vyos@spoke2-spb# generate pki key-pair install spoke2-spb-key
vyos@spoke2-spb# commit
vyos@spoke2-spb# save
```

**Spoke 3 (Екатеринбург):**

```bash
vyos@spoke3-ekb:~$ configure
vyos@spoke3-ekb# generate pki key-pair install spoke3-ekb-key
vyos@spoke3-ekb# commit
vyos@spoke3-ekb# save
```

### Обмен публичными ключами

**Импорт публичных ключей Spokes на Hub:**

```bash
vyos@hub-router# set pki key-pair spoke1-remote-key public key '<spoke1-public-key>'
vyos@hub-router# set pki key-pair spoke2-remote-key public key '<spoke2-public-key>'
vyos@hub-router# set pki key-pair spoke3-remote-key public key '<spoke3-public-key>'
vyos@hub-router# commit
```

**Импорт публичного ключа Hub на каждый Spoke:**

```bash
# На Spoke 1
vyos@spoke1-moscow# set pki key-pair hub-remote-key public key '<hub-public-key>'

# На Spoke 2
vyos@spoke2-spb# set pki key-pair hub-remote-key public key '<hub-public-key>'

# На Spoke 3
vyos@spoke3-ekb# set pki key-pair hub-remote-key public key '<hub-public-key>'
```

### Конфигурация Hub Router (VK Cloud)

```bash
configure

# Общие IKE и ESP группы для всех Spokes
set vpn ipsec ike-group IKE-HUB proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-HUB proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-HUB proposal 1 hash 'sha256'
set vpn ipsec ike-group IKE-HUB lifetime '28800'
set vpn ipsec ike-group IKE-HUB dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE-HUB dead-peer-detection interval '30'
set vpn ipsec ike-group IKE-HUB dead-peer-detection timeout '120'

set vpn ipsec esp-group ESP-HUB proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-HUB proposal 1 hash 'sha256'
set vpn ipsec esp-group ESP-HUB lifetime '3600'
set vpn ipsec esp-group ESP-HUB pfs 'dh-group14'

# Spoke 1 Configuration (Dynamic IP)
set vpn ipsec site-to-site peer spoke1 authentication mode 'rsa'
set vpn ipsec site-to-site peer spoke1 authentication rsa local-key 'hub-vkcloud-key'
set vpn ipsec site-to-site peer spoke1 authentication rsa remote-key 'spoke1-remote-key'
set vpn ipsec site-to-site peer spoke1 authentication local-id 'hub@vkcloud.local'
set vpn ipsec site-to-site peer spoke1 authentication remote-id 'spoke1-moscow@company.local'

set vpn ipsec site-to-site peer spoke1 connection-type 'respond'
set vpn ipsec site-to-site peer spoke1 ike-group 'IKE-HUB'
set vpn ipsec site-to-site peer spoke1 local-address '89.208.220.50'
set vpn ipsec site-to-site peer spoke1 remote-address 'any'

set vpn ipsec site-to-site peer spoke1 tunnel 1 esp-group 'ESP-HUB'
set vpn ipsec site-to-site peer spoke1 tunnel 1 local prefix '10.0.0.0/16'
set vpn ipsec site-to-site peer spoke1 tunnel 1 remote prefix '10.10.1.0/24'

# Spoke 2 Configuration (Dynamic IP)
set vpn ipsec site-to-site peer spoke2 authentication mode 'rsa'
set vpn ipsec site-to-site peer spoke2 authentication rsa local-key 'hub-vkcloud-key'
set vpn ipsec site-to-site peer spoke2 authentication rsa remote-key 'spoke2-remote-key'
set vpn ipsec site-to-site peer spoke2 authentication local-id 'hub@vkcloud.local'
set vpn ipsec site-to-site peer spoke2 authentication remote-id 'spoke2-spb@company.local'

set vpn ipsec site-to-site peer spoke2 connection-type 'respond'
set vpn ipsec site-to-site peer spoke2 ike-group 'IKE-HUB'
set vpn ipsec site-to-site peer spoke2 local-address '89.208.220.50'
set vpn ipsec site-to-site peer spoke2 remote-address 'any'

set vpn ipsec site-to-site peer spoke2 tunnel 1 esp-group 'ESP-HUB'
set vpn ipsec site-to-site peer spoke2 tunnel 1 local prefix '10.0.0.0/16'
set vpn ipsec site-to-site peer spoke2 tunnel 1 remote prefix '10.10.2.0/24'

# Spoke 3 Configuration (Static IP)
set vpn ipsec site-to-site peer spoke3 authentication mode 'rsa'
set vpn ipsec site-to-site peer spoke3 authentication rsa local-key 'hub-vkcloud-key'
set vpn ipsec site-to-site peer spoke3 authentication rsa remote-key 'spoke3-remote-key'
set vpn ipsec site-to-site peer spoke3 authentication local-id 'hub@vkcloud.local'
set vpn ipsec site-to-site peer spoke3 authentication remote-id 'spoke3-ekb@company.local'

set vpn ipsec site-to-site peer spoke3 connection-type 'initiate'
set vpn ipsec site-to-site peer spoke3 ike-group 'IKE-HUB'
set vpn ipsec site-to-site peer spoke3 local-address '89.208.220.50'
set vpn ipsec site-to-site peer spoke3 remote-address '198.51.100.100'

set vpn ipsec site-to-site peer spoke3 tunnel 1 esp-group 'ESP-HUB'
set vpn ipsec site-to-site peer spoke3 tunnel 1 local prefix '10.0.0.0/16'
set vpn ipsec site-to-site peer spoke3 tunnel 1 remote prefix '10.10.3.0/24'

commit
save
```

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

**Spoke 1 (Москва - Dynamic IP):**

```bash
configure

set vpn ipsec ike-group IKE-HUB proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-HUB proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-HUB proposal 1 hash 'sha256'
set vpn ipsec ike-group IKE-HUB lifetime '28800'
set vpn ipsec ike-group IKE-HUB dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE-HUB dead-peer-detection interval '30'
set vpn ipsec ike-group IKE-HUB dead-peer-detection timeout '120'

set vpn ipsec esp-group ESP-HUB proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-HUB proposal 1 hash 'sha256'
set vpn ipsec esp-group ESP-HUB lifetime '3600'
set vpn ipsec esp-group ESP-HUB pfs 'dh-group14'

set vpn ipsec site-to-site peer hub authentication mode 'rsa'
set vpn ipsec site-to-site peer hub authentication rsa local-key 'spoke1-moscow-key'
set vpn ipsec site-to-site peer hub authentication rsa remote-key 'hub-remote-key'
set vpn ipsec site-to-site peer hub authentication local-id 'spoke1-moscow@company.local'
set vpn ipsec site-to-site peer hub authentication remote-id 'hub@vkcloud.local'

set vpn ipsec site-to-site peer hub connection-type 'initiate'
set vpn ipsec site-to-site peer hub ike-group 'IKE-HUB'
set vpn ipsec site-to-site peer hub local-address 'any'
set vpn ipsec site-to-site peer hub remote-address '89.208.220.50'

set vpn ipsec site-to-site peer hub tunnel 1 esp-group 'ESP-HUB'
set vpn ipsec site-to-site peer hub tunnel 1 local prefix '10.10.1.0/24'
set vpn ipsec site-to-site peer hub tunnel 1 remote prefix '10.0.0.0/16'

commit
save
```

**Spoke 2 (Санкт-Петербург - Dynamic IP):**

```bash
configure

# IKE и ESP группы идентичны Spoke 1

set vpn ipsec site-to-site peer hub authentication mode 'rsa'
set vpn ipsec site-to-site peer hub authentication rsa local-key 'spoke2-spb-key'
set vpn ipsec site-to-site peer hub authentication rsa remote-key 'hub-remote-key'
set vpn ipsec site-to-site peer hub authentication local-id 'spoke2-spb@company.local'
set vpn ipsec site-to-site peer hub authentication remote-id 'hub@vkcloud.local'

set vpn ipsec site-to-site peer hub connection-type 'initiate'
set vpn ipsec site-to-site peer hub ike-group 'IKE-HUB'
set vpn ipsec site-to-site peer hub local-address 'any'
set vpn ipsec site-to-site peer hub remote-address '89.208.220.50'

set vpn ipsec site-to-site peer hub tunnel 1 esp-group 'ESP-HUB'
set vpn ipsec site-to-site peer hub tunnel 1 local prefix '10.10.2.0/24'
set vpn ipsec site-to-site peer hub tunnel 1 remote prefix '10.0.0.0/16'

commit
save
```

**Spoke 3 (Екатеринбург - Static IP):**

```bash
configure

# IKE и ESP группы идентичны другим Spokes

set vpn ipsec site-to-site peer hub authentication mode 'rsa'
set vpn ipsec site-to-site peer hub authentication rsa local-key 'spoke3-ekb-key'
set vpn ipsec site-to-site peer hub authentication rsa remote-key 'hub-remote-key'
set vpn ipsec site-to-site peer hub authentication local-id 'spoke3-ekb@company.local'
set vpn ipsec site-to-site peer hub authentication remote-id 'hub@vkcloud.local'

set vpn ipsec site-to-site peer hub connection-type 'respond'
set vpn ipsec site-to-site peer hub ike-group 'IKE-HUB'
set vpn ipsec site-to-site peer hub local-address '198.51.100.100'
set vpn ipsec site-to-site peer hub remote-address '89.208.220.50'

set vpn ipsec site-to-site peer hub tunnel 1 esp-group 'ESP-HUB'
set vpn ipsec site-to-site peer hub tunnel 1 local prefix '10.10.3.0/24'
set vpn ipsec site-to-site peer hub tunnel 1 remote prefix '10.0.0.0/16'

commit
save
```

### Маршрутизация Spoke-to-Spoke через Hub

Для обеспечения связности между Spoke-узлами необходимо настроить маршрутизацию через Hub:

**На Hub Router:**

```bash
configure

# Включить IP forwarding (обычно включено по умолчанию)
set system ip forwarding

# Статические маршруты для каждого Spoke
set protocols static route 10.10.1.0/24 interface tunnel0
set protocols static route 10.10.2.0/24 interface tunnel1
set protocols static route 10.10.3.0/24 interface tunnel2

# Или использовать динамическую маршрутизацию (BGP/OSPF)
# Пример с OSPF:
set protocols ospf area 0 network '10.0.0.0/16'
set protocols ospf area 0 network '10.10.1.0/24'
set protocols ospf area 0 network '10.10.2.0/24'
set protocols ospf area 0 network '10.10.3.0/24'

commit
save
```

**На каждом Spoke Router:**

```bash
configure

# Маршрут по умолчанию через Hub для других Spoke сетей
set protocols static route 10.10.0.0/16 interface tunnel0

# Или специфические маршруты
set protocols static route 10.10.2.0/24 interface tunnel0
set protocols static route 10.10.3.0/24 interface tunnel0

commit
save
```

## Примеры конфигурации для различных сценариев

### Сценарий 1: Site-to-Site с двумя туннелями (резервирование)

Для повышения отказоустойчивости можно настроить два туннеля между одними и теми же узлами:

```bash
configure

# Primary Tunnel (основной канал)
set vpn ipsec site-to-site peer remote-site tunnel 1 esp-group 'ESP-PRIMARY'
set vpn ipsec site-to-site peer remote-site tunnel 1 local prefix '10.10.1.0/24'
set vpn ipsec site-to-site peer remote-site tunnel 1 remote prefix '10.10.2.0/24'
set vpn ipsec site-to-site peer remote-site tunnel 1 priority '10'

# Backup Tunnel (резервный канал)
set vpn ipsec site-to-site peer remote-site-backup authentication mode 'rsa'
set vpn ipsec site-to-site peer remote-site-backup authentication rsa local-key 'local-key'
set vpn ipsec site-to-site peer remote-site-backup authentication rsa remote-key 'remote-key-backup'
set vpn ipsec site-to-site peer remote-site-backup remote-address '<backup-ip>'
set vpn ipsec site-to-site peer remote-site-backup tunnel 1 esp-group 'ESP-BACKUP'
set vpn ipsec site-to-site peer remote-site-backup tunnel 1 local prefix '10.10.1.0/24'
set vpn ipsec site-to-site peer remote-site-backup tunnel 1 remote prefix '10.10.2.0/24'
set vpn ipsec site-to-site peer remote-site-backup tunnel 1 priority '20'

commit
save
```

### Сценарий 2: VPN с разделением трафика (Split Tunneling)

Настройка множественных туннелей для разных подсетей:

```bash
configure

# Tunnel 1: для серверной подсети
set vpn ipsec site-to-site peer remote-site tunnel 1 esp-group 'ESP-SERVERS'
set vpn ipsec site-to-site peer remote-site tunnel 1 local prefix '10.10.1.0/24'
set vpn ipsec site-to-site peer remote-site tunnel 1 remote prefix '10.20.10.0/24'

# Tunnel 2: для рабочих станций
set vpn ipsec site-to-site peer remote-site tunnel 2 esp-group 'ESP-WORKSTATIONS'
set vpn ipsec site-to-site peer remote-site tunnel 2 local prefix '10.10.2.0/24'
set vpn ipsec site-to-site peer remote-site tunnel 2 remote prefix '10.20.20.0/24'

# Tunnel 3: для управляющих систем (с повышенной безопасностью)
set vpn ipsec site-to-site peer remote-site tunnel 3 esp-group 'ESP-MGMT'
set vpn ipsec site-to-site peer remote-site tunnel 3 local prefix '10.10.100.0/24'
set vpn ipsec site-to-site peer remote-site tunnel 3 remote prefix '10.20.100.0/24'

commit
save
```

### Сценарий 3: VPN с QoS для приоритизации трафика

```bash
configure

# Определение классов трафика
set traffic-policy shaper VPN-SHAPER bandwidth '100mbit'
set traffic-policy shaper VPN-SHAPER class 10 bandwidth '40%'
set traffic-policy shaper VPN-SHAPER class 10 match VOICE ip dscp 'ef'
set traffic-policy shaper VPN-SHAPER class 20 bandwidth '30%'
set traffic-policy shaper VPN-SHAPER class 20 match VIDEO ip dscp 'af41'
set traffic-policy shaper VPN-SHAPER class 30 bandwidth '30%'
set traffic-policy shaper VPN-SHAPER default bandwidth '20%'

# Применение политики к VPN интерфейсу
set interfaces tunnel tun0 traffic-policy out 'VPN-SHAPER'

commit
save
```

### Сценарий 4: Интеграция с VRRP для высокой доступности

Два VyOS router в режиме HA с общим виртуальным IP для VPN:

**Router 1 (Master):**

```bash
configure

# VRRP Configuration
set high-availability vrrp group VPN-HA vrid '10'
set high-availability vrrp group VPN-HA interface 'eth0'
set high-availability vrrp group VPN-HA virtual-address '203.0.113.100/24'
set high-availability vrrp group VPN-HA priority '200'

# VPN Configuration using VRRP virtual IP
set vpn ipsec site-to-site peer remote-site local-address '203.0.113.100'

commit
save
```

**Router 2 (Backup):**

```bash
configure

# VRRP Configuration
set high-availability vrrp group VPN-HA vrid '10'
set high-availability vrrp group VPN-HA interface 'eth0'
set high-availability vrrp group VPN-HA virtual-address '203.0.113.100/24'
set high-availability vrrp group VPN-HA priority '100'

# Identical VPN Configuration
set vpn ipsec site-to-site peer remote-site local-address '203.0.113.100'

commit
save
```

## Команды верификации и диагностики

### Проверка состояния IPsec

**Общий статус IPsec:**

```bash
show vpn ipsec sa
```

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

```
Connection                State    Uptime    Bytes In/Out
------------------------  -------  --------  --------------
office-branch             up       00:15:23  125K/98K
  Tunnel 1                up       00:15:20  125K/98K
```

**Детальная информация о соединении:**

```bash
show vpn ipsec sa detail
```

**Вывод включает:**

- IKE версию и алгоритмы
- Состояние туннелей
- Время установления и переключения SA
- Счетчики пакетов и байтов
- Remote и Local ID

### Проверка IKE SA (Security Associations)

```bash
show vpn ike sa
```

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

```
Peer ID / IP                            Local ID / IP
--------------------------------------  ----------------------------
office-router@company.local             yc-router@yandex-cloud.local
198.51.100.20                           51.250.10.50

    State  Encrypt  Hash    D-H Group  NAT-T  A-Time  L-Time
    -----  -------  ------  ---------  -----  ------  ------
    up     aes256   sha256  14         no     2341    28800
```

### Просмотр конфигурации VPN

**Полная конфигурация VPN:**

```bash
show configuration commands | grep vpn
```

**Конкретный peer:**

```bash
show configuration commands | grep "vpn ipsec site-to-site peer office-branch"
```

### Проверка ключей

**Список всех ключевых пар:**

```bash
show pki key-pair
```

**Вывод:**

```
Key Pair Name         Type    Comment
--------------------  ------  ---------
yc-cloud-key          rsa     Local key
office-remote-key     rsa     Remote peer
```

**Просмотр публичного ключа:**

```bash
show pki key-pair yc-cloud-key public
```

### Мониторинг трафика

**Статистика туннелей:**

```bash
show vpn ipsec sa statistics
```

**Просмотр счетчиков:**

```bash
show interfaces tunnel
```

### Отладка и логирование

**Включение подробного логирования IPsec:**

```bash
configure
set vpn ipsec logging log-level '2'
commit
```

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

- 0: Критичные ошибки
- 1: Ошибки
- 2: Предупреждения и важные события (рекомендуется)
- 3: Информационные сообщения
- 4: Отладочная информация (только для диагностики)

**Просмотр логов IPsec:**

```bash
show log vpn ipsec
```

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

```bash
monitor log vpn ipsec
```

**Системные логи:**

```bash
show log | match ipsec
show log | match charon
```

### Тестирование связности

**Ping через VPN туннель:**

```bash
ping 10.128.0.11 source-address 192.168.10.1 count 5
```

**Traceroute через туннель:**

```bash
traceroute 10.128.0.11 source-address 192.168.10.1
```

**Проверка маршрутизации:**

```bash
show ip route
show ip route 10.128.0.0/16
```

## Устранение неполадок (Troubleshooting)

### Ошибки аутентификации

**Проблема:** Туннель не устанавливается, ошибки аутентификации в логах

**Симптомы:**

```
IKE authentication credentials are unacceptable
received NO_PROPOSAL_CHOSEN error notify
```

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

1. **Проверка соответствия ключей:**

```bash
# На Router1
show pki key-pair remote-router-key public

# Сравните с локальным ключом на Router2
show pki key-pair local-router-key public
```

Публичный ключ Router1 должен точно совпадать с импортированным ключом на Router2.

2. **Проверка local-id и remote-id:**

```bash
# На Router1
show configuration commands | grep "authentication.*-id"

# На Router2
show configuration commands | grep "authentication.*-id"
```

Убедитесь, что local-id Router1 = remote-id Router2 и наоборот.

3. **Проверка режима аутентификации:**

```bash
show configuration commands | grep "authentication mode"
```

Должен быть установлен `mode 'rsa'` на обеих сторонах.

### Несоответствие ключей (Key Mismatch)

**Проблема:** Ключи не совпадают или повреждены

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

```bash
# Экспорт и сравнение ключей
show pki key-pair remote-key public | save /tmp/remote-key.txt

# Сравните с оригинальным ключом удаленного узла
```

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

1. Удалите поврежденный ключ:

```bash
configure
delete pki key-pair remote-key
commit
```

2. Импортируйте ключ заново:

```bash
set pki key-pair remote-key public key '<correct-public-key>'
commit
save
```

3. Перезапустите IPsec:

```bash
restart vpn
```

### Проблемы с proposal (алгоритмы шифрования)

**Проблема:** NO_PROPOSAL_CHOSEN ошибка

**Симптомы:**

```
no matching proposal found, sending NO_PROPOSAL_CHOSEN
```

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

Убедитесь, что IKE и ESP группы идентичны на обеих сторонах:

```bash
# Router1
show configuration commands | grep "ike-group IKE-GROUP"
show configuration commands | grep "esp-group ESP-GROUP"

# Router2 - должна быть идентичная конфигурация
```

Добавьте множественные proposals для совместимости:

```bash
configure
set vpn ipsec ike-group IKE-GROUP proposal 2 dh-group '14'
set vpn ipsec ike-group IKE-GROUP proposal 2 encryption 'aes128'
set vpn ipsec ike-group IKE-GROUP proposal 2 hash 'sha256'
commit
```

### Туннель устанавливается, но трафик не проходит

**Проблема:** IPsec SA активен, но пинг не работает

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

1. **Проверка tunnel prefixes:**

```bash
show configuration commands | grep "tunnel.*prefix"
```

Убедитесь, что local и remote prefixes правильно настроены и зеркально отражены на обеих сторонах.

2. **Проверка firewall правил:**

```bash
show firewall
```

Убедитесь, что трафик из VPN-сетей разрешен.

3. **Проверка NAT:**

```bash
show nat source rules
```

VPN-трафик должен быть исключен из NAT:

```bash
configure
set nat source rule 10 outbound-interface 'eth0'
set nat source rule 10 source address '10.10.1.0/24'
set nat source rule 10 destination address '10.10.2.0/24'
set nat source rule 10 exclude
commit
```

4. **Проверка маршрутизации:**

```bash
show ip route
```

Должны быть маршруты для удаленных VPN-сетей через туннельный интерфейс.

### Dead Peer Detection не работает

**Проблема:** Туннель не восстанавливается после разрыва

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

```bash
configure
set vpn ipsec ike-group IKE-GROUP dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE-GROUP dead-peer-detection interval '30'
set vpn ipsec ike-group IKE-GROUP dead-peer-detection timeout '120'
commit
save
```

Для более агрессивного DPD:

```bash
set vpn ipsec ike-group IKE-GROUP dead-peer-detection interval '10'
set vpn ipsec ike-group IKE-GROUP dead-peer-detection timeout '30'
```

### Проблемы с динамическими IP

**Проблема:** Туннель не устанавливается после смены IP-адреса

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

1. **На стороне с динамическим IP:**

```bash
configure
set vpn ipsec site-to-site peer remote-site local-address 'any'
set vpn ipsec site-to-site peer remote-site connection-type 'initiate'
commit
```

2. **На стороне со статическим IP:**

```bash
configure
set vpn ipsec site-to-site peer remote-site remote-address 'any'
set vpn ipsec site-to-site peer remote-site connection-type 'respond'
commit
```

3. **Принудительное переподключение:**

```bash
reset vpn ipsec-peer <peer-name>
```

### Логи для диагностики

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

```bash
configure
set vpn ipsec logging log-level '3'
set vpn ipsec logging log-modes 'ike'
set vpn ipsec logging log-modes 'esp'
commit
```

**Просмотр детальных логов:**

```bash
show log vpn ipsec | tail 100
monitor log vpn ipsec
```

**Системные логи charon (IKE daemon):**

```bash
show log | match charon
```

### Полный сброс и переподключение

**Сброс конкретного peer:**

```bash
reset vpn ipsec-peer office-branch
```

**Полный перезапуск IPsec:**

```bash
restart vpn
```

**Проверка после перезапуска:**

```bash
show vpn ipsec sa
show vpn ike sa
```

## Лучшие практики и рекомендации

### Управление ключами

**1. Длина ключей:**

- Минимум 2048 бит для корпоративных сетей
- 3072 бита для повышенной безопасности
- 4096 бит для критичных государственных систем

```bash
# Рекомендуемая генерация
generate pki key-pair type rsa length 3072 install <key-name>
```

**2. Регулярная ротация ключей:**

- Меняйте ключи каждые 12-24 месяца
- Немедленная ротация при подозрении на компрометацию
- Документируйте процесс ротации

**Процесс ротации:**

```bash
# 1. Генерация новых ключей
generate pki key-pair install new-key

# 2. Обмен публичными ключами
# 3. Обновление конфигурации VPN
configure
set vpn ipsec site-to-site peer remote authentication rsa local-key 'new-key'
commit

# 4. После проверки - удаление старых ключей
delete pki key-pair old-key
commit
save
```

**3. Защита приватных ключей:**

- Всегда используйте парольную защиту для приватных ключей
- Ограничьте доступ к конфигурации VyOS
- Регулярное резервное копирование ключей в защищенное хранилище
- Не передавайте приватные ключи по незащищенным каналам

**4. Централизованное управление:**

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

```bash
# Скрипт для автоматизированного обмена ключами
#!/bin/bash
ROUTERS="router1 router2 router3"
for router in $ROUTERS; do
    ssh vyos@$router "show pki key-pair local-key public" > ${router}-public.key
done
```

### Выбор криптографических параметров

**1. Diffie-Hellman группы:**

- **Группа 14 (2048-bit MODP):** Минимально рекомендуемая
- **Группа 19 (256-bit ECP):** Оптимальный баланс
- **Группа 20 (384-bit ECP):** Максимальная безопасность

```bash
# Рекомендуемая конфигурация
set vpn ipsec ike-group IKE-SECURE proposal 1 dh-group '19'
```

**2. Алгоритмы шифрования:**

- **AES-256:** Стандарт для корпоративных сетей
- **AES-256-GCM:** Современный AEAD режим с аутентификацией
- **AES-128-GCM:** Для высокопроизводительных систем

```bash
# Современная безопасная конфигурация
set vpn ipsec ike-group IKE-MODERN proposal 1 encryption 'aes256gcm16'
set vpn ipsec esp-group ESP-MODERN proposal 1 encryption 'aes256gcm16'
```

**3. Функции хеширования:**

- **SHA-256:** Стандарт для большинства применений
- **SHA-384/512:** Для систем с повышенными требованиями

**4. Perfect Forward Secrecy (PFS):**

Всегда включайте PFS для защиты от компрометации долгосрочных ключей:

```bash
set vpn ipsec esp-group ESP-GROUP pfs 'dh-group19'
```

### Настройка lifetime

**Рекомендации по времени жизни SA:**

**IKE Lifetime:**

```bash
set vpn ipsec ike-group IKE-GROUP lifetime '28800'  # 8 часов
```

- Не устанавливайте слишком короткий lifetime (< 1 час) - увеличивает нагрузку на CPU
- Оптимальный диапазон: 8-24 часа
- Для критичных систем: 4-8 часов

**ESP Lifetime:**

```bash
set vpn ipsec esp-group ESP-GROUP lifetime '3600'  # 1 час
```

- Оптимальный диапазон: 1-4 часа
- Для высокозагруженных каналов: 30-60 минут
- Учитывайте объем трафика и производительность

### Мониторинг и логирование

**1. Настройка уровней логирования:**

```bash
configure
# Для продакшена - уровень 2 (warnings)
set vpn ipsec logging log-level '2'

# Для отладки - уровень 3-4
set vpn ipsec logging log-level '3'
set vpn ipsec logging log-modes 'ike'
set vpn ipsec logging log-modes 'esp'
set vpn ipsec logging log-modes 'cfg'

commit
save
```

**2. Автоматизированный мониторинг:**

Создайте скрипт для проверки состояния VPN:

```bash
#!/bin/bash
# /config/scripts/vpn-monitor.sh

PEERS="office-branch datacenter-vpn"
LOG_FILE="/var/log/vpn-monitor.log"

for peer in $PEERS; do
    STATUS=$(vtysh -c "show vpn ipsec sa | grep $peer | grep -c 'up'")
    if [ $STATUS -eq 0 ]; then
        echo "$(date): WARNING - VPN peer $peer is DOWN" >> $LOG_FILE
        # Попытка восстановления
        vtysh -c "reset vpn ipsec-peer $peer"
    fi
done
```

Запуск через cron:

```bash
configure
set system task-scheduler task vpn-monitor interval '5m'
set system task-scheduler task vpn-monitor executable path '/config/scripts/vpn-monitor.sh'
commit
```

**3. SNMP мониторинг:**

```bash
configure
set service snmp community public authorization 'ro'
set service snmp community public network '10.0.0.0/8'
commit
```

**4. Syslog интеграция:**

```bash
configure
set system syslog host 10.0.1.100 facility all level 'info'
set system syslog host 10.0.1.100 facility security level 'warning'
commit
```

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

**1. Настройка MTU для VPN:**

```bash
configure
# Уменьшение MTU для избежания фрагментации
set interfaces ethernet eth0 mtu '1500'
set interfaces tunnel tun0 mtu '1400'

# Включение MSS clamping
set policy route MSS-CLAMP rule 10 protocol 'tcp'
set policy route MSS-CLAMP rule 10 tcp flags 'SYN'
set policy route MSS-CLAMP rule 10 set tcp-mss '1360'

commit
```

**2. Аппаратное ускорение (если поддерживается):**

```bash
# Проверка поддержки AES-NI
show system cpu features
```

**3. Оптимизация для высокопроизводительных каналов:**

```bash
configure
# Использование GCM режима для аппаратного ускорения
set vpn ipsec ike-group IKE-PERF proposal 1 encryption 'aes128gcm16'
set vpn ipsec esp-group ESP-PERF proposal 1 encryption 'aes128gcm16'

# Увеличение буферов (при необходимости)
set system sysctl parameter net.core.rmem_max value '134217728'
set system sysctl parameter net.core.wmem_max value '134217728'

commit
```

### Безопасность и hardening

**1. Firewall для VPN трафика:**

```bash
configure
# Разрешить только IKE и ESP
set firewall name WAN_LOCAL rule 100 action 'accept'
set firewall name WAN_LOCAL rule 100 protocol 'udp'
set firewall name WAN_LOCAL rule 100 destination port '500'
set firewall name WAN_LOCAL rule 100 description 'Allow IKE'

set firewall name WAN_LOCAL rule 110 action 'accept'
set firewall name WAN_LOCAL rule 110 protocol 'udp'
set firewall name WAN_LOCAL rule 110 destination port '4500'
set firewall name WAN_LOCAL rule 110 description 'Allow NAT-T'

set firewall name WAN_LOCAL rule 120 action 'accept'
set firewall name WAN_LOCAL rule 120 protocol 'esp'
set firewall name WAN_LOCAL rule 120 description 'Allow ESP'

commit
```

**2. Ограничение доступа к управлению:**

```bash
configure
set service ssh access-control allow from '10.0.0.0/8'
set service ssh access-control allow from '192.168.0.0/16'
set service ssh access-control deny from '0.0.0.0/0'

set service https access-control allow from '10.0.0.0/8'
set service https access-control deny from '0.0.0.0/0'

commit
```

**3. Rate limiting для защиты от DoS:**

```bash
configure
set firewall name WAN_LOCAL rule 90 action 'drop'
set firewall name WAN_LOCAL rule 90 protocol 'udp'
set firewall name WAN_LOCAL rule 90 destination port '500,4500'
set firewall name WAN_LOCAL rule 90 recent count '10'
set firewall name WAN_LOCAL rule 90 recent time '60'
set firewall name WAN_LOCAL rule 90 state new 'enable'

commit
```

### Документирование конфигурации

**1. Описания в конфигурации:**

```bash
configure
set vpn ipsec site-to-site peer office-branch description 'VPN to Moscow Office'
set vpn ipsec ike-group IKE-CORPORATE description 'Corporate VPN IKE parameters'
set vpn ipsec esp-group ESP-CORPORATE description 'Corporate VPN ESP parameters'
commit
```

**2. Ведение changelog:**

```bash
# Добавление комментария к конфигурации
configure
commit comment "Added VPN tunnel to new branch office in SPb"
```

**3. Резервное копирование:**

```bash
# Автоматическое резервное копирование конфигурации
configure
set system task-scheduler task backup-config crontab-spec '0 2 * * *'
set system task-scheduler task backup-config executable path '/config/scripts/backup.sh'
commit
```

Скрипт резервного копирования:

```bash
#!/bin/bash
# /config/scripts/backup.sh
DATE=$(date +%Y%m%d-%H%M%S)
cp /config/config.boot /config/backups/config.boot.$DATE
# Оставляем последние 30 копий
ls -t /config/backups/config.boot.* | tail -n +31 | xargs rm -f
```

### Тестирование и валидация

**1. Регулярное тестирование:**

- Проверка связности через VPN еженедельно
- Тестирование failover механизмов ежемесячно
- Проверка восстановления после отключения питания

**2. Нагрузочное тестирование:**

```bash
# iperf3 тестирование пропускной способности VPN
iperf3 -c 10.10.2.1 -t 60 -P 4
```

**3. Проверка безопасности:**

```bash
# Валидация криптографических параметров
show vpn ipsec sa detail | grep -E "encr|hash|DH"
```

## Рекомендации по безопасности

### Защита приватных ключей

**1. Парольная защита:**

Всегда генерируйте ключи с парольной защитой:

```bash
generate pki key-pair install secure-key
# Введите надежный пароль при запросе
```

**2. Ограничение доступа к системе:**

```bash
configure
# Двухфакторная аутентификация через RADIUS/TACACS+
set system login radius server 10.0.1.50 key 'radius-secret'
set system login user admin authentication encrypted-password '<hash>'
set system login user admin authentication radius

# Отключение root входа
set system login user root authentication encrypted-password '!'

commit
```

**3. Аудит доступа:**

```bash
configure
set system syslog global facility auth level 'info'
set system syslog global facility authpriv level 'info'
commit
```

### Защита от атак

**1. Anti-replay защита:**

IPsec автоматически включает anti-replay защиту. Проверка:

```bash
show vpn ipsec sa detail | grep -i replay
```

**2. DPD для обнаружения атак:**

```bash
configure
set vpn ipsec ike-group IKE-GROUP dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE-GROUP dead-peer-detection interval '30'
commit
```

**3. Rate limiting:**

```bash
configure
set firewall name WAN_LOCAL rule 85 action 'drop'
set firewall name WAN_LOCAL rule 85 protocol 'udp'
set firewall name WAN_LOCAL rule 85 destination port '500'
set firewall name WAN_LOCAL rule 85 recent count '20'
set firewall name WAN_LOCAL rule 85 recent time '60'
commit
```

### Соответствие стандартам

**1. Соответствие ГОСТ (для РФ):**

VyOS поддерживает стандартные алгоритмы. Для ГОСТ криптографии требуется дополнительная интеграция.

**2. Соответствие PCI DSS:**

- Использование AES-256 или выше
- Регулярная ротация ключей (минимум ежегодно)
- Логирование всех событий безопасности
- Ограничение административного доступа

**3. Соответствие HIPAA:**

- Шифрование всех данных в транзите (AES-256)
- Аутентификация узлов (RSA 2048+ бит)
- Аудит и логирование доступа
- Регулярные проверки безопасности

### Планирование disaster recovery

**1. Документирование конфигурации:**

- Схемы топологии VPN
- Список всех публичных ключей и их расположение
- Процедуры восстановления

**2. Резервные копии:**

```bash
# Автоматическое резервирование конфигурации и ключей
configure
set system task-scheduler task daily-backup crontab-spec '0 3 * * *'
set system task-scheduler task daily-backup executable path '/config/scripts/full-backup.sh'
commit
```

**3. Тестирование восстановления:**

Регулярно проверяйте процесс восстановления:

- Восстановление конфигурации из резервной копии
- Импорт ключей на новую систему
- Проверка работоспособности VPN после восстановления

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

RSA-аутентификация для IPsec VPN в VyOS предоставляет надежный и масштабируемый метод защиты VPN-туннелей. Ключевые преимущества включают:

- **Безопасность:** Асимметричная криптография исключает риски, связанные с общими ключами
- **Масштабируемость:** Упрощенное управление ключами в больших сетях
- **Гибкость:** Поддержка динамических IP-адресов и различных топологий
- **Совместимость:** Стандартные протоколы обеспечивают совместимость с различными VPN-решениями

**Основные рекомендации:**

1. Используйте ключи длиной минимум 2048 бит (рекомендуется 3072 бита)
2. Регулярно ротируйте ключи (каждые 12-24 месяца)
3. Защищайте приватные ключи паролями
4. Используйте современные криптографические алгоритмы (AES-256, SHA-256, DH-группа 14+)
5. Включайте PFS (Perfect Forward Secrecy)
6. Настраивайте Dead Peer Detection для автоматического восстановления
7. Мониторьте состояние VPN-туннелей
8. Регулярно обновляйте VyOS для получения исправлений безопасности
9. Документируйте конфигурацию и процедуры
10. Проводите регулярное тестирование и валидацию

При правильной настройке и управлении RSA-аутентификация обеспечивает надежную защиту для VPN-инфраструктуры любого масштаба - от простых Site-to-Site соединений до сложных Hub-and-Spoke и Full-Mesh топологий.

