# Обзор конфигурации VyOS - Иерархическая система управления

> Система конфигурации VyOS - иерархическая структура, транзакционная модель, commit/save, история версий и откат настроек

Source: https://opennix.org/docs/vyos/first-steps/vyos-config-overview/


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

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

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

### Пример иерархии

```
interfaces {
    ethernet eth0 {
        address 192.168.1.1/24
        description "LAN Interface"
    }
    ethernet eth1 {
        address dhcp
        description "WAN Interface"
    }
}
```

### Представление через команды set

Та же конфигурация в виде команд `set`:

```
set interfaces ethernet eth0 address 192.168.1.1/24
set interfaces ethernet eth0 description 'LAN Interface'
set interfaces ethernet eth1 address dhcp
set interfaces ethernet eth1 description 'WAN Interface'
```

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

### Операционный режим

Используется для:
- Просмотра информации о системе
- Мониторинга состояния
- Выполнения диагностических команд
- Управления системными процессами

Приглашение командной строки: `vyos@vyos:~$`

### Режим конфигурации

Используется для:
- Изменения настроек системы
- Управления конфигурацией
- Применения и сохранения изменений

Приглашение командной строки: `vyos@vyos#`

Вход в режим конфигурации:
```
vyos@vyos:~$ configure
[edit]
vyos@vyos#
```

## Основные концепции

### 1. Рабочая и активная конфигурация

VyOS различает два типа конфигурации:

- **Рабочая конфигурация** - изменения, внесенные но еще не примененные
- **Активная конфигурация** - текущая работающая конфигурация системы

Изменения из рабочей конфигурации переносятся в активную после выполнения команды `commit`.

### 2. Транзакционная модель

Изменения конфигурации применяются атомарно:
- Все изменения применяются одновременно при выполнении `commit`
- Если какое-либо изменение приводит к ошибке, вся транзакция откатывается
- Это предотвращает частично примененные конфигурации

### 3. Автоматический откат

VyOS поддерживает автоматический откат для критических изменений:

```
vyos@vyos# commit-confirm 5
```

Если в течение 5 минут не выполнить команду `confirm`, все изменения будут автоматически откачены. Это защищает от потери доступа к удаленному маршрутизатору.

### 4. История конфигурации

VyOS автоматически сохраняет историю всех commit-операций:

```
vyos@vyos# show system commit
0   2024-10-13 15:30:45 by vyos via cli
1   2024-10-13 14:15:22 by vyos via cli
2   2024-10-13 12:05:10 by vyos via cli
```

Можно откатиться к любой предыдущей версии:

```
vyos@vyos# rollback 1
vyos@vyos# commit
```

## Типы узлов конфигурации

### Листовые узлы

Узлы, содержащие конечные значения:

```
set system host-name 'vyos-router'
set interfaces ethernet eth0 address '192.168.1.1/24'
```

### Контейнерные узлы

Узлы, содержащие другие узлы:

```
set interfaces ethernet eth0
set service dhcp-server
```

### Мультизначные узлы

Узлы, которые могут иметь несколько значений:

```
set interfaces ethernet eth0 address '192.168.1.1/24'
set interfaces ethernet eth0 address '192.168.2.1/24'
set interfaces ethernet eth0 address '2001:db8::1/64'
```

### Тегированные узлы

Узлы с именованными экземплярами:

```
set firewall ipv4 name WAN_LOCAL rule 10
set firewall ipv4 name WAN_LOCAL rule 20
set firewall ipv4 name WAN_LOCAL rule 30
```

## Файл конфигурации

### Расположение

Активная конфигурация хранится в:
```
/config/config.boot
```

### Формат

Конфигурация сохраняется в текстовом формате (похожем на JSON):

```
interfaces {
    ethernet eth0 {
        address 192.168.1.1/24
        description "LAN Interface"
        hw-id 00:0c:29:44:3b:0f
    }
}
system {
    host-name vyos-router
    time-zone UTC
}
```

### Ручное редактирование

**Не рекомендуется** редактировать `/config/config.boot` напрямую во время работы системы. Используйте:
- Команды `set` и `delete` в режиме конфигурации
- Команду `load` для загрузки конфигурации из файла

Для редактирования конфигурации офлайн (когда система выключена), можно монтировать раздел `/config` и редактировать `config.boot`.

## Управление конфигурацией

### Сохранение конфигурации

```
vyos@vyos# save
Saving configuration to '/config/config.boot'...
Done
```

Сохранение в другой файл:
```
vyos@vyos# save /tmp/backup-config.boot
```

Сохранение на удаленный сервер:
```
vyos@vyos# save scp://user@192.0.2.100/backup/config.boot
```

### Загрузка конфигурации

Загрузка конфигурации из файла:
```
vyos@vyos# load /tmp/backup-config.boot
```

Загрузка с удаленного сервера:
```
vyos@vyos# load scp://user@192.0.2.100/backup/config.boot
```

### Объединение конфигураций

Объединение конфигурации из файла с текущей:
```
vyos@vyos# merge /tmp/additional-config.boot
```

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

### Вся конфигурация

```
vyos@vyos# show
```

### Часть конфигурации

```
vyos@vyos# show interfaces
vyos@vyos# show interfaces ethernet eth0
```

### Конфигурация в виде команд set

```
vyos@vyos# show interfaces ethernet eth0 | commands
set interfaces ethernet eth0 address '192.168.1.1/24'
set interfaces ethernet eth0 description 'LAN Interface'
```

### Различия конфигураций

Просмотр изменений до commit:
```
vyos@vyos# compare
[edit interfaces ethernet eth0]
+address 192.168.1.1/24
+description "LAN Interface"
```

Сравнение с предыдущей версией:
```
vyos@vyos# compare 1
```

## Валидация конфигурации

VyOS автоматически проверяет корректность конфигурации при выполнении `commit`:

```
vyos@vyos# commit
[interfaces ethernet eth0]
Invalid address '192.168.1.256/24'
Commit failed
```

Типы проверок:
- Синтаксическая корректность
- Правильность значений (IP-адреса, порты и т.д.)
- Зависимости между параметрами
- Конфликты конфигурации

## Комментарии

Добавление комментариев к элементам конфигурации:

```
vyos@vyos# comment interfaces ethernet eth0 "Primary LAN interface for internal network"
```

Комментарии отображаются при просмотре конфигурации:

```
vyos@vyos# show interfaces ethernet eth0
/* Primary LAN interface for internal network */
ethernet eth0 {
    address 192.168.1.1/24
    description "LAN Interface"
}
```

## Шаблоны конфигурации

### Использование переменных

При работе с повторяющимися конфигурациями можно использовать внешние скрипты для генерации команд `set`.

Пример bash-скрипта:

```bash
#!/bin/bash
for i in {1..10}; do
  echo "set interfaces ethernet eth0.$i vif $i"
  echo "set interfaces ethernet eth0.$i address 192.168.$i.1/24"
done
```

Сохраните вывод в файл и загрузите:
```
vyos@vyos# load /tmp/vlan-config.txt
vyos@vyos# commit
```

## Архивирование конфигурации

### Автоматическое архивирование

Настройка автоматического архивирования каждой commit-версии:

```
set system config-management commit-archive location '/config/archive'
set system config-management commit-revisions 100
```

### Удаленное архивирование

Автоматическая отправка конфигурации на удаленный сервер после каждого commit:

```
set system config-management commit-archive location 'scp://backup@192.0.2.100/vyos-configs'
```

При каждом commit конфигурация будет автоматически скопирована на удаленный сервер.

## Лучшие практики

### 1. Всегда используйте commit-confirm для удаленных изменений

```
vyos@vyos# commit-confirm 10
```

Это защитит от потери доступа при ошибочной конфигурации.

### 2. Делайте резервные копии перед значительными изменениями

```
vyos@vyos# save /tmp/backup-$(date +%Y%m%d-%H%M%S).boot
```

### 3. Используйте compare перед commit

```
vyos@vyos# compare
```

Всегда проверяйте изменения перед их применением.

### 4. Документируйте конфигурацию комментариями

```
vyos@vyos# comment interfaces ethernet eth0 "Connected to core switch port 1/0/24"
```

### 5. Используйте осмысленные имена для правил и групп

Вместо:
```
set firewall ipv4 name RULE1 rule 10
```

Используйте:
```
set firewall ipv4 name WAN_LOCAL rule 10
```

### 6. Группируйте связанные изменения

Вносите связанные изменения вместе и делайте commit как одну логическую единицу.

### 7. Регулярно сохраняйте конфигурацию

После каждого успешного commit:
```
vyos@vyos# save
```

### 8. Поддерживайте версионность

Используйте систему контроля версий (Git) для хранения конфигурационных файлов:

```bash
cd /config
git init
git add config.boot
git commit -m "Initial configuration"
```

## Автоматизация конфигурации

### Через API

VyOS 1.5.x предоставляет REST API для автоматизации:

```bash
curl -X POST https://vyos-router/configure \
  -H "Content-Type: application/json" \
  -d '{
    "op": "set",
    "path": ["interfaces", "ethernet", "eth0", "address"],
    "value": "192.168.1.1/24"
  }'
```

### Через Ansible

Использование Ansible модуля:

```yaml
- name: Configure VyOS interface
  vyos_config:
    lines:
      - set interfaces ethernet eth0 address 192.168.1.1/24
      - set interfaces ethernet eth0 description 'LAN Interface'
```

### Через скрипты

Создание startup скриптов в `/config/scripts/`:

```bash
#!/bin/vbash
source /opt/vyatta/etc/functions/script-template
configure
set interfaces ethernet eth0 description 'Auto-configured by script'
commit
save
```

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

### Конфигурация не применяется

Проверьте ошибки при commit:
```
vyos@vyos# commit
```

Просмотрите подробные логи:
```
vyos@vyos:~$ show log | grep commit
```

### Потеря доступа после изменений

Если используете удаленное подключение, всегда используйте `commit-confirm`:
```
vyos@vyos# commit-confirm 5
```

### Откат к рабочей конфигурации

Если система не загружается после изменений, загрузитесь с предыдущего образа через GRUB или используйте:

```
vyos@vyos:~$ configure
vyos@vyos# rollback
vyos@vyos# commit
vyos@vyos# save
```

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

Теперь, когда вы понимаете структуру конфигурации VyOS, переходите к:

- [Конфигурация](/docs/vyos/) - детальные руководства по настройке компонентов
- [Руководство администратора](/docs/vyos/admin-guide/) - операционные команды и автоматизация
- [Устранение неполадок](/docs/vyos/admin-guide/vyos-troubleshooting/) - диагностика проблем

