# Console - Последовательная консоль

> Настройка последовательной консоли (serial console) VyOS - конфигурация ttyS0, скорость передачи данных, out-of-band управление и диагностика устройств

Source: https://opennix.org/docs/vyos/system/vyos-console/


## Обзор

Последовательная консоль (serial console) в VyOS предоставляет механизм для удаленного управления маршрутизатором через последовательный порт. Это особенно полезно в следующих сценариях:

- **Out-of-band управление**: Доступ к устройству независимо от состояния сетевых интерфейсов
- **Диагностика загрузки**: Мониторинг процесса загрузки системы и выявление проблем на ранних стадиях
- **Аварийное восстановление**: Доступ к системе при неработающей сетевой конфигурации
- **Облачные платформы**: Доступ к виртуальным машинам через веб-консоль облачного провайдера
- **Bare-metal серверы**: Управление физическими серверами через KVM или IPMI

Последовательная консоль не является необходимостью для обычных пользователей, но становится критически важной для системных администраторов, работающих с серверным оборудованием или облачными инфраструктурами.

## Поддерживаемые устройства консоли

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

### Serial устройства (ttySN)

Стандартные последовательные порты, встроенные в серверное оборудование:

- `ttyS0` - Первый последовательный порт (COM1)
- `ttyS1` - Второй последовательный порт (COM2)
- `ttyS2` - Третий последовательный порт (COM3)
- `ttyS3` - Четвертый последовательный порт (COM4)

Эти порты обычно используются на физических серверах и некоторых виртуальных машинах.

### USB Serial устройства (ttyUSBX)

USB-to-serial адаптеры и конвертеры:

- `ttyUSB0` - Первый USB последовательный адаптер
- `ttyUSB1` - Второй USB последовательный адаптер
- `ttyUSBX` - Дополнительные USB адаптеры

USB адаптеры полезны для устройств без встроенных последовательных портов или при необходимости дополнительных консольных соединений.

### Виртуальные консоли

Специализированные консольные устройства для виртуализации:

- `hvc0` - Xen HVM console (для Xen виртуализации)

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

### Настройка последовательной консоли

Базовая конфигурация последовательной консоли на ttyS0 с настройками по умолчанию:

```bash
configure
set system console device ttyS0
commit
save
```

### Настройка скорости передачи (Baud Rate)

VyOS поддерживает следующие скорости передачи данных:

- 1200 bps
- 2400 bps
- 4800 bps
- 9600 bps (стандартная скорость)
- 19200 bps
- 38400 bps
- 57600 bps
- 115200 bps (высокая скорость, используется по умолчанию)

#### Пример: Консоль со скоростью 9600 bps

```bash
configure
set system console device ttyS0 speed 9600
commit
save
```

#### Пример: Консоль со скоростью 115200 bps

```bash
configure
set system console device ttyS0 speed 115200
commit
save
```

#### Пример: USB консоль со скоростью 38400 bps

```bash
configure
set system console device ttyUSB0 speed 38400
commit
save
```

### Рекомендации по выбору скорости

**9600 bps**:
- Наиболее совместимая скорость
- Рекомендуется для старого оборудования
- Минимальный риск ошибок передачи данных
- Медленная для больших объемов текста

**115200 bps**:
- Высокая скорость передачи данных
- Рекомендуется для современного оборудования
- Быстрый вывод логов и команд
- Может быть нестабильна на некачественных кабелях или USB адаптерах

**Золотая середина (38400-57600 bps)**:
- Оптимальный баланс скорости и стабильности
- Подходит для большинства сценариев
- Хорошая производительность при надежном соединении

## Ротация консолей (Console Rotation)

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

### Пример: Несколько последовательных консолей

```bash
configure

# Первая консоль на ttyS0 (основная)
set system console device ttyS0 speed 115200

# Вторая консоль на ttyS1 (резервная)
set system console device ttyS1 speed 115200

# USB консоль для локального доступа
set system console device ttyUSB0 speed 9600

commit
save
```

### Пример: Комбинация виртуальной и физической консоли

```bash
configure

# Xen виртуальная консоль (для облачной платформы)
set system console device hvc0 speed 115200

# Физическая последовательная консоль (для IPMI/KVM)
set system console device ttyS0 speed 115200

commit
save
```

## Конфигурация загрузочной консоли (Boot Console)

### GRUB Serial Console

Для доступа к загрузчику GRUB через последовательную консоль необходимо модифицировать конфигурацию GRUB. Это позволяет управлять процессом загрузки системы через serial порт.

#### Редактирование конфигурации GRUB

```bash
# Редактировать конфигурацию GRUB
sudo vi /boot/grub/grub.cfg
```

Добавьте следующие строки в начало файла (после заголовка):

```bash
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal_input serial console
terminal_output serial console
```

#### Параметры загрузки ядра

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

```bash
# Добавить к параметрам linux строки:
console=tty0 console=ttyS0,115200n8
```

Полный пример записи GRUB:

```bash
menuentry 'VyOS' {
    load_video
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    echo 'Loading VyOS...'
    linux /boot/vmlinuz root=/dev/sda1 ro console=tty0 console=ttyS0,115200n8 quiet
    echo 'Loading initial ramdisk...'
    initrd /boot/initrd.img
}
```

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

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

```bash
# Редактировать файл конфигурации по умолчанию
sudo vi /etc/default/grub
```

Добавьте или измените следующие параметры:

```bash
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
GRUB_TERMINAL="serial console"
```

Обновите конфигурацию GRUB:

```bash
sudo update-grub
```

## Примеры для облачных платформ

### Yandex Cloud: Доступ через Serial Console

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

#### Конфигурация VyOS для Yandex Cloud

Стандартная конфигурация для Yandex Cloud (обычно уже настроена в образе):

```bash
configure

# Настройка последовательной консоли для Yandex Cloud
set system console device ttyS0 speed 9600

commit
save
```

#### Доступ через веб-консоль Yandex Cloud

1. Откройте Yandex Cloud Console: https://console.cloud.yandex.ru
2. Перейдите в раздел "Compute Cloud"
3. Выберите виртуальную машину VyOS
4. Нажмите кнопку "Подключиться" и выберите "Serial Console"
5. В открывшемся терминале нажмите Enter для активации консоли

#### Доступ через Yandex Cloud CLI

```bash
# Подключение к serial console через CLI
yc compute instance serial-port-output <instance-id>

# Получение последних 1000 строк вывода
yc compute instance serial-port-output <instance-id> --lines 1000

# Интерактивное подключение (требует SSH ключ)
yc compute connect-to-serial-port --instance-id <instance-id>
```

#### Настройка логирования serial console в Yandex Cloud

```bash
configure

# Включить логирование системы
set system syslog global facility all level info

# Настроить консольный вывод
set system console device ttyS0 speed 9600

commit
save
```

#### Особенности Yandex Cloud Serial Console

- **Скорость**: Используйте 9600 bps для стабильной работы
- **Доступность**: Serial console доступна даже при проблемах с сетью
- **История**: Yandex Cloud сохраняет историю вывода консоли (до 64 КБ)
- **Безопасность**: Доступ к serial console требует прав на виртуальную машину

### VK Cloud: Serial Console для Bare-Metal серверов

VK Cloud (ранее Mail.ru Cloud Solutions) предоставляет доступ к последовательной консоли для bare-metal серверов через IPMI/KVM интерфейс.

#### Конфигурация VyOS для VK Cloud Bare-Metal

```bash
configure

# Настройка последовательной консоли
set system console device ttyS0 speed 115200

# Опционально: дополнительная консоль для резервирования
set system console device ttyS1 speed 115200

commit
save
```

#### Доступ через IPMI Console

1. Войдите в панель управления VK Cloud
2. Перейдите в раздел "Серверы" -> "Bare-metal"
3. Выберите сервер с VyOS
4. Нажмите "IPMI Console" или "KVM Console"
5. В открывшемся окне будет доступна последовательная консоль

#### Настройка для удаленного IPMI доступа

```bash
configure

# Настройка высокоскоростной консоли для IPMI
set system console device ttyS0 speed 115200

# Включить SSH для альтернативного доступа
set service ssh port 22
set service ssh listen-address 0.0.0.0

commit
save
```

#### IPMI Serial-over-LAN (SOL)

Для прямого доступа через IPMI Serial-over-LAN:

```bash
# С клиентской машины подключитесь к IPMI
ipmitool -I lanplus -H <ipmi-ip> -U <username> -P <password> sol activate
```

Конфигурация VyOS должна использовать скорость 115200 bps для SOL:

```bash
configure
set system console device ttyS0 speed 115200
commit
save
```

## Проверка конфигурации консоли

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

```bash
# Показать конфигурацию системной консоли
show configuration system console

# Пример вывода:
# console {
#     device ttyS0 {
#         speed 115200
#     }
# }
```

### Проверка активных консольных устройств

```bash
# Показать активные TTY устройства
show system tty

# Альтернативный способ (в operational mode)
run show system tty
```

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

```bash
# Просмотр логов последовательной консоли
show log tail

# Поиск сообщений, связанных с консолью
show log | match console
```

### Тестирование консольного вывода

```bash
# Вывести тестовое сообщение в консоль
echo "Test message to console" | tee /dev/ttyS0

# Проверить работу консоли через dmesg
show system kernel-messages | match ttyS
```

### Проверка параметров последовательного порта

```bash
# Просмотр параметров последовательного порта (из operational mode)
run show interfaces serial ttyS0

# Детальная информация через stty (из shell)
sudo stty -F /dev/ttyS0 -a
```

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

### Проблема: Консоль не отвечает

**Симптомы**: Нет вывода на последовательную консоль после подключения.

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

1. Проверьте настройки скорости (baud rate) на обоих концах соединения:

```bash
# Убедитесь, что скорость консоли соответствует терминальной программе
show configuration system console device ttyS0
```

2. Проверьте, что устройство активно:

```bash
# Проверка статуса устройства
run show system tty
```

3. Перезапустите getty для консоли:

```bash
# Из shell режима
sudo systemctl restart serial-getty@ttyS0.service
```

4. Проверьте физическое подключение кабеля (для bare-metal).

### Проблема: Искаженные символы на консоли

**Симптомы**: Вывод консоли содержит неправильные символы или нечитаемый текст.

**Причина**: Несовпадение настроек скорости, четности или битов данных.

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

1. Установите стандартную скорость 9600 bps:

```bash
configure
set system console device ttyS0 speed 9600
commit
save
```

2. Проверьте параметры терминальной программы:
   - Data bits: 8
   - Parity: None
   - Stop bits: 1
   - Flow control: None (или Hardware)

3. Попробуйте другие скорости последовательно:

```bash
configure
set system console device ttyS0 speed 38400
commit
# Тестируйте консоль
# Если не работает, попробуйте другую скорость
set system console device ttyS0 speed 57600
commit
```

### Проблема: USB консоль не обнаруживается

**Симптомы**: USB-to-serial адаптер не отображается как ttyUSB0.

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

1. Проверьте распознавание USB устройства:

```bash
# Проверить USB устройства
run show system usb

# Или через lsusb
lsusb
```

2. Проверьте загрузку драйверов:

```bash
# Проверить загруженные модули для USB serial
lsmod | grep usbserial
lsmod | grep ftdi
lsmod | grep pl2303
```

3. Проверьте dmesg для сообщений о USB:

```bash
run show system kernel-messages | match -i usb
run show system kernel-messages | match ttyUSB
```

4. Попробуйте другой USB порт или адаптер.

### Проблема: Консоль работает, но GRUB не отображается

**Симптомы**: VyOS консоль работает, но меню GRUB не видно при загрузке.

**Решение**: Настройте GRUB для вывода на последовательную консоль:

```bash
# Редактировать конфигурацию GRUB
sudo vi /etc/default/grub

# Добавить параметры:
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200"
GRUB_TERMINAL="serial console"

# Обновить GRUB
sudo update-grub

# Перезагрузить систему
reboot now
```

### Проблема: Медленный вывод на консоль

**Симптомы**: Команды выполняются быстро, но вывод появляется медленно.

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

1. Увеличьте скорость передачи:

```bash
configure
set system console device ttyS0 speed 115200
commit
save
```

2. Проверьте настройки flow control:

```bash
# Отключить flow control (в shell режиме)
sudo stty -F /dev/ttyS0 -crtscts -ixon -ixoff
```

3. Уменьшите объем вывода:

```bash
# Вместо полного show configuration
show configuration commands

# Используйте grep для фильтрации
show configuration | match interface
```

### Проблема: Консоль теряет соединение

**Симптомы**: Консольное соединение периодически обрывается.

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

1. Для облачных платформ проверьте timeout настройки:

```bash
# Увеличить timeout для SSH сессий
configure
set service ssh client-keepalive-interval 60
commit
save
```

2. Для физических соединений:
   - Проверьте качество кабеля
   - Используйте экранированные кабели
   - Уменьшите скорость до 9600 bps

3. Настройте автоматический reconnect в терминальной программе.

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

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

1. **Ограничение доступа к физической консоли**:

```bash
configure

# Настройте таймаут консольной сессии
set system login timeout 300

# Требуйте аутентификацию для консоли
set system console device ttyS0

commit
save
```

2. **Логирование консольных сессий**:

```bash
configure

# Включить аудит системных событий
set system syslog global facility auth level info
set system syslog global facility authpriv level info

# Отправка логов на удаленный сервер
set system syslog host 192.168.1.100 facility auth level info

commit
save
```

3. **Защита GRUB паролем** (опционально):

```bash
# Создать хеш пароля для GRUB
grub-mkpasswd-pbkdf2

# Добавить в /etc/grub.d/40_custom
set superusers="root"
password_pbkdf2 root <generated-hash>
```

### Производительность и надежность

1. **Выбор оптимальной скорости**:
   - Локальные соединения: 115200 bps
   - Облачные платформы: 9600-38400 bps
   - Длинные кабели: 9600-19200 bps

2. **Резервирование консолей**:

```bash
configure

# Настроить несколько консольных устройств
set system console device ttyS0 speed 115200
set system console device ttyS1 speed 115200

# Для облачных сред
set system console device hvc0 speed 115200
set system console device ttyS0 speed 9600

commit
save
```

3. **Мониторинг состояния консоли**:

```bash
# Создать скрипт проверки консоли
configure

set system task-scheduler task check-console executable path /config/scripts/check-console.sh
set system task-scheduler task check-console interval 5m

commit
save
```

Пример скрипта `/config/scripts/check-console.sh`:

```bash
#!/bin/bash
# Проверка работоспособности последовательной консоли

CONSOLE_DEVICE="/dev/ttyS0"
LOG_FILE="/var/log/console-check.log"

if [ -e "$CONSOLE_DEVICE" ]; then
    echo "$(date): Console device $CONSOLE_DEVICE is present" >> "$LOG_FILE"

    # Проверка возможности записи
    if echo "test" > "$CONSOLE_DEVICE" 2>/dev/null; then
        echo "$(date): Console device $CONSOLE_DEVICE is writable" >> "$LOG_FILE"
    else
        echo "$(date): WARNING: Console device $CONSOLE_DEVICE is not writable" >> "$LOG_FILE"
        # Перезапуск getty
        systemctl restart serial-getty@ttyS0.service
    fi
else
    echo "$(date): ERROR: Console device $CONSOLE_DEVICE not found" >> "$LOG_FILE"
fi
```

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

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

```bash
configure

# Добавить описание консольной конфигурации
comment system console device ttyS0 "Primary serial console for IPMI/KVM access"
comment system console device ttyS0 speed "115200 bps for high-speed output"

commit
save
```

2. **Сохранение резервных копий конфигурации**:

```bash
# Создать backup с описанием
save /config/backup/config-with-console-$(date +%Y%m%d).boot
```

### Облачные платформы

1. **Yandex Cloud**: Используйте 9600 bps для стабильности:

```bash
configure
set system console device ttyS0 speed 9600
commit
save
```

2. **VK Cloud Bare-Metal**: Используйте 115200 bps для IPMI SOL:

```bash
configure
set system console device ttyS0 speed 115200
commit
save
```

3. **Гибридная конфигурация** (виртуальная + физическая):

```bash
configure

# Виртуальная консоль для облака
set system console device hvc0 speed 115200

# Физическая консоль для backup доступа
set system console device ttyS0 speed 9600

commit
save
```

## Расширенные сценарии

### Автоматическая настройка консоли при развертывании

Пример скрипта для автоматической настройки консоли в зависимости от платформы:

```bash
#!/bin/vbash
# /config/scripts/configure-console.sh
# Автоматическая настройка консоли в зависимости от платформы

source /opt/vyatta/etc/functions/script-template

# Определение платформы
if [ -e /sys/hypervisor/type ]; then
    HYPERVISOR=$(cat /sys/hypervisor/type)
else
    HYPERVISOR="none"
fi

# Конфигурация в зависимости от гипервизора
case $HYPERVISOR in
    xen)
        # Yandex Cloud или другая Xen платформа
        configure
        set system console device hvc0 speed 115200
        set system console device ttyS0 speed 9600
        commit
        save
        ;;
    kvm)
        # KVM виртуализация
        configure
        set system console device ttyS0 speed 115200
        commit
        save
        ;;
    *)
        # Bare-metal или неизвестная платформа
        configure
        set system console device ttyS0 speed 115200
        set system console device ttyS1 speed 115200
        commit
        save
        ;;
esac

echo "Console configured for platform: $HYPERVISOR"
```

### Интеграция с системами мониторинга

Пример экспорта метрик консоли для Prometheus:

```bash
#!/bin/bash
# /config/scripts/console-metrics.sh
# Экспорт метрик консоли для мониторинга

METRICS_FILE="/var/tmp/console_metrics.prom"

# Проверка наличия консольных устройств
console_present=0
if [ -e /dev/ttyS0 ]; then
    console_present=1
fi

# Подсчет сообщений в логах консоли (за последний час)
console_messages=$(journalctl -u serial-getty@ttyS0.service --since "1 hour ago" | wc -l)

# Запись метрик
cat > "$METRICS_FILE" << EOF
# HELP vyos_console_present Console device presence (1=present, 0=absent)
# TYPE vyos_console_present gauge
vyos_console_present{device="ttyS0"} $console_present

# HELP vyos_console_messages_total Total console messages in last hour
# TYPE vyos_console_messages_total counter
vyos_console_messages_total{device="ttyS0"} $console_messages
EOF
```

## Ссылки

- [VyOS Documentation: Console Configuration](https://docs.vyos.io/en/latest/configuration/system/console.html)
- [Yandex Cloud: Serial Console](https://cloud.yandex.ru/docs/compute/operations/serial-console/)
- [VK Cloud: Bare-Metal Servers](https://mcs.mail.ru/help/bare-metal-servers/servers)
- [Serial Console Best Practices](https://www.kernel.org/doc/html/latest/admin-guide/serial-console.html)

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

Последовательная консоль является критически важным инструментом для администрирования VyOS маршрутизаторов, особенно в серверных и облачных средах. Правильная настройка консоли обеспечивает:

- Надежный out-of-band доступ для аварийного восстановления
- Возможность диагностики проблем загрузки системы
- Удобный доступ через облачные платформы (Yandex Cloud, VK Cloud)
- Резервный канал управления при сетевых проблемах

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

